def deco(func) -> Callable: @wraps(func) async def wrapper(session: NoticeSession): funcname = func.__module__ + '.' + func.__name__ try: await func(session, bot) if use_default_infolog: logger.info( f'<Notice> Call function: {funcname}, notice information: {session.event}' ) except Warning as w: logger.warning( f'<Notice> Warning {type(w)} occured while {funcname} is running.' ) except ApiNotAvailable as a: logger.error( f'<Notice> Error {type(a)} occured while {funcname} is running.' ) except ActionFailed as a: logger.error( f'<Notice> Error {type(a)} occured while {funcname} is running, retcode = {a.retcode}.' ) except Exception as e: logger.exception( f'<Notice> Error {type(e)} occured while {funcname} is running.' ) return nonebot.on_notice(*event)(debuglog(logger)(wrapper))
def deco(func): @wraps(func) async def wrapper(session): if not self.check_enabled(session.event.group_id): return return await func(session) return nonebot.on_notice(*events)(wrapper)
async def refresh_bot_role(bot: Bot, event: Event) -> None: """ 更新机器人在群内的身份 """ group_list = await bot.get_group_list() for group in group_list: member_info = await bot.get_group_member_info( group_id=group['group_id'], user_id=bot.self_id ) _bot_role[group['group_id']] = member_info['role'] def group_admin(bot: Bot, event: Event, state: dict) -> bool: """ 群管理员变动 """ if event.detail_type == 'group_admin': return True return False admin_notice = on_notice(rule=group_admin) @admin_notice.handle() async def _(bot: Bot, event: Event, state: dict): if bot.self_id == event.self_id and event.group_id: if event.sub_type == 'set': _bot_role[event.group_id] = 'admin' elif event.sub_type == 'unset': _bot_role[event.group_id] = 'member' #endregion
await help.send( Message([{ "type": "image", "data": { "file": f"base64://{str(image_to_base64(text_to_image(help_str)), encoding='utf-8')}" } }])) async def _group_poke(bot: Bot, event: Event, state: dict) -> bool: value = (event.notice_type == "notify" and event.sub_type == "poke" and event.target_id == int(bot.self_id)) return value poke = on_notice(rule=_group_poke, priority=10, block=True) @poke.handle() async def _(bot: Bot, event: Event, state: T_State): if event.__getattribute__('group_id') is None: event.__delattr__('group_id') await poke.send( Message([{ "type": "poke", "data": { "qq": f"{event.sender_id}" } }]))
from nonebot import on_notice from .data_source import Increase, Decrease,\ Bot, GroupIncreaseNoticeEvent, GroupDecreaseNoticeEvent group_notice = on_notice() async def reply(notice): msg = await notice.reply() await group_notice.finish(msg) @group_notice.handle() async def group_increase_handle(bot: Bot, event: GroupIncreaseNoticeEvent): await reply(Increase(bot, event)) @group_notice.handle() async def group_decrease_handle(bot: Bot, event: GroupDecreaseNoticeEvent): await reply(Decrease(bot, event))
notifier: Bot = choice(ol_bots) try: for su in SUPERUSERS: await notifier.send_private_msg( user_id=su, message=f' {bot.self_id}disconnected at {dc_time}') break except BaseException as err: logger.error( f'Bot {notifier.self_id} failed to send offline notification: {err}' ) ol_bots.remove(notifier) else: logger.error(f'All bots failed to send notification!') else: logger.critical('There is no bot can send notification!') # 被踢提醒 kicked = on_notice( rule=comman_rule(GroupDecreaseNoticeEvent, sub_type="kick_me")) @kicked.handle() async def kicked_remind(bot: Bot, event: GroupDecreaseNoticeEvent): msg = f'被 {event.operator_id} 踢出群 {event.group_id}' logger.info(msg) for su in SUPERUSERS: await bot.send_private_msg(user_id=su, message=msg)
from random import choice from nonebot import on_notice, on_message from nonebot.adapters.onebot.v11.bot import Bot from nonebot.adapters.onebot.v11.message import Message from nonebot.adapters.onebot.v11.event import GroupMessageEvent, FriendRecallNoticeEvent, PokeNotifyEvent, GroupRecallNoticeEvent from nonebot.rule import to_me import src.plugins as cfg poke = on_notice(rule=to_me()) recall = on_notice(priority=10) flashimg = on_message(priority=10) # 群聊撤回 @recall.handle() async def _(bot: Bot, event: GroupRecallNoticeEvent): switch_map = cfg.check_switcher(event.group_id, '防撤回') if len(switch_map) == 0: return mid = event.message_id msg = await bot.get_msg(message_id=mid) if event.user_id != event.self_id and ',type=flash' not in msg['message']: re = '刚刚说了:\n' + msg['message'] await recall.finish(message=Message(re), at_sender=True) # 私聊撤回 @recall.handle() async def _(bot: Bot, event: FriendRecallNoticeEvent):
msg_images = [i for i in event.message if i.type == 'image'] if not msg_images: await say.finish('🤔 需要上传一张图片哦。') return image_origin_url = msg_images[0]['data']['url'] image_token = await imghosting.upload_image_from_url(image_origin_url) content = ImageMessageContent(image=image_token) message = await message_ctl.create_message(episode, character, MessageType.IMAGE, content, is_gm) internal_message_id = event.message_id base.message_cache[internal_message_id] = message.id rollback = on_notice(lambda b, e, d: e.notice_type == 'group_recall') @rollback.handle() async def _(bot: Bot, event: GroupRecallNoticeEvent, state: dict): room_external_id = str(event.group_id) room = await room_ctl.get_room_by_external(ExternalType.QQ, room_external_id) if not room: return episode = await episode_ctl.get_room_running_episode(room) if not episode: return internal_id = event.message_id if internal_id not in base.message_cache: return
else: return "private_" + str(event.get_user_id()) @dynmap.handle() async def _(args: Namespace = ShellCommandArgs(), user_id: str = Depends(get_id)): args.matcher = dynmap args.user_id = user_id if hasattr(args, "func"): await args.func(**vars(args)) async def _poke_status(event: Event) -> bool: if isinstance(event, PokeNotifyEvent) and event.is_tome(): user_id = get_id(event) dynmap_list = get_dynmap_list() if user_id in dynmap_list: if dynmap_list[user_id]["poke"]: return True return False poke_status = on_notice(Rule(_poke_status), priority=15, block=False) @poke_status.handle() async def _(event: Event, user_id: str = Depends(get_id)): await status(poke_status, user_id)
async def handle_group_invite(bot: Bot, event: GroupRequestEvent, state: T_State): user_id = event.user_id group_id = event.group_id sub_type = event.sub_type detail_type = event.request_type if detail_type == 'group' and sub_type == 'invite': await bot.call_api('set_group_add_request', flag=event.flag, sub_type='invite', approve=True) logger.info(f'已处理群组请求, 被用户: {user_id} 邀请加入群组: {group_id}.') # 注册事件响应器, 新增群成员 group_increase = on_notice(priority=100) @group_increase.handle() async def handle_group_increase(bot: Bot, event: GroupIncreaseNoticeEvent, state: T_State): user_id = event.user_id group_id = event.group_id detail_type = event.notice_type if detail_type == 'group_increase' and DBGroup( group_id=group_id).permission_command().result == 1: # 发送欢迎消息 at_seg = MessageSegment.at(user_id=user_id) msg = f'{at_seg}欢迎新朋友~\n进群请先看群公告~\n一起愉快地聊天吧!' await bot.send(event=event, message=Message(msg)) logger.info(f'群组: {group_id}, 有新用户: {user_id} 进群')
from nonebot import on_notice from nonebot.adapters import Bot from nonebot.adapters.cqhttp import unescape from nonebot.adapters.cqhttp.event import ( FriendRecallNoticeEvent, GroupRecallNoticeEvent ) # 私聊防撤回 friend_recall = on_notice() @friend_recall.handle() async def handle_friend_recall(bot: Bot, event: FriendRecallNoticeEvent): user_id = event.get_user_id() # 仅用于自己测试 if user_id == 593457446: msg_id = event.message_id msg = await bot.get_msg(message_id=msg_id) msg = unescape(msg["raw_message"]) await bot.send_private_msg(user_id=user_id, message=f"撤回了一条消息:\n{msg}") test_group_list = [595741581, 873459758] # 群消息防撤回 group_recall = on_notice() @group_recall.handle() async def handle_group_recall(bot: Bot, event: GroupRecallNoticeEvent):
new_event = DBHistory(time=time, self_id=self_id, post_type=post_type, detail_type=detail_type) new_event.add(sub_type=sub_type, group_id=group_id, user_id=user_id, user_name=user_name, raw_data=raw_data, msg_data=msg_data) except Exception as e: logger.error(f'Message history recording Failed, error: {repr(e)}') # 注册事件响应器, 处理NoticeEvent notice_history = on_notice(priority=101, block=True) @notice_history.handle() async def handle_notice(bot: Bot, event: Event, state: T_State): try: time = event.dict().get('time') self_id = event.dict().get('self_id') post_type = event.get_type() detail_type = event.dict().get(f'{event.get_type()}_type') sub_type = event.dict().get('sub_type') group_id = event.dict().get('group_id') user_id = event.dict().get('user_id') raw_data = repr(event) msg_data = str(event.dict().get('message')) new_event = DBHistory(time=time,
from nonebot import on_notice from nonebot.rule import Rule from nonebot.adapters.cqhttp import Bot, Event, GroupRecallNoticeEvent, FriendRecallNoticeEvent, Message from nonebot.typing import T_State, Union from nonebot.log import logger from typing import Dict, Any async def recall_checker(bot: Bot, event: Event, state: T_State) -> bool: return isinstance(event, GroupRecallNoticeEvent) or isinstance( event, FriendRecallNoticeEvent) anti_recall = on_notice(rule=Rule(recall_checker), priority=10) @anti_recall.handle() async def handle_anti_recall(bot: Bot, event: Union[GroupRecallNoticeEvent, FriendRecallNoticeEvent], state: T_State): message_detail = await bot.get_msg(message_id=event.message_id) user_info = await get_user_info(message_detail, bot) user_text = ' '.join(user_info + ['撤回了:\n']) user_segment = {"type": "text", 'data': {'text': user_text}} message_segment = message_detail['message'] logger.info(f'recall message detail: {message_segment}') for superuser in bot.config.superusers:
import os import json import base64 import httpx from PIL import Image from io import BytesIO from nonebot import on_message, on_notice from nonebot.adapters.cqhttp.message import MessageSegment from nonebot.adapters.cqhttp import Bot, utils, MessageEvent, NoticeEvent proxies = {"all://": "http://127.0.0.1:7890"} pictureMessage = on_message(priority=2, block=True) pictureNotice = on_notice(priority=3, block=True) inputPath = os.path.dirname(__file__) + '/resource/original.png' resolutionPath = os.path.dirname(__file__) + '/resource' outputPath = resolutionPath + '/original_out.png' imagePath = 'file:///' + outputPath realersganPath = os.path.dirname( __file__) + '/realesrgan/inference_realesrgan.py' modelPath = os.path.dirname( __file__ ) + '/realesrgan/experiments/pretrained_models/RealESRGAN_x4plus_anime_6B.pth' exception = '图片过大,御坂网络无法传输。\n御坂如此遗憾地说道。' def writePicture(dir, data): file = open(dir, 'wb') file.write(data) file.close
from nonebot import on_notice from nonebot.adapters.cqhttp.bot import Bot from nonebot.adapters.cqhttp.event import GroupBanNoticeEvent ban_req = on_notice() @ban_req.handle() async def group_ban(bot: Bot, event: GroupBanNoticeEvent): ''' 群禁言 ''' if (event.sub_type) == "ban": pass if (event.sub_type) == "lift_ban": pass
from pathlib import Path from nonebot import on_notice from nonebot.rule import Rule from nonebot.adapters.onebot.v11 import MessageSegment, Bot, GroupIncreaseNoticeEvent dir_path = Path(__file__).parent welcome_path = dir_path / "resources" / "welcome.jpg" async def welcome_rule(bot: Bot, event: GroupIncreaseNoticeEvent) -> bool: return event.user_id != bot.self_id welcome = on_notice(rule=Rule(welcome_rule), priority=10) @welcome.handle() async def _(): await welcome.finish(MessageSegment.image(welcome_path.read_bytes()))
检测群内上传文件并自动锤轴 **AuthNode** basic **Usage** 配置AuthNode启用''' # 声明本插件可配置的权限节点 __plugin_auth_node__ = ['basic'] # Init plugin export init_export(export(), __plugin_name__, __plugin_usage__, __plugin_auth_node__) zhouShenHime = on_notice(rule=has_auth_node(__plugin_raw_name__, 'basic'), priority=100, block=False) @zhouShenHime.handle() async def hime_handle(bot: Bot, event: GroupUploadNoticeEvent, state: T_State): file_name = event.file.name file_url = event.file.dict().get('url') user_id = event.user_id # 不响应自己上传的文件 if int(event.user_id) == int(bot.self_id): await zhouShenHime.finish() if file_name.split('.')[-1] not in ['ass', 'ASS']: await zhouShenHime.finish()
save(universal_id, 'current_combo', (combo + 1) * (not can_mutate)) return mutate_msg(final, mutate=can_mutate) praise = on_command(cmd='praise', aliases={'膜'}, rule=check('exclaim')) admire = on_command(cmd='admire', aliases={'狂膜'}, rule=check('exclaim')) cheer = on_command(cmd='cheer', aliases={'加油 '}, rule=check('exclaim')) cheer_ending = on_endswith(msg='加油', priority=10, rule=check('exclaim')) greet = on_simple_command(cmd='greet', aliases={'小鱼'}, rule=check('exclaim')) poke_greet = on_notice(priority=10, block=True, rule=check('exclaim', PokeNotifyEvent)) repeater = on_endswith(msg='', priority=11, block=True, rule=check('exclaim')) @praise.handle() async def show_praise(bot: Bot, event: Event, state: dict): """Praise the person.""" person = str(event.message).strip() await bot.send(event=event, message=exclaim_msg(person, '1', True)) @admire.handle() async def show_admire(bot: Bot, event: Event, state: dict): """Admire(Praise * 2) the person."""
from nonebot import on_notice from nonebot.adapters.cqhttp import Bot, Event, unescape from Pbot.utils import getSetuHigh from datetime import datetime import Pbot.cq as cq poke = on_notice() helloNew = on_notice() @poke.handle() async def firsthandle(bot: Bot, event: Event, state: dict): if event.sub_type == "poke" and event.raw_event["target_id"] == 3418961367: r18 = False if event.group_id == 145029700: hour = datetime.today().hour r18 = hour <= 7 or hour >= 22 if event.group_id == 1037557679: r18 = True x, err = await getSetuHigh(bot, r18) if x == None: await poke.finish(err) try: await poke.send(unescape(x)) except: await poke.send("呀,发送失败辣,。,") @helloNew.handle() async def firsthandle(bot: Bot, event: Event, state: dict): if event.detail_type == "group_increase":
from nonebot import on_notice, on_message from nonebot.adapters.cqhttp import GroupRecallNoticeEvent, Bot, Message, FriendRecallNoticeEvent, PokeNotifyEvent, \ MessageEvent from nonebot.rule import to_me from random import choice poke = on_notice(rule=to_me()) recall = on_notice() flashimg = on_message() # 群聊 @recall.handle() async def _(bot: Bot, event: GroupRecallNoticeEvent): mid = event.message_id meg = await bot.get_msg(message_id=mid) if event.user_id != event.self_id and 'type=flash,' not in meg['message']: re = '刚刚说了:' + meg['message'] + '\n不要以为派蒙没看见!' await recall.finish(message=Message(re), at_sender=True) # 私聊 @recall.handle() async def _(bot: Bot, event: FriendRecallNoticeEvent): mid = event.message_id meg = await bot.get_msg(message_id=mid) if event.user_id != event.self_id and 'type=flash,' not in meg['message']: re = '刚刚说了:' + meg['message'] + '\n不要以为派蒙没看见!' await recall.finish(message=Message(re))
from nonebot import on_notice from nonebot.adapters.cqhttp.bot import Bot from nonebot.adapters.cqhttp.event import Event, PokeNotifyEvent from nonebot.adapters.cqhttp.message import Message import random poke = on_notice() a = [ '那...那里...那里不能戳...绝对...', '嘤嘤嘤,好疼', '你再戳,我就把你的作案工具没收了,哼哼~', '别戳了别戳了,戳怀孕了', '戳🔨戳', '我错了我错了,别戳了', '桥豆麻袋,别戳老子', '再戳砍手', '手感怎么样', '戳够了吗?该学习了', '戳什么戳,没戳过吗', '你用左手戳的还是右手戳的?' ] @poke.handle() async def _(bot: Bot, event: Event): if isinstance(event, PokeNotifyEvent): if event.is_tome() and event.user_id != event.self_id: await bot.send(event=event, message=a[random.randint(0, len(a) - 1)]) else: await poke.finish()
# endregion # region 机器人是否为管理员 _bot_role: dict[int, str] = {} async def refresh_bot_role(bot: Bot) -> None: """更新机器人在群内的身份""" group_list = await bot.get_group_list() for group in group_list: member_info = await bot.get_group_member_info( group_id=group["group_id"], user_id=int(bot.self_id)) _bot_role[group["group_id"]] = member_info["role"] admin_notice = on_notice() @admin_notice.handle() async def admin_handle(bot: Bot, event: GroupAdminNoticeEvent): """群内管理员发生变化时,更新机器人在群内的身份""" if bot.self_id == str(event.self_id): if event.sub_type == "set": _bot_role[event.group_id] = "admin" elif event.sub_type == "unset": _bot_role[event.group_id] = "member" # endregion
from nonebot import on_notice from nonebot.typing import T_State from nonebot.adapters.cqhttp import Bot, Message, GroupDecreaseNoticeEvent, GroupIncreaseNoticeEvent wel = on_notice() @wel.handle() async def _(bot: Bot, event: GroupIncreaseNoticeEvent, state: T_State): user = event.get_user_id() at_ = "[CQ:at,qq={}]".format(user) msg = at_ + '欢迎新进群的小伙伴,\来了就别走了哦' msg = Message(msg) await wel.finish(message=msg) @wel.handle() async def _(bot: Bot, event: GroupDecreaseNoticeEvent, state: T_State): user = event.get_user_id() at_ = "[CQ:at,qq={}]".format(user) msg = at_ + "\n" + '有一位朋友离我们而去了' msg = Message(msg) await wel.finish(message=msg)
from nonebot import on_notice from nonebot.adapters.cqhttp import Bot, GroupDecreaseNoticeEvent from nonebot.typing import T_State from ..database import DB group_decrease = on_notice(priority=5) @group_decrease.handle() async def _(bot: Bot, event: GroupDecreaseNoticeEvent, state: T_State): """退群时,自动删除该群订阅列表""" if event.self_id == event.user_id: async with DB() as db: await db.delete_sub_list('group', event.group_id)
import random from nonebot import on_notice from nonebot.adapters.cqhttp import Bot, Event, GroupDecreaseNoticeEvent, GroupIncreaseNoticeEvent, \ FriendAddNoticeEvent, PokeNotifyEvent, LuckyKingNotifyEvent, HonorNotifyEvent, Message from nonebot.rule import to_me from nonebot.typing import T_State from .data_source import get_nickname LuckyKing = on_notice() """群红包运气王提醒事件""" @LuckyKing.handle() async def handle_first_receive(bot: Bot, event: LuckyKingNotifyEvent, state: T_State): rely = f'[CQ:at,qq={event.target_id}]是运气王!\n\t来自{event.user_id}的红包' await bot.send(event=event, message=rely) poke = on_notice(rule=to_me()) """戳一戳提醒事件""" @poke.handle() async def handle_first_receive(bot: Bot, event: PokeNotifyEvent, state: T_State): expr_poke = [ f'[CQ:poke,qq={event.get_user_id()}]', '那里不可以!(>﹏<)', '再戳就要坏了!', '我在!',
from nonebot import on_notice, on_message from nonebot.adapters.cqhttp import GroupRecallNoticeEvent, Bot, Message, FriendRecallNoticeEvent, PokeNotifyEvent, \ MessageEvent from nonebot.rule import to_me from random import choice poke = on_notice(rule=to_me()) # recall = on_notice() # flashimg = on_message() # # 群聊 # @recall.handle() # async def _(bot: Bot, event: GroupRecallNoticeEvent): # mid = event.message_id # meg = await bot.get_msg(message_id=mid) # if event.user_id != event.self_id and 'type=flash,' not in meg['message']: # re = '刚刚说了:' + meg['message'] + '\n不要以为派蒙没看见!' # await recall.finish(message=Message(re), at_sender=True) # 私聊 # @recall.handle() # async def _(bot: Bot, event: FriendRecallNoticeEvent): # # mid = event.message_id # meg = await bot.get_msg(message_id=mid) # if event.user_id != event.self_id and 'type=flash,' not in meg['message']: # re = '刚刚说了:' + meg['message'] + '\n不要以为派蒙没看见!' # await recall.finish(message=Message(re)) @poke.handle()
from nonebot import on_request from nonebot import on_notice from nonebot.adapters.cqhttp.bot import Bot from nonebot.adapters.cqhttp.event import FriendRequestEvent, FriendAddNoticeEvent add = on_request() @add.handle() async def add_(bot: Bot, event: FriendRequestEvent): await event.approve(bot) msgadd = on_notice() @msgadd.handle() async def sendmsg_(bot: Bot, event: FriendAddNoticeEvent): await bot.send( event=event, message='请输入help,然后和我一起玩叭', )
for user_id in members: # generate locally stored information members[user_id].setdefault('42score', 0) members[user_id].setdefault('42score_daily', 0) # save the updated information to the database save(universal_id, 'members', members) user_validator = on_request(priority=10, block=True, rule=check('group', GroupRequestEvent) & check('info', GroupRequestEvent)) say_hello = on_notice(priority=10, block=True, rule=check('group', GroupIncreaseNoticeEvent)) say_goodbye = on_notice(priority=10, block=True, rule=check('group', GroupDecreaseNoticeEvent)) black_room = on_command(cmd='blackroom ', aliases={'进入小黑屋 '}, rule=check('group')) user_updater = on_simple_command(cmd='updateuser', aliases={'更新群成员'}, rule=check('group') & check('supercmd'))
from nonebot.rule import to_me from nonebot.typing import T_State from nonebot.adapters import Bot, Event from nonebot.adapters.cqhttp import Message,MessageSegment,GroupIncreaseNoticeEvent from .data_source import get_words,IsAdded,IsDel # 默认配置 global_config = nonebot.get_driver().config plugin_config = Config(**global_config.dict()) # 响应命令 BDwords = on_command("BDwords", aliases=set(['*/爆点语录','*/BD语录','*/bd语录']), priority=2) Addwords = on_regex("\*/add\n([\s\S]*)\n\*/end") Delwords = on_command("*/del",priority=2) welcom = on_notice() @BDwords.handle() async def handle_first_receive(bot: Bot, event: Event, state: T_State): words = await get_words() await BDwords.finish(Message(words)) @Addwords.handle() async def handle_first_receive(bot: Bot,event: Event, state: T_State): words = re.findall("\*/add\n([\s\S]*)\n\*/end",str(event.get_message())) if IsAdded(words): await Addwords.finish(Message("语录追加成功,爆点世界重构中……")) else: await Addwords.finish(Message("追加失败了,吖屎啦!"))
FriendAddNoticeEvent, GroupRequestEvent) welcome_msg = "ムラサメです!请到 purple4pur.com/murasame-chan 查看小丛雨的使用帮助哦!" # 加好友请求 friend_request = on_request() @friend_request.handle() async def handle_friend_request(bot: Bot, event: FriendRequestEvent): await event.approve(bot) # 新好友通知 friend_add = on_notice() @friend_add.handle() async def handle_friend_add(bot: Bot, event: FriendAddNoticeEvent): user_id = event.user_id await bot.send_private_msg(user_id=user_id, message=welcome_msg) await bot.send_private_msg(user_id=593457446, message=f"已添加新好友:{user_id}") # 加群邀请 group_request = on_notice() @group_request.handle() async def handle_group_request(bot: Bot, event: GroupRequestEvent):