async def set_rate(bot: Bot, event: GroupMessageEvent): try: rate = float(event.get_plaintext().strip()) if rate > 1 or rate < 0: await bot.send(event, '概率要在0~1之间', at_sender=event.is_tome()) return YYGQ_RATE = rate await sv.set_config('YYGQ_RATE', YYGQ_RATE, target=event.group_id) await bot.send(event, f'当前回复概率为{YYGQ_RATE}') except Exception as e: await bot.send(event, str(e))
async def parse(bot: Bot, event: GroupMessageEvent, state: T_State): args = str(event.get_message()).strip().split() if not args: await search_image.reject('你似乎没有发送有效的消息呢QAQ, 请重新发送:') state[state["_current_key"]] = args[0] if state[state["_current_key"]] == '取消': await search_image.finish('操作已取消')
async def parse(bot: Bot, event: GroupMessageEvent, state: T_State): args = str(event.get_plaintext()).strip().lower().split() if not args: await luck.reject('你似乎没有发送有效的参数呢QAQ, 请重新发送:') state[state["_current_key"]] = args[0] if state[state["_current_key"]] == '取消': await luck.finish('操作已取消')
async def handle_first_receive(bot: Bot, event: GroupMessageEvent, state: T_State): args = set(str(event.get_plaintext()).strip().split()) # 排除r18 for tag in args.copy(): if tag in ['r18', 'R18', 'r-18', 'R-18']: args.remove(tag) state['tags'] = args
async def handle_first_receive(bot: Bot, event: GroupMessageEvent, state: T_State): args = str(event.get_plaintext()).strip().lower().split() if not args: pass elif args and len(args) == 1: state['draw'] = args[0] else: await luck.finish('参数错误QAQ')
async def miya_button(bot: Bot, event: GroupMessageEvent, state: T_State): arg = str(event.get_plaintext()).strip().lower() voice = re.sub('喵一个', '', arg) voice_file = MiyaVoice().get_voice_filepath(voice=voice) if not os.path.exists(voice_file): await bot.send(event=event, message='喵?') else: msg = MessageSegment.record(file=f'file:///{voice_file}') await bot.send(event=event, message=msg)
async def handle_first_receive(bot: Bot, event: GroupMessageEvent, state: T_State): args = str(event.get_plaintext()).strip().lower().split() if args and len(args) == 1: state['sub_command'] = args[0] elif args and len(args) == 2: state['sub_command'] = args[0] state['sub_arg'] = args[1] else: await nhentai.finish('参数错误QAQ')
async def handle_first_receive(bot: Bot, event: GroupMessageEvent, state: T_State): args = str(event.get_plaintext()).strip().lower().split() if not args: state['skill'] = None elif args and len(args) == 1: state['skill'] = args[0] else: await set_vocation.finish('参数错误QAQ')
async def handle_first_receive(bot: Bot, event: GroupMessageEvent, state: T_State): args = str(event.get_plaintext()).strip().lower().split() if args and len(args) == 1: state['sub_command'] = args[0] state['sub_arg'] = None elif args and len(args) == 2: state['sub_command'] = args[0] state['sub_arg'] = args[1] else: await omega.finish('你好呀~ 我是Omega Miya~ 请问您今天要来点喵娘吗?')
async def special_title(bot: Bot, event: GroupMessageEvent, state: T_State): ''' 群头衔 ''' title = str(event.get_message()) user_id = event.user_id group_id = event.group_id await bot.set_group_special_title(group_id=group_id, user_id=user_id, special_title=title, self_id=bot.self_id)
async def kakin(bot, event: GroupMessageEvent): if event.user_id not in bot.config.SUPERUSERS: return count = 0 for m in event.get_message(): if m.type == 'at' and m.data['qq'] != 'all': uid = int(m.data['qq']) jewel_limit.reset(uid) tenjo_limit.reset(uid) count += 1 if count: await bot.send(event, f"已为{count}位用户充值完毕!谢谢惠顾~")
async def ban_word(bot: Bot, event: GroupMessageEvent): """ban掉骂bot的人""" user_id = event.get_user_id() msg_from = str(user_id) msg_from += f'@[群:{event.group_id}]' logger.critical( f'Self: {event.self_id}, Message {event.message_id} from {msg_from}: {event.message}' ) set_block_user(user_id, timedelta(hours=8)) pic = R.img(f"chieri{random.randint(1, 4)}.jpg").cqcode await bot.send(event, "不理你啦!バーカー\n" + pic, at_sender=True) await util.silence(event, 8 * 60 * 60)
async def handle_first_receive(bot: Bot, event: GroupMessageEvent, state: T_State): # 载入牌堆 state['deck'] = deck_list.keys() args = str(event.get_plaintext()).strip().lower().split() if not args: msg = '当前可用卡组有:' for item in state['deck']: msg += f'\n【{item}】' await deck.send(msg) elif args and len(args) == 1: state['draw'] = args[0] else: await deck.finish('参数错误QAQ')
async def handle_first_receive(bot: Bot, event: GroupMessageEvent, state: T_State): args = str(event.get_plaintext()).strip().lower().split() if not args: pass elif args and len(args) == 1: state['sub_command'] = args[0] elif args and len(args) == 2: state['sub_command'] = args[0] state['skill_name'] = args[1] elif args and len(args) == 3: state['sub_command'] = args[0] state['skill_name'] = args[1] state['skill_description'] = args[2] else: await skill_admin.finish('参数错误QAQ')
async def handle_first_receive(bot: Bot, event: GroupMessageEvent, state: T_State): args = str(event.get_plaintext()).strip().split() if args: await admin_mail_bind.finish('该命令不支持参数QAQ') # 发送已有邮箱列表 mailbox_list_res = DBEmailBox.list() mailbox_list = mailbox_list_res.result if not mailbox_list_res.success() or not mailbox_list: await admin_mail_bind.finish('无可绑定邮箱, 请先添加邮箱!') state['mailbox_list'] = mailbox_list mailbox_msg = '】\n【'.join(mailbox_list) msg = f'当前可绑定邮箱:\n【{mailbox_msg}】' await admin_mail_bind.send(msg)
async def handle_first_receive(bot: Bot, event: GroupMessageEvent, state: T_State): args = str(event.get_plaintext()).strip().split() if args: await mail_receive.finish('该命令不支持参数QAQ') group_id = event.group_id group = DBGroup(group_id=group_id) res = group.mailbox_clear() if res.success(): logger.info(f'Group:{event.group_id}/User:{event.user_id} 清空绑定邮箱成功') await admin_mail_bind.finish('Success! 已清空本群组的绑定邮箱') else: logger.info( f'Group:{event.group_id}/User:{event.user_id} 清空绑定邮箱失败, error: {res.info}' ) await admin_mail_bind.finish('清空本群组的绑定邮箱失败QAQ, 请检联系管理员处理')
async def handle_first_receive(bot: Bot, event: GroupMessageEvent, state: T_State): args = str(event.get_plaintext()).strip().lower().split() if not args: pass else: await almanac.finish('参数错误QAQ') user_id = event.user_id # 求签者昵称, 优先使用群昵称 draw_user = event.sender.card if not draw_user: draw_user = event.sender.nickname draw_result = old_almanac(user_id=user_id) # 向用户发送结果 today = datetime.date.today().strftime('%Y年%m月%d日') msg = f"今天是{today}\n{draw_user}今日:\n{'='*12}\n{draw_result}" await almanac.finish(msg)
async def handle_first_receive(bot: Bot, event: GroupMessageEvent, state: T_State): # 获取设置了名称的插件列表 plugins = list( filter( lambda p: set(p.export.keys()).issuperset({'custom_name', 'usage'} ), get_loaded_plugins())) if not plugins: await bot_help.finish('暂时没有可用的插件QAQ') state['plugin_list'] = plugins # 首次发送命令时跟随的参数,例:/天气 上海,则args为上海 args = str(event.get_plaintext()).strip().lower().split() if args: # 如果用户发送了参数则直接赋值 state['plugin_name'] = args[0] else: # 如果用户没有发送参数, 则发送功能列表并结束此命令 plugins_list = '\n'.join(p.export.custom_name for p in plugins) await bot_help.finish( f'我现在支持的插件有: \n\n{plugins_list}\n\n注意: 群组权限等级未达到要求的命令不会被响应\n输入"/help [插件]"即可查看插件详情及帮助' )
async def random_repeater(bot: Bot, event: GroupMessageEvent): group_id = event.group_id msg = str(event.get_message()) if group_id not in group_stat: group_stat[group_id] = (msg, False, 0) return last_msg, is_repeated, p = group_stat[group_id] if last_msg == msg: # 群友正在复读 if not is_repeated: # 机器人尚未复读过,开始测试复读 if random.random() < p: # 概率测试通过,复读并设flag try: group_stat[group_id] = (msg, True, 0) await bot.send(event, msg) except Exception as e: logger.error(f'复读失败: {type(e)}') else: # 概率测试失败,蓄力 p = 1 - (1 - p) / PROB_A group_stat[group_id] = (msg, False, p) else: # 不是复读,重置 group_stat[group_id] = (msg, False, 0)
async def handle_first_receive(bot: Bot, event: GroupMessageEvent, state: T_State): args = str(event.get_plaintext()).strip().lower().split() if args: await search_image.finish('该命令不支持参数QAQ')
async def handle_first_receive(bot: Bot, event: GroupMessageEvent, state: T_State): args = str(event.get_plaintext()).strip().split() if args: await mail_receive.finish('该命令不支持参数QAQ') group_id = event.group_id group = DBGroup(group_id=group_id) group_bind_mailbox = group.mailbox_list() if not group_bind_mailbox.success() or not group_bind_mailbox.result: logger.info(f'{group_id} 收邮件失败: 没有绑定的邮箱') await mail_receive.finish('本群组没有绑定的邮箱, 请先绑定邮箱后再收件!') mail_box_list_msg = '\n'.join([x for x in group_bind_mailbox.result]) await mail_receive.send( f'本群组已绑定邮箱:\n{mail_box_list_msg}\n\n正在连接到邮箱服务器, 请稍后...') for mailbox_address in group_bind_mailbox.result: mailbox = DBEmailBox(address=mailbox_address).get_info() if not mailbox.success(): logger.error( f'邮箱 {mailbox_address} 信息获取失败, 请检查数据库, error: {mailbox.info}') await mail_receive.send(f'邮箱: {mailbox_address} 收件失败QAQ, 请联系管理员处理') continue host = mailbox.result.get('server_host') password = mailbox.result.get('password') # 解密密码 password = decrypt_password(ciphertext=password) if not password.success(): logger.error(f'邮箱 {mailbox_address} 密码验证失败') await mail_receive.send( f'邮箱: {mailbox_address}\n密码验证失败QAQ, 请联系管理员处理') continue password = password.result unseen_mail_res = await get_unseen_mail_info(address=mailbox_address, server_host=host, password=password) if not unseen_mail_res.success(): logger.error( f'邮箱 {mailbox_address} 收件失败, error: {unseen_mail_res.info}') await mail_receive.send(f'邮箱: {mailbox_address}\n收件失败QAQ, 请稍后再试') continue elif not unseen_mail_res.result: logger.info(f'邮箱 {mailbox_address} 收件完成, 没有新的邮件') await mail_receive.send(f'邮箱: {mailbox_address}\n收件完成, 没有新的邮件~') continue else: for mail in unseen_mail_res.result: html = mail.html content = re.sub(r'<[^>]*>', '', html) content = re.sub(r'\s', '', content) content = content.replace(' ', '').replace('\n', '').replace(' ', '') msg = f"【{mail.header}】\n时间: {mail.date}\n发件人: {mail.sender}\n{'='*16}\n{content}" await mail_receive.send(msg) logger.info( f'邮箱 {mailbox_address} 收件完成, 共{len(unseen_mail_res.result)}封新的邮件' ) await mail_receive.send( f'邮箱: {mailbox_address}\n收件完成, 共{len(unseen_mail_res.result)}封新的邮件~' )
async def sleep(bot: Bot, event: GroupMessageEvent): base = 0 if '午' in event.get_plaintext() else 5 * 60 * 60 length = len(event.get_plaintext()) sleep_time = base + round( math.sqrt(length) * 60 * 30 + 60 * random.randint(-15, 15)) await util.silence(event, sleep_time, skip_su=False)