This commit is contained in:
cdle
2023-06-22 08:27:11 +08:00
parent 88b84927f3
commit 564ced7f4f
+16 -7
View File
@@ -339,9 +339,12 @@ func (sender *Strings) HideCQEmoji(text string) map[string]interface{} {
}
// 构建CQ码
func (sender *Strings) BuildCQCode(cqType string, params map[string]interface{}) string {
func (sender *Strings) BuildCQCode(cqType string, params map[string]interface{}, prefix string) string {
if prefix == "" {
prefix = "CQ"
}
var sb strings.Builder
sb.WriteString("[CQ:" + cqType)
sb.WriteString("[" + prefix + ":" + cqType)
for k, v := range params {
sb.WriteString(", ")
sb.WriteString(k)
@@ -353,8 +356,11 @@ func (sender *Strings) BuildCQCode(cqType string, params map[string]interface{})
}
// 将含有 CQ码 的文本解析成文本和 CQ 对象数组
func (sender *Strings) ParseCQText(text string) []interface{} {
cqRegex := regexp.MustCompile(`\[CQ:(\w+)(.*?)\]`)
func (sender *Strings) ParseCQText(text string, prefix string) []interface{} {
if prefix == "" {
prefix = "CQ"
}
cqRegex := regexp.MustCompile(`\[` + prefix + `:(\w+)(.*?)\]`)
cqMatches := cqRegex.FindAllStringSubmatch(text, -1)
result := make([]interface{}, 0, len(cqMatches)*2+1)
// 依次解析 CQ 码和文本
@@ -396,14 +402,17 @@ type CQ struct {
}
// 将 CQ 对象数组转换回原始文本
func (sender *Strings) StringifyCQText(cqList []interface{}) string {
func (sender *Strings) StringifyCQText(cqList []interface{}, prefix string) string {
if prefix == "" {
prefix = "CQ"
}
var sb strings.Builder
for _, item := range cqList {
switch item := item.(type) {
case string:
sb.WriteString(item)
case CQ:
sb.WriteString(fmt.Sprintf("[CQ:%s", item.Type))
sb.WriteString(fmt.Sprintf("["+prefix+":%s", item.Type))
for k, v := range item.Params {
sb.WriteString(fmt.Sprintf(",%s=%s", k, v))
}
@@ -413,7 +422,7 @@ func (sender *Strings) StringifyCQText(cqList []interface{}) string {
Type: item["Type"].(string),
Params: convertParams(item["Params"].(map[string]interface{})),
}
sb.WriteString(fmt.Sprintf("[CQ:%s", cq.Type))
sb.WriteString(fmt.Sprintf("["+prefix+":%s", cq.Type))
for k, v := range cq.Params {
sb.WriteString(fmt.Sprintf(",%s=%s", k, v))
}