mirror of
https://github.com/zhayujie/chatgpt-on-wechat.git
synced 2026-07-19 21:07:28 +08:00
banwords: support reply filter
This commit is contained in:
@@ -36,6 +36,9 @@ class Banwords(Plugin):
|
||||
words.append(word)
|
||||
self.searchr.SetKeywords(words)
|
||||
self.handlers[Event.ON_HANDLE_CONTEXT] = self.on_handle_context
|
||||
if conf.get("reply_filter",True):
|
||||
self.handlers[Event.ON_DECORATE_REPLY] = self.on_decorate_reply
|
||||
self.reply_action = conf.get("reply_action","ignore")
|
||||
logger.info("[Banwords] inited")
|
||||
except Exception as e:
|
||||
logger.warn("[Banwords] init failed, ignore or see https://github.com/zhayujie/chatgpt-on-wechat/tree/master/plugins/banwords .")
|
||||
@@ -53,7 +56,7 @@ class Banwords(Plugin):
|
||||
if self.action == "ignore":
|
||||
f = self.searchr.FindFirst(content)
|
||||
if f:
|
||||
logger.info("Banwords: %s" % f["Keyword"])
|
||||
logger.info("[Banwords] %s in message" % f["Keyword"])
|
||||
e_context.action = EventAction.BREAK_PASS
|
||||
return
|
||||
elif self.action == "replace":
|
||||
@@ -63,5 +66,26 @@ class Banwords(Plugin):
|
||||
e_context.action = EventAction.BREAK_PASS
|
||||
return
|
||||
|
||||
def on_decorate_reply(self, e_context: EventContext):
|
||||
|
||||
if e_context['reply'].type not in [ReplyType.TEXT]:
|
||||
return
|
||||
|
||||
reply = e_context['reply']
|
||||
content = reply.content
|
||||
if self.reply_action == "ignore":
|
||||
f = self.searchr.FindFirst(content)
|
||||
if f:
|
||||
logger.info("[Banwords] %s in reply" % f["Keyword"])
|
||||
e_context['reply'] = None
|
||||
e_context.action = EventAction.BREAK_PASS
|
||||
return
|
||||
elif self.reply_action == "replace":
|
||||
if self.searchr.ContainsAny(content):
|
||||
reply = Reply(ReplyType.INFO, "已替换回复中的敏感词: \n"+self.searchr.Replace(content))
|
||||
e_context['reply'] = reply
|
||||
e_context.action = EventAction.CONTINUE
|
||||
return
|
||||
|
||||
def get_help_text(self, **kwargs):
|
||||
return Banwords.desc
|
||||
Reference in New Issue
Block a user