async def args(bot: Bot, event: Event, state: dict): parser = ArgumentParser() subparser = parser.add_mutually_exclusive_group() subparser.add_argument("-s", "--subs", nargs="+", help="订阅指定的 rss 源") subparser.add_argument("-r", "--route", nargs="+", help="获取自定路由的 rss 源的资讯") subparser.add_argument("-d", "--delete", nargs="+", help="删除 rss 订阅") subparser.add_argument("-l", "--list", action="store_true", default=False, help="列出已订阅的源") subparser.add_argument("-a", "--add", help="开通rss源") parser.add_argument("rss", nargs="*", help="获取已存在的 rss 源资讯") argv = parser.parse_args(event.plain_text.strip().split(" ")) state["ls"] = [] ls = [] state["list"] = argv.list if argv.list: return if argv.subs != None: state["subs"] = argv.subs ls = argv.subs if argv.delete != None: state["del"] = argv.delete ls = argv.delete if argv.rss != []: state["rss"] = argv.rss ls = argv.rss if argv.route != None: state["route"] = argv.route state["ls"] = argv.route if len(state["ls"]) == 0: await rss.finish("查询路由地址不能为空哦!") return if argv.add != None: await rss.finish("目前不支持哦!!!") await rss.send(str(event.user_id)) # result = await add_rss(argv.add.strip(), str(event.user_id)) ls = list(set(ls)) if event.detail_type == "group": safe = await Mg.query.where(Mg.gid == event.group_id).gino.all() print(len(safe)) if len(safe) > 0 and safe[0].safe: ls = [i for i in ls if "r18" not in i] for key in doc: if key in ls[:]: state["ls"].append((gtfun(key), key)) ls.remove(key) if len(ls) > 0 and " ".join(ls).strip() != "": await rss.send( unescape("没有添加「{}」的订阅源!请联系".format(" ".join(ls)) + cq.at(545870222) + "添加订阅!")) if len(state["ls"]) == 0: await rss.finish( "本次资讯{}为空哦!".format("查看" if state["rss"] != [] else "订阅"))
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}")
async def handle(bot: Bot, event: MessageEvent, state: T_State): raw_args = str(event.get_message()).strip() argc = 0 if raw_args: arg_list = raw_args.split() argc = len(arg_list) for i in range(argc): state[f"arg{i+1}"] = arg_list[i] if argc > 0 and state["arg1"] == "日榜": is_timeout, is_error, status, data = await get_image_data_v1( url="https://rakuen.thec.me/PixivRss/daily-10") elif argc > 0 and state["arg1"] == "周榜": is_timeout, is_error, status, data = await get_image_data_v1( url="http://rakuen.thec.me/PixivRss/weekly-10") elif argc > 0 and state["arg1"] == "月榜": is_timeout, is_error, status, data = await get_image_data_v1( url="https://rakuen.thec.me/PixivRss/monthly-10") elif argc > 0: keyword = unescape(state["arg1"]) await pixiv.send(f"正在搜索[{keyword}]……") is_timeout, is_error, status, data = await get_image_data_v2( tag=keyword) else: is_timeout, is_error, status, data = await get_image_data_v2() uid = event.user_id session_id = event.get_session_id().split("_") # 消息来自群聊 if len(session_id) == 3: at = MessageSegment.at(uid) + "\n" else: at = "" if is_timeout: await pixiv.finish(at + "苦しい……请求超时了(´。_。`)") if status != 200 and status != 0: await pixiv.finish(at + f"苦しい……连接出错了({status}),可以马上重试一下呢!") if is_error: await pixiv.finish(at + "苦しい……连接出错了(´。_。`)") elif len(data) == 0: await pixiv.finish(at + "寂しい……什么都没找到呢。试试范围更大的关键词哦!") else: chosen = choice(data) try: await pixiv.send(at + f"{chosen[0]}\nPixiv 链接:{chosen[1]}\n" + MessageSegment.image(chosen[2]) + "可能会发不出图片呜呜,复制下面链接到浏览器查看吧") except ActionFailed as e: await pixiv.send( at + f"{chosen[0]}\nPixiv 链接:{chosen[1]}\n大概是太涩了差点发不出来,复制下面链接到浏览器查看吧" ) print(f"[pixiv.py]: {e}") finally: await pixiv.finish(await async_shorten_url(chosen[2]))
async def say_unescape(bot: Bot, event: MessageEvent): # def _unescape(msg: Message, segment: MessageSegment): # if segment.is_text(): # return msg.append(unescape(str(segment))) # return msg.append(segment) # message = reduce(_unescape, event.get_message(), Message()) # type: ignore # await bot.send(message=message, event=event) await bot.send(message=Message(unescape(str(event.get_message()))), event=event)
async def tempReportEvent(at_: str, stu_num: str, matcher: Matcher): logger.debug(f'{stu_num} 开始签到') # 有没有签到 oss = AliyunOSS() if not oss.snp_exist(stu_num): # API POST JSON try: json = await get_json(stu_num) code = json['code'] except JSONDecodeError: logger.error(NULL_PROMPT) if SEND_LOG: matcher.send(Message(NULL_PROMPT)) raise JSONDecodeError logger.debug(f'已获得json: {json}') info = osh_status_code[int(code)] logger.debug(f'{info}') # CODE if code == CODE_SUCCESS: msg = Message(at_ + SUCCESS_PROMPT) await matcher.send(msg) elif code == CODE_FAILED: msg = Message(at_ + FAILED_PROMPT) await matcher.send(msg) return elif code == CODE_PERMISSION_ERROR: msg = Message(at_ + PERMISSION_ERROR_PROMPT) await matcher.send(msg) return logger.debug('oss上已存在信息') # 从OSS下载文件 resp = await oss.download_snp(stu_num) if not resp: msg = Message(at_ + DOWNLOAD_FAILED_PROMPT) await matcher.send(msg) return logger.debug('截图下载成功') txt_path = SERVER_DIR_SCREENSHOT + f"/{stu_num}.txt" img_path = await conv_file(txt_path) logger.debug('截图转换成功,准备发送!') # reply = Message("[CQ:at,qq={}] [CQ:image,file={}]".format(user_id, img_path)) # await macher.send(Message(unescape("[CQ:image,file=20181620310156.png]"))) # logger.debug('image_path: {}'.format(img_path)) reply = Message(unescape("[CQ:image,file={}]".format(img_path))) await matcher.send(reply)
async def pre(bot: Bot, event: Event, state: dict): safe = await cksafe(event.group_id) if event.group_id in [145029700, 1003259896, 1037557679]: safe = False x, err = await getSetuHigh(bot, not safe) if x == None: await stCome.finish(err) try: await stCome.send(unescape(x)) except: await stCome.send("呀,发送失败辣,。,")
async def _(bot: Bot, event: Event, state: dict): if "pic" in state: res = await sauce(bot, state["pic"]) logger.debug(unescape(res)) await st.send(unescape(res)) fd = re.search("[0-9]+\.[0-9]*%", res) per = float(res[fd.start():fd.end() - 1]) ther = 70 if per < ther: await st.send("相似度低于 {}% 正在使用 ascii2d 搜索!".format(ther)) res = await ascii2d(bot, state["pic"]) await st.finish(res) else: state["SanityLevel"] = 4 res, _id = await searchPic(bot, state["keyword"], state["SanityLevel"]) await st.send( (cq.reply(event.id) if event.detail_type != "private" else "") + res) state["id"] = _id if _id == -1: await st.finish("暂时没有搜索到关于 {} 的结果哦~~".format(state["keyword"]))
async def pre(bot: Bot, event: Event, state: dict): if event.detail_type == "group": safe = await cksafe(event.group_id) else: safe = False x, err = await getSetuHigh(bot, not safe) if x == None: await stCome.finish(err) try: await stCome.send(unescape(x)) except: await stCome.send("呀,发送失败辣,。,")
async def firsthandle(bot: Bot, event: Event, state: dict): today = datetime.date.today() ans = -1 random.seed(datetime.datetime.now()) value = await Jrrp.query.where(Jrrp.qid == event.user_id).gino.first() if value == None: value = await Jrrp.create(qid=event.user_id) ans = value.rand if value.dt != today: ans = random.randint(0, 100) await value.update(dt=today, rand=ans).apply() await jrrp.finish( unescape(cq.at(event.user_id) + "今天的人品为:{} 哦!".format(ans)))
async def pre(bot: Bot, event: Event, state: dict): 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 stCome.finish(err) try: await stCome.send(unescape(x)) except: await stCome.send("呀,发送失败辣,。,")
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("呀,发送失败辣,。,")
async def handle_fake_msg(bot: Bot, event: Event, state: dict): # if event.message_type!='group': # await fake.send('仅在群聊中有效!') # return msg_info = state["fake"] try: msg = await fake_forward(message=unescape(msg_info), group_id=event.group_id, bot=bot, user_id=event.user_id, bot_nofake_id=config.superusers) await bot.call_api('send_group_forward_msg', group_id=event.group_id, messages=msg) # await fake.send('切勿用作违法!') except Exception as e: await fake.send('参数有误!E: {}'.format(e)) logger.error('参数有误!E: {}'.format(e))
async def handle_group_recall(bot: Bot, event: GroupRecallNoticeEvent): msg_id = event.message_id operator_id = event.operator_id sender_id = event.user_id group_id = event.group_id # 仅供测试 if not group_id in test_group_list: return msg = await bot.get_msg(message_id=msg_id) msg = unescape(msg["raw_message"]) if operator_id == sender_id: # 撤回了自己的消息 await bot.send_group_msg(group_id=group_id, message=f"({operator_id}) 撤回了:\n{msg}") elif sender_id == 2497540344: # 小丛雨自己的消息被撤回 await bot.send_group_msg(group_id=group_id, message=f"({operator_id}) 撤回了小丛雨的消息:\n{msg}") else: await bot.send_group_msg(group_id=group_id, message=f"({operator_id}) 撤回了 ({sender_id}) 的消息:\n{msg}")
async def _(bot: Bot, event: Event, state: T_State): args = state["args"] args.user_id = event.user_id if isinstance(event, PrivateMessageEvent) else None args.group_id = event.group_id if isinstance(event, GroupMessageEvent) else None args.is_admin = (event.sender.role in ["admin", "owner"] if isinstance( event, GroupMessageEvent) else False) if hasattr(args, "message"): args.message = unescape(args.message) if hasattr(args, "handle"): args = args.handle(args) if args.message: await bot.send_msg( user_id=args.user_id, group_id=args.group_id, message=Message(args.message), )
async def firsthandle(bot: Bot, event: Event, state: dict): if event.sub_type == "poke" and event.raw_event["target_id"] in [ 3418961367, 2145919330, 2167073315, 3428325075, ]: r18 = not await cksafe(event.group_id) if event.group_id in [145029700, 1003259896]: 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("呀,发送失败辣,。,")
async def _(bot: Bot, event: Event, state: dict): if "pic" in state: pic, res = await sauce(bot, state["pic"]) try: await st.send(unescape(pic + "\n" + res)) except: await st.send("发送失败了。。。尝试不带缩略图的发送!") try: await st.send(res) except: await st.send("不带缩略图的也发送失败了。。。尝试使用ascii2d搜索!") res = await ascii2d(bot, state["pic"]) try: await st.send(res) except: await st.finish("ascii2d 发送也失败了。。。尝试私聊搜图可能可行!") await st.finish() fd = re.search("[0-9]+\.[0-9]*%", res) per = float(res[fd.start():fd.end() - 1]) ther = 70 if per < ther: await st.send("相似度低于 {}% 正在使用 ascii2d 搜索!".format(ther)) res = await ascii2d(bot, state["pic"]) await st.finish(res) else: if event.group_id: safe = await cksafe(event.group_id) else: safe = False res, _id = await getSetuHigh(bot, not safe, state["keyword"]) if res == None: res, _id = await searchPic( bot, state["keyword"], ) if _id == -1: await st.finish("暂时没有搜索到关于 {} 的结果哦~~".format(state["keyword"])) await st.send( (cq.reply(event.id) if event.detail_type != "private" else "") + res)
async def firsthandle(bot: Bot, event: Event, state: dict): await say.finish(unescape(str(event.message))) pass
async def firsthandle(bot: Bot, event: Event, state: dict): await act.finish(unescape(cq.image("activity.jpg")))
async def firsthandle(bot: Bot, event: Event, state: dict): if event.detail_type == "group_increase": await helloNew.send(unescape(cq.at(event.user_id) + " 欢迎新人入群👏!")) await bot.send_private_msg(user_id=545870222, message=f"新入群 {event.group_id}")
async def firstHandle(bot: Bot, event: Event, state: dict): if "subs" in state: for _, item in state["ls"]: await Sub.create(qid=event.user_id, dt="No Information", rss=item) await rss.send(f"「{doc[item]}」的资讯已添加订阅了!有新资讯发布时,会私信你哦!") # except asyncpg.exceptions.ForeignKeyViolationError: # await session.send(f"貌似系统并没有支持该订阅源的订阅!") # logger.error("no", exc_info=True) # except asyncpg.exceptions.UniqueViolationError: # await session.send(f"你已经添加过「{doc[item]}」的资讯订阅啦!") # except: # await session.send( # f"发生未知错误!错误详细信息已记录了在log中!\n定位 message id 为:{event.message_id}" # ) # logger.error("some rss issue", exc_info=True) elif "route" in state: for rt in state["ls"]: resp = await sendrss( event.user_id, bot, "自定义路由", None, getrss, (1, 1), route=rt, ) if resp and event.detail_type != "private": await rss.send( unescape(cq.at(event.user_id) + f"「{rt}」的资讯已私信,请查收。")) elif "del" in state: fail = [] success = [] for _, dl in state["ls"]: resp = await Sub.delete.where((Sub.qid == event.user_id) & (Sub.rss == dl)).gino.status() print(resp) if resp[len("delete "):] == "0": fail.append(doc[dl]) else: success.append(doc[dl]) if len(fail) > 0: await rss.send( cq.at(event.user_id) + f"这{'个' if len(fail)==1 else '些'}源「{'、'.join(fail)}」不在你的订阅列表里面哦~" ) if len(success) > 0: await rss.send( cq.at(event.user_id) + f" 取消订阅「{'、'.join(success)}」成功!可喜可贺,可喜可贺!") elif state["list"]: values = await Sub.query.where(Sub.qid == event.user_id).gino.all() if len(values) == 0: await rss.finish("貌似你没有订阅任何 rss 源") await rss.send( cq.at(event.user_id) + "以下是你已订阅的源:\n{}".format("\n".join( [doc[i.rss] + " - " + i.rss for i in values]))) else: loop = asyncio.get_event_loop() for item, nm in state["ls"]: asyncio.run_coroutine_threadsafe( sendrss( event.user_id, bot, nm, None, item, feedBack=event.group_id if event.detail_type != "private" else False, ), loop, )
def _unescape(message: Message, segment: MessageSegment): if segment.is_text(): return message.append(unescape(str(segment))) return message.append(segment)