diff --git a/plugins/keyword/README.md b/plugins/keyword/README.md new file mode 100644 index 0000000..4678f68 --- /dev/null +++ b/plugins/keyword/README.md @@ -0,0 +1,13 @@ +# 目的 +关键字匹配并回复 + +# 试用场景 +目前是在微信公众号下面使用过。 + +# 使用步骤 +1. 复制 `config.json.template` 为 `config.json` +2. 在关键字 `keyword` 新增需要关键字匹配的内容 +3. 重启程序做验证 + +# 验证结果 +![结果](test-keyword.png) \ No newline at end of file diff --git a/plugins/keyword/__init__.py b/plugins/keyword/__init__.py new file mode 100644 index 0000000..b860b69 --- /dev/null +++ b/plugins/keyword/__init__.py @@ -0,0 +1 @@ +from .keyword import * diff --git a/plugins/keyword/config.json.template b/plugins/keyword/config.json.template new file mode 100644 index 0000000..9a8332f --- /dev/null +++ b/plugins/keyword/config.json.template @@ -0,0 +1,5 @@ +{ + "keyword": { + "关键字匹配": "测试成功" + } +} \ No newline at end of file diff --git a/plugins/keyword/keyword.py b/plugins/keyword/keyword.py new file mode 100644 index 0000000..cc286bd --- /dev/null +++ b/plugins/keyword/keyword.py @@ -0,0 +1,67 @@ +# encoding:utf-8 + +import json +import os +import plugins +from bridge.context import ContextType +from bridge.reply import Reply, ReplyType +from common.log import logger +from plugins import * + +@plugins.register( + name="Keyword", + desire_priority=900, + hidden=True, + desc="关键词匹配过滤", + version="0.1", + author="fengyege.top", +) +class Keyword(Plugin): + def __init__(self): + super().__init__() + try: + curdir = os.path.dirname(__file__) + config_path = os.path.join(curdir, "config.json") + conf = None + if not os.path.exists(config_path): + logger.debug(f"[keyword]不存在配置文件{config_path}") + conf = {"keyword": {}} + with open(config_path, "w", encoding="utf-8") as f: + json.dump(conf, f, indent=4) + else: + logger.debug(f"[keyword]加载配置文件{config_path}") + with open(config_path, "r", encoding="utf-8") as f: + conf = json.load(f) + # 加载关键词 + self.keyword = conf["keyword"] + + logger.info(self.keyword) + self.handlers[Event.ON_HANDLE_CONTEXT] = self.on_handle_context + logger.info("[keyword] inited") + except Exception as e: + logger.warn( + "[keyword] init failed, ignore or see https://github.com/zhayujie/chatgpt-on-wechat/tree/master/plugins/keyword ." + ) + raise e + + def on_handle_context(self, e_context: EventContext): + if e_context["context"].type != ContextType.TEXT: + return + + content = e_context["context"].content.strip() + logger.info("[keyword] on_handle_context. content: %s" % content) + if content in self.keyword: + logger.debug(f"[keyword] 匹配到关键字【{content}】") + reply_text = self.keyword[content] + + reply = Reply() + reply.type = ReplyType.TEXT + reply.content = reply_text + e_context['reply'] = reply + e_context.action = EventAction.BREAK_PASS # 事件结束,并跳过处理context的默认逻辑 + + def get_help_text(self, **kwargs): + help_text = "关键词过滤" + return help_text + + diff --git a/plugins/keyword/test-keyword.png b/plugins/keyword/test-keyword.png new file mode 100644 index 0000000..0f17ae8 Binary files /dev/null and b/plugins/keyword/test-keyword.png differ