keyword 更新,允许在回复类型中使用变量 (#116)

允许在回复类型中使用变量。
This commit is contained in:
c3b2a 2021-02-06 19:16:02 +08:00 committed by GitHub
parent fe1782dab0
commit 8efa4cdc21
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 80 additions and 63 deletions

View File

@ -56,22 +56,35 @@
- `denyu` : 在某群中强制禁言某用户。 - `denyu` : 在某群中强制禁言某用户。
- `nthmsg` : 获取你发送的第 n 条消息。 - `nthmsg` : 获取你发送的第 n 条消息。
- `portball` : 回复你要临时禁言的人的消息来实现XX秒的禁言。 - `portball` : 回复你要临时禁言的人的消息来实现XX秒的禁言。
- `da` : 删除所有信息。
- `diss` : 祖安对线语录。
- `shangliu` : 上流对话工具。
- `killallmembers` : 一键扬了群。
- `aff` : 光速发Aff信息。
- `stickertopic` : 贴纸转图片。
- `vip` : vip 捐赠用户功能。
- `calculator` : 小型计算器。
- `paolu` : 一键跑路(删所有消息并禁言)。
- `keyword` : 群组关键词自动回复插件。
- `msgst` : 每天定时发送消息。
- profile (资料类) - profile (资料类)
- `autochangename` : 自动更新 last_name 为时间等。 - `autochangename` : 自动更新 last_name 为时间等。
- `throwit` : 生成一张 扔头像 图片。 - `throwit` : 生成一张 扔头像 图片。
- `mjx` : 随机带评价买家秀,随机涩气买家秀。
- `eat` : 生成一张 吃头像 图片。 - `eat` : 生成一张 吃头像 图片。
- `mjx` : 随机发一张淘宝买家秀
- daily (便民类) - daily (便民类)
- `weather` : 查询天气。 - `weather` : 查询天气。
- `xtao-some` : 一大堆便民功能。 - `xtao-some` : 一大堆便民功能。
- `yb-dl` : 上传 Youtube、Bilibili 视频到 telegram。 - `yb-dl` : 上传 Youtube、Bilibili 视频到 telegram。
- `rate` : 汇率转换。 - `rate` : 汇率转换。
- `netease` : 网易云热评。 - `netease` : 随机一条网易云音乐热评。
- `hyperlink` : 生成隐藏链接。 - `hyperlink` : 生成隐藏链接。
- `whois` : 查询域名信息 - `resou` : 微博知乎抖音实时热搜B站实时排行榜。
- `resou` : 知乎,抖音,微博实时热搜 - `tel` : 查询手机号码归属地等信息。
- `tel` : 查询手机号码归属地等信息 - `whois` : 查询域名whois信息。
- `neteaseshuffle` : 随即一首网易云热门曲目 - `cosplay-multi` : 多网站随机获取Cos图。
- `neteasemusic` : 发送一首来自网易云的音乐 - `meizi` : 多网站随机获取写真。
- `shangliu` : 彩虹屁生成器,毒鸡汤生成器,营销号生成器 - `acg-multi` : 多网站随机获取ACG图。
- `diss` : 祖安语言生成器 - `neteaseshuffle` : 随机网抑热歌。
- `neteasemusic` : 网易云搜歌/随机热歌/点歌。
- `videodl` : 下载YTB/B站视频。

View File

@ -145,58 +145,62 @@ async def send_reply(chat_id, reply_msg, context):
update_last_time = False update_last_time = False
could_send_msg = valid_time(chat_id) could_send_msg = valid_time(chat_id)
for re_type, re_msg in reply_msg: for re_type, re_msg in reply_msg:
catch_pattern = r"\$\{func_(?P<str>((?!\}).)+)\}" try:
count = 0 catch_pattern = r"\$\{func_(?P<str>((?!\}).)+)\}"
while re.search(catch_pattern, re_msg) and count < 20: count = 0
func_name = re.search(catch_pattern, re_msg).group("str") while re.search(catch_pattern, re_msg) and count < 20:
try: func_name = re.search(catch_pattern, re_msg).group("str")
module = import_module(f"plugins.keyword_func.{func_name}") try:
func_data = await module.main(context) module = import_module(f"plugins.keyword_func.{func_name}")
except: func_data = await module.main(context)
func_data = "[RE]" except:
re_msg = re_msg.replace("${func_%s}" % func_name, str(func_data)) func_data = "[RE]"
count += 1 re_msg = re_msg.replace("${func_%s}" % func_name, str(func_data))
for k, v in replace_data.items(): count += 1
re_msg = re_msg.replace(f"${k}", str(v)) for k, v in replace_data.items():
type_parse = re_type.split(",") re_type = re_type.replace(f"${k}", str(v))
for s in type_parse: re_msg = re_msg.replace(f"${k}", str(v))
if len(s) >= 5 and "ext_" == s[0:4] and is_num(s[4:]): type_parse = re_type.split(",")
chat_id = int(s[4:]) for s in type_parse:
break if len(s) >= 5 and "ext_" == s[0:4] and is_num(s[4:]):
if "plain" in type_parse: chat_id = int(s[4:])
if could_send_msg: break
update_last_time = True if "plain" in type_parse:
await bot.send_message(chat_id, re_msg, reply_to = None) if could_send_msg:
elif "reply" in type_parse and chat_id == real_chat_id: update_last_time = True
if could_send_msg: await bot.send_message(chat_id, re_msg, reply_to = None)
update_last_time = True elif "reply" in type_parse and chat_id == real_chat_id:
await bot.send_message(chat_id, re_msg, reply_to = context.id) if could_send_msg:
elif "file" in type_parse and len(re_msg.split()) >= 2: update_last_time = True
if could_send_msg: await bot.send_message(chat_id, re_msg, reply_to = context.id)
update_last_time = True elif "file" in type_parse and len(re_msg.split()) >= 2:
if not path.exists("/tmp"): if could_send_msg:
mkdir("/tmp") update_last_time = True
re_data = re_msg.split() if not path.exists("/tmp"):
file_name = "/tmp/" + re_data[0] mkdir("/tmp")
if re_data[1][0:7] == "file://": re_data = re_msg.split()
copyfile(re_data[1][7:], file_name) file_name = "/tmp/" + re_data[0]
else: if re_data[1][0:7] == "file://":
file_get = requests.get(" ".join(re_data[1:])) copyfile(re_data[1][7:], file_name)
with open(file_name, "wb") as f: else:
f.write(file_get.content) file_get = requests.get(" ".join(re_data[1:]))
reply_to = None with open(file_name, "wb") as f:
if "reply" in re_type.split(","): f.write(file_get.content)
reply_to = context.id reply_to = None
await bot.send_file(chat_id, file_name, reply_to = reply_to, force_document = True) if "reply" in re_type.split(","):
remove(file_name) reply_to = context.id
elif "op" in type_parse: await bot.send_file(chat_id, file_name, reply_to = reply_to, force_document = True)
if re_msg == "delete": remove(file_name)
await context.delete() elif "op" in type_parse:
elif re_msg.split()[0] == "sleep" and len(re_msg.split()) == 2: if re_msg == "delete":
sleep_time = re_msg.split()[1] await context.delete()
if is_num(sleep_time): elif re_msg.split()[0] == "sleep" and len(re_msg.split()) == 2:
await asyncio.sleep(int(sleep_time)) sleep_time = re_msg.split()[1]
chat_id = real_chat_id if is_num(sleep_time):
await asyncio.sleep(int(sleep_time))
chat_id = real_chat_id
except:
pass
if update_last_time: if update_last_time:
global group_last_time global group_last_time
group_last_time[int(chat_id)] = time.time() group_last_time[int(chat_id)] = time.time()

View File

@ -362,10 +362,10 @@
}, },
{ {
"name": "keyword", "name": "keyword",
"version": "2.21", "version": "2.22",
"section": "chat", "section": "chat",
"maintainer": "c3b2a", "maintainer": "c3b2a",
"size": "24.5 kb", "size": "24.8 kb",
"supported": true, "supported": true,
"des-short": "群组关键词自动回复插件", "des-short": "群组关键词自动回复插件",
"des": "命令: keyword, replyset, funcset。" "des": "命令: keyword, replyset, funcset。"