mirror of
https://github.com/Mrs4s/go-cqhttp.git
synced 2025-05-05 03:23:49 +08:00
style: clear filter.
This commit is contained in:
parent
f40ff22c0e
commit
a117d67286
@ -836,7 +836,7 @@ func (bot *CQBot) ToElement(t string, d map[string]string, isGroup bool) (m inte
|
|||||||
Summary: d["content"],
|
Summary: d["content"],
|
||||||
Url: d["url"],
|
Url: d["url"],
|
||||||
PictureUrl: d["image"],
|
PictureUrl: d["image"],
|
||||||
MusicUrl: d["purl"],
|
MusicUrl: d["audio"],
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
xml := fmt.Sprintf(`<?xml version='1.0' encoding='UTF-8' standalone='yes' ?><msg serviceID="2" templateID="1" action="web" brief="[分享] %s" sourceMsgId="0" url="%s" flag="0" adverSign="0" multiMsgFlag="0"><item layout="2"><audio cover="%s" src="%s"/><title>%s</title><summary>%s</summary></item><source name="音乐" icon="https://i.gtimg.cn/open/app_icon/01/07/98/56/1101079856_100_m.png" url="http://web.p.qq.com/qqmpmobile/aio/app.html?id=1101079856" action="app" a_actionData="com.tencent.qqmusic" i_actionData="tencent1101079856://" appid="1101079856" /></msg>`,
|
xml := fmt.Sprintf(`<?xml version='1.0' encoding='UTF-8' standalone='yes' ?><msg serviceID="2" templateID="1" action="web" brief="[分享] %s" sourceMsgId="0" url="%s" flag="0" adverSign="0" multiMsgFlag="0"><item layout="2"><audio cover="%s" src="%s"/><title>%s</title><summary>%s</summary></item><source name="音乐" icon="https://i.gtimg.cn/open/app_icon/01/07/98/56/1101079856_100_m.png" url="http://web.p.qq.com/qqmpmobile/aio/app.html?id=1101079856" action="app" a_actionData="com.tencent.qqmusic" i_actionData="tencent1101079856://" appid="1101079856" /></msg>`,
|
||||||
|
120
global/filter.go
120
global/filter.go
@ -17,35 +17,33 @@ type operationNode struct {
|
|||||||
filter Filter
|
filter Filter
|
||||||
}
|
}
|
||||||
|
|
||||||
// NotOperator 定义了过滤器中Not操作符
|
// notOperator 定义了过滤器中Not操作符
|
||||||
type NotOperator struct {
|
type notOperator struct {
|
||||||
operand Filter
|
operand Filter
|
||||||
}
|
}
|
||||||
|
|
||||||
func notOperatorConstruct(argument gjson.Result) *NotOperator {
|
func newNotOp(argument gjson.Result) Filter {
|
||||||
if !argument.IsObject() {
|
if !argument.IsObject() {
|
||||||
panic("the argument of 'not' operator must be an object")
|
panic("the argument of 'not' operator must be an object")
|
||||||
}
|
}
|
||||||
op := new(NotOperator)
|
return ¬Operator{operand: Generate("and", argument)}
|
||||||
op.operand = Generate("and", argument)
|
|
||||||
return op
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Eval 对payload执行Not过滤
|
// Eval 对payload执行Not过滤
|
||||||
func (op *NotOperator) Eval(payload gjson.Result) bool {
|
func (op *notOperator) Eval(payload gjson.Result) bool {
|
||||||
return !op.operand.Eval(payload)
|
return !op.operand.Eval(payload)
|
||||||
}
|
}
|
||||||
|
|
||||||
// AndOperator 定义了过滤器中And操作符
|
// andOperator 定义了过滤器中And操作符
|
||||||
type AndOperator struct {
|
type andOperator struct {
|
||||||
operands []operationNode
|
operands []operationNode
|
||||||
}
|
}
|
||||||
|
|
||||||
func andOperatorConstruct(argument gjson.Result) *AndOperator {
|
func newAndOp(argument gjson.Result) Filter {
|
||||||
if !argument.IsObject() {
|
if !argument.IsObject() {
|
||||||
panic("the argument of 'and' operator must be an object")
|
panic("the argument of 'and' operator must be an object")
|
||||||
}
|
}
|
||||||
op := new(AndOperator)
|
op := new(andOperator)
|
||||||
argument.ForEach(func(key, value gjson.Result) bool {
|
argument.ForEach(func(key, value gjson.Result) bool {
|
||||||
switch {
|
switch {
|
||||||
case key.Str[0] == '.':
|
case key.Str[0] == '.':
|
||||||
@ -74,7 +72,7 @@ func andOperatorConstruct(argument gjson.Result) *AndOperator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Eval 对payload执行And过滤
|
// Eval 对payload执行And过滤
|
||||||
func (op *AndOperator) Eval(payload gjson.Result) bool {
|
func (op *andOperator) Eval(payload gjson.Result) bool {
|
||||||
res := true
|
res := true
|
||||||
for _, operand := range op.operands {
|
for _, operand := range op.operands {
|
||||||
if len(operand.key) == 0 {
|
if len(operand.key) == 0 {
|
||||||
@ -93,16 +91,16 @@ func (op *AndOperator) Eval(payload gjson.Result) bool {
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
// OrOperator 定义了过滤器中Or操作符
|
// orOperator 定义了过滤器中Or操作符
|
||||||
type OrOperator struct {
|
type orOperator struct {
|
||||||
operands []Filter
|
operands []Filter
|
||||||
}
|
}
|
||||||
|
|
||||||
func orOperatorConstruct(argument gjson.Result) *OrOperator {
|
func newOrOp(argument gjson.Result) Filter {
|
||||||
if !argument.IsArray() {
|
if !argument.IsArray() {
|
||||||
panic("the argument of 'or' operator must be an array")
|
panic("the argument of 'or' operator must be an array")
|
||||||
}
|
}
|
||||||
op := new(OrOperator)
|
op := new(orOperator)
|
||||||
argument.ForEach(func(_, value gjson.Result) bool {
|
argument.ForEach(func(_, value gjson.Result) bool {
|
||||||
op.operands = append(op.operands, Generate("and", value))
|
op.operands = append(op.operands, Generate("and", value))
|
||||||
return true
|
return true
|
||||||
@ -111,7 +109,7 @@ func orOperatorConstruct(argument gjson.Result) *OrOperator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Eval 对payload执行Or过滤
|
// Eval 对payload执行Or过滤
|
||||||
func (op *OrOperator) Eval(payload gjson.Result) bool {
|
func (op *orOperator) Eval(payload gjson.Result) bool {
|
||||||
res := false
|
res := false
|
||||||
for _, operand := range op.operands {
|
for _, operand := range op.operands {
|
||||||
res = res || operand.Eval(payload)
|
res = res || operand.Eval(payload)
|
||||||
@ -122,49 +120,45 @@ func (op *OrOperator) Eval(payload gjson.Result) bool {
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
// EqualOperator 定义了过滤器中Equal操作符
|
// eqOperator 定义了过滤器中Equal操作符
|
||||||
type EqualOperator struct {
|
type eqOperator struct {
|
||||||
operand string
|
operand string
|
||||||
}
|
}
|
||||||
|
|
||||||
func equalOperatorConstruct(argument gjson.Result) *EqualOperator {
|
func newEqOp(argument gjson.Result) Filter {
|
||||||
op := new(EqualOperator)
|
return &eqOperator{operand: argument.String()}
|
||||||
op.operand = argument.String()
|
|
||||||
return op
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Eval 对payload执行Equal过滤
|
// Eval 对payload执行Equal过滤
|
||||||
func (op *EqualOperator) Eval(payload gjson.Result) bool {
|
func (op *eqOperator) Eval(payload gjson.Result) bool {
|
||||||
return payload.String() == op.operand
|
return payload.String() == op.operand
|
||||||
}
|
}
|
||||||
|
|
||||||
// NotEqualOperator 定义了过滤器中NotEqual操作符
|
// neqOperator 定义了过滤器中NotEqual操作符
|
||||||
type NotEqualOperator struct {
|
type neqOperator struct {
|
||||||
operand string
|
operand string
|
||||||
}
|
}
|
||||||
|
|
||||||
func notEqualOperatorConstruct(argument gjson.Result) *NotEqualOperator {
|
func newNeqOp(argument gjson.Result) Filter {
|
||||||
op := new(NotEqualOperator)
|
return &neqOperator{operand: argument.String()}
|
||||||
op.operand = argument.String()
|
|
||||||
return op
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Eval 对payload执行NotEqual过滤
|
// Eval 对payload执行NotEqual过滤
|
||||||
func (op *NotEqualOperator) Eval(payload gjson.Result) bool {
|
func (op *neqOperator) Eval(payload gjson.Result) bool {
|
||||||
return !(payload.String() == op.operand)
|
return !(payload.String() == op.operand)
|
||||||
}
|
}
|
||||||
|
|
||||||
// InOperator 定义了过滤器中In操作符
|
// inOperator 定义了过滤器中In操作符
|
||||||
type InOperator struct {
|
type inOperator struct {
|
||||||
operandString string
|
operandString string
|
||||||
operandArray []string
|
operandArray []string
|
||||||
}
|
}
|
||||||
|
|
||||||
func inOperatorConstruct(argument gjson.Result) *InOperator {
|
func newInOp(argument gjson.Result) Filter {
|
||||||
if argument.IsObject() {
|
if argument.IsObject() {
|
||||||
panic("the argument of 'in' operator must be an array or a string")
|
panic("the argument of 'in' operator must be an array or a string")
|
||||||
}
|
}
|
||||||
op := new(InOperator)
|
op := new(inOperator)
|
||||||
if argument.IsArray() {
|
if argument.IsArray() {
|
||||||
op.operandArray = []string{}
|
op.operandArray = []string{}
|
||||||
argument.ForEach(func(_, value gjson.Result) bool {
|
argument.ForEach(func(_, value gjson.Result) bool {
|
||||||
@ -178,7 +172,7 @@ func inOperatorConstruct(argument gjson.Result) *InOperator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Eval 对payload执行In过滤
|
// Eval 对payload执行In过滤
|
||||||
func (op *InOperator) Eval(payload gjson.Result) bool {
|
func (op *inOperator) Eval(payload gjson.Result) bool {
|
||||||
payloadStr := payload.String()
|
payloadStr := payload.String()
|
||||||
if op.operandArray != nil {
|
if op.operandArray != nil {
|
||||||
for _, value := range op.operandArray {
|
for _, value := range op.operandArray {
|
||||||
@ -191,64 +185,68 @@ func (op *InOperator) Eval(payload gjson.Result) bool {
|
|||||||
return strings.Contains(op.operandString, payloadStr)
|
return strings.Contains(op.operandString, payloadStr)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ContainsOperator 定义了过滤器中Contains操作符
|
// containsOperator 定义了过滤器中Contains操作符
|
||||||
type ContainsOperator struct {
|
type containsOperator struct {
|
||||||
operand string
|
operand string
|
||||||
}
|
}
|
||||||
|
|
||||||
func containsOperatorConstruct(argument gjson.Result) *ContainsOperator {
|
func newContainOp(argument gjson.Result) Filter {
|
||||||
if argument.IsArray() || argument.IsObject() {
|
if argument.IsArray() || argument.IsObject() {
|
||||||
panic("the argument of 'contains' operator must be a string")
|
panic("the argument of 'contains' operator must be a string")
|
||||||
}
|
}
|
||||||
op := new(ContainsOperator)
|
return &containsOperator{operand: argument.String()}
|
||||||
op.operand = argument.String()
|
|
||||||
return op
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Eval 对payload执行Contains过滤
|
// Eval 对payload执行Contains过滤
|
||||||
func (op *ContainsOperator) Eval(payload gjson.Result) bool {
|
func (op *containsOperator) Eval(payload gjson.Result) bool {
|
||||||
return strings.Contains(payload.String(), op.operand)
|
return strings.Contains(payload.String(), op.operand)
|
||||||
}
|
}
|
||||||
|
|
||||||
// RegexOperator 定义了过滤器中Regex操作符
|
// regexOperator 定义了过滤器中Regex操作符
|
||||||
type RegexOperator struct {
|
type regexOperator struct {
|
||||||
regex *regexp.Regexp
|
regex *regexp.Regexp
|
||||||
}
|
}
|
||||||
|
|
||||||
func regexOperatorConstruct(argument gjson.Result) *RegexOperator {
|
func newRegexOp(argument gjson.Result) Filter {
|
||||||
if argument.IsArray() || argument.IsObject() {
|
if argument.IsArray() || argument.IsObject() {
|
||||||
panic("the argument of 'regex' operator must be a string")
|
panic("the argument of 'regex' operator must be a string")
|
||||||
}
|
}
|
||||||
op := new(RegexOperator)
|
return ®exOperator{regex: regexp.MustCompile(argument.String())}
|
||||||
op.regex = regexp.MustCompile(argument.String())
|
|
||||||
return op
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Eval 对payload执行RegexO过滤
|
// Eval 对payload执行RegexO过滤
|
||||||
func (op *RegexOperator) Eval(payload gjson.Result) bool {
|
func (op *regexOperator) Eval(payload gjson.Result) bool {
|
||||||
matched := op.regex.MatchString(payload.String())
|
return op.regex.MatchString(payload.String())
|
||||||
return matched
|
}
|
||||||
|
|
||||||
|
var opFunc = map[string]func(gjson.Result) Filter{
|
||||||
|
"not": newNotOp,
|
||||||
|
"and": newAndOp,
|
||||||
|
"or": newOrOp,
|
||||||
|
"eq": newEqOp,
|
||||||
|
"neq": newNeqOp,
|
||||||
|
"in": newInOp,
|
||||||
|
"contains": newContainOp,
|
||||||
|
"regex": newRegexOp,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generate 根据给定操作符名opName及操作符参数argument创建一个过滤器实例
|
// Generate 根据给定操作符名opName及操作符参数argument创建一个过滤器实例
|
||||||
func Generate(opName string, argument gjson.Result) Filter {
|
func Generate(opName string, argument gjson.Result) Filter {
|
||||||
switch opName {
|
switch opName {
|
||||||
case "not":
|
case "not":
|
||||||
return notOperatorConstruct(argument)
|
return newNotOp(argument)
|
||||||
case "and":
|
case "and":
|
||||||
return andOperatorConstruct(argument)
|
return newAndOp(argument)
|
||||||
case "or":
|
case "or":
|
||||||
return orOperatorConstruct(argument)
|
return newOrOp(argument)
|
||||||
case "neq":
|
case "neq":
|
||||||
return notEqualOperatorConstruct(argument)
|
return newNeqOp(argument)
|
||||||
case "eq":
|
|
||||||
return equalOperatorConstruct(argument)
|
|
||||||
case "in":
|
case "in":
|
||||||
return inOperatorConstruct(argument)
|
return newInOp(argument)
|
||||||
case "contains":
|
case "contains":
|
||||||
return containsOperatorConstruct(argument)
|
return newContainOp(argument)
|
||||||
case "regex":
|
case "regex":
|
||||||
return regexOperatorConstruct(argument)
|
return newRegexOp(argument)
|
||||||
default:
|
default:
|
||||||
panic("the operator " + opName + " is not supported")
|
panic("the operator " + opName + " is not supported")
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user