diff --git a/konabot/common/nb/wzq_conflict.py b/konabot/common/nb/wzq_conflict.py new file mode 100644 index 0000000..beb7eec --- /dev/null +++ b/konabot/common/nb/wzq_conflict.py @@ -0,0 +1,34 @@ +from typing import cast +from nonebot import get_bot, get_plugin_config, logger +from nonebot.adapters import Event as BaseEvent +from nonebot.adapters.onebot.v11.event import GroupMessageEvent +from nonebot.adapters.onebot.v11.bot import Bot as OnebotBot +from nonebot.rule import Rule +from pydantic import BaseModel + + +class WZQConflictConfig(BaseModel): + wzq_bot_qq: int = 0 + +config = get_plugin_config(WZQConflictConfig) + + +async def no_wzqbot(evt: BaseEvent): + if config.wzq_bot_qq <= 0: + return True + if not isinstance(evt, GroupMessageEvent): + return True + gid = evt.group_id + sid = evt.self_id + bot = cast(OnebotBot, get_bot(str(sid))) + + members = await bot.get_group_member_list(group_id=gid) + + members = set((m.get("user_id", -1) for m in members)) + if config.wzq_bot_qq in members: + return False + return True + + +no_wzqbot_rule = Rule(no_wzqbot) + diff --git a/konabot/plugins/gen_qrcode/__init__.py b/konabot/plugins/gen_qrcode/__init__.py index a65b83b..1eaf38a 100644 --- a/konabot/plugins/gen_qrcode/__init__.py +++ b/konabot/plugins/gen_qrcode/__init__.py @@ -8,6 +8,8 @@ from nonebot_plugin_alconna import (Alconna, Args, Field, MultiVar, UniMessage, on_alconna) from nonebot_plugin_alconna.uniseg import UniMsg, At, Reply +from konabot.common.nb.wzq_conflict import no_wzqbot_rule + async def download_img(url): resp = requests.get(url.replace("https://multimedia.nt.qq","http://multimedia.nt.qq")) # bim获取QQ的图片时避免SSLv3报错 img_bytes = BytesIO() @@ -42,7 +44,7 @@ gqrc = on_alconna(Alconna( missing_tips=lambda: "请输入你要转换为二维码的文字!" )], # UniMessage[] -), use_cmd_start=True, use_cmd_sep=False, skip_for_unmatch=False, aliases={"生成二维码","genqrcode"}) +), use_cmd_start=True, use_cmd_sep=False, skip_for_unmatch=False, aliases={"生成二维码","genqrcode"}, rule=no_wzqbot_rule) @gqrc.handle() async def _(saying: list): @@ -66,4 +68,4 @@ async def _(saying: list): else: """ # genqr("\n".join(saying)) - await gqrc.send(await UniMessage().image(raw=genqr("\n".join(saying))).export()) \ No newline at end of file + await gqrc.send(await UniMessage().image(raw=genqr("\n".join(saying))).export()) diff --git a/konabot/plugins/poll/__init__.py b/konabot/plugins/poll/__init__.py index 8885d2a..2cb28ef 100644 --- a/konabot/plugins/poll/__init__.py +++ b/konabot/plugins/poll/__init__.py @@ -1,8 +1,10 @@ import json, time +from nonebot.rule import Rule from nonebot_plugin_alconna import Alconna, Args, Field, MultiVar, on_alconna from nonebot.adapters.onebot.v11 import Event +from konabot.common.nb.wzq_conflict import no_wzqbot_rule from konabot.common.path import ASSETS_PATH, DATA_PATH @@ -66,7 +68,7 @@ poll = on_alconna(Alconna( Args["saying", MultiVar(str, '+'), Field( missing_tips=lambda: "参数错误。用法:发起投票 <投票标题> <选项1> <选项2> ..." )], -), use_cmd_start=True, use_cmd_sep=False, skip_for_unmatch=False, aliases={"发起投票","createpoll"}) +), use_cmd_start=True, use_cmd_sep=False, skip_for_unmatch=False, aliases={"发起投票","createpoll"}, rule=no_wzqbot_rule) @poll.handle() async def _(saying: list, event: Event): if (len(saying) < 3): @@ -88,7 +90,7 @@ viewpoll = on_alconna(Alconna( Args["saying", MultiVar(str, '+'), Field( missing_tips=lambda: "请指定投票ID或标题!。用法:查看投票 <投票ID或标题>" )], -), use_cmd_start=True, use_cmd_sep=False, skip_for_unmatch=False, aliases={"查看投票"}) +), use_cmd_start=True, use_cmd_sep=False, skip_for_unmatch=False, aliases={"查看投票"}, rule=no_wzqbot_rule) @viewpoll.handle() async def _(saying: list): # 参数,投票ID或者标题 @@ -130,7 +132,7 @@ vote = on_alconna(Alconna( Args["saying", MultiVar(str, '+'), Field( missing_tips=lambda: "参数错误。用法:投票 <投票ID/标题> <选项文本>" )], -), use_cmd_start=True, use_cmd_sep=False, skip_for_unmatch=False, aliases={"投票","参与投票"}) +), use_cmd_start=True, use_cmd_sep=False, skip_for_unmatch=False, aliases={"投票","参与投票"}, rule=no_wzqbot_rule) @vote.handle() async def _(saying: list, event: Event): if (len(saying) < 2):