Browse Source

feat(插件开发):新增关键字匹配插件

master
林督翔 1 year ago
parent
commit
6a13dd04a3
5 changed files with 86 additions and 0 deletions
  1. +13
    -0
      plugins/keyword/README.md
  2. +1
    -0
      plugins/keyword/__init__.py
  3. +5
    -0
      plugins/keyword/config.json.template
  4. +67
    -0
      plugins/keyword/keyword.py
  5. BIN
      plugins/keyword/test-keyword.png

+ 13
- 0
plugins/keyword/README.md View File

@@ -0,0 +1,13 @@
# 目的
关键字匹配并回复

# 试用场景
目前是在微信公众号下面使用过。

# 使用步骤
1. 复制 `config.json.template` 为 `config.json`
2. 在关键字 `keyword` 新增需要关键字匹配的内容
3. 重启程序做验证

# 验证结果
![结果](test-keyword.png)

+ 1
- 0
plugins/keyword/__init__.py View File

@@ -0,0 +1 @@
from .keyword import *

+ 5
- 0
plugins/keyword/config.json.template View File

@@ -0,0 +1,5 @@
{
"keyword": {
"关键字匹配": "测试成功"
}
}

+ 67
- 0
plugins/keyword/keyword.py View File

@@ -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



BIN
plugins/keyword/test-keyword.png View File

Before After
Width: 474  |  Height: 124  |  Size: 12KB

Loading…
Cancel
Save