def exception_resender_listener(app: GraiaMiraiApplication, exception_resender_instance: ExceptionReSender, loop): while True: task = exception_resender_instance.get() # print("task: ", task) if task: print("task catched!") print("len:", exception_resender_instance.getLen()) print("task: ", task) try: if len(task) > 1 and task[0] == "None": asyncio.run_coroutine_threadsafe( app.sendGroupMessage(task[4], task[1]), loop) # await app.sendGroupMessage(task[4], task[1]) elif len(task) > 1 and task[0] == "AtSender": asyncio.run_coroutine_threadsafe( app.sendGroupMessage(task[4], task[1]), loop) # await app.sendGroupMessage(task[4], task[1]) elif len(task) > 1 and task[0] == "quoteSource": asyncio.run_coroutine_threadsafe( app.sendGroupMessage(task[4], task[1], quote=task[2][Source][0]), loop) # await app.sendGroupMessage(task[4], task[1], quote=task[2][Source][0]) elif len(task) > 1 and task[0] == "revoke": asyncio.run_coroutine_threadsafe(revoke_process(app, task), loop) # msg = asyncio.run_coroutine_threadsafe(app.sendGroupMessage(task[4], task[1]), loop) # asyncio.run_coroutine_threadsafe(asyncio.sleep(20), loop) # asyncio.run_coroutine_threadsafe(app.revokeMessage(msg.result()), loop) # msg = await app.sendGroupMessage(task[4], task[1]) # await asyncio.sleep(20) # await app.revokeMessage(msg) except Exception: task[5] += 1 if task[5] <= exception_resender_instance.max_retries: exception_resender_instance.addTask(task) else: asyncio.run_coroutine_threadsafe( app.sendGroupMessage( task[4], MessageChain.create([ Plain( text= "Maximum number of retries exceeded! Task cancelled!" ) ]), quote=task[2][Source][0]), loop) time.sleep(2)
def exception_resender_listener(app: GraiaMiraiApplication, exception_resender_instance: ExceptionReSender, loop): while True: task = exception_resender_instance.get() if task: logger.warning("task catched! " + "len:" + str(exception_resender_instance.getLen()) + "task: " + str(task)) try: asyncio.run_coroutine_threadsafe( task[0].strategy.send(app, task[0].message, task[1], task[2], task[3]), loop) except Exception: task[4] += 1 if task[4] <= exception_resender_instance.max_retries: exception_resender_instance.addTask(task) else: logger.error( "Maximum number of retries exceeded! Task cancelled!") asyncio.run_coroutine_threadsafe( app.sendGroupMessage( task[4], MessageChain.create([ Plain( text= "Maximum number of retries exceeded! Task cancelled!" ) ]), quote=task[1][Source][0]), loop) time.sleep(2)
def NetEaseMusic(app: GraiaMiraiApplication, group: Group, member: Member, message: MessageChain): msg_argv = message.asDisplay().split(" ", 1) SearchResult = requests.get( "https://musicapi.leanapp.cn/search?" + urllib.parse.urlencode({"keywords": msg_argv[1]}), timeout=3).json()['result']['songs'][0] SongId = SearchResult['id'] SongName = SearchResult['name'] ArtistName = '/'.join([x['name'] for x in SearchResult['artists']]) CoverPic = requests.get("https://musicapi.leanapp.cn/song/detail?ids=" + str(SongId), timeout=3).json()['songs'][0]['al']['picUrl'] MusicUrl = "https://music.163.com/song/media/outer/url?id=" + str( SongId) + ".mp3" WebUrl = "https://music.163.com/#/song?id=" + str(SongId) finalXML = '''<?xml version='1.0' encoding='UTF-8' standalone='yes' ?><msg serviceID="2" templateID="1" action="web" brief="[分享] {SongName}" sourceMsgId="0" url="{WebUrl}" flag="0" adverSign="0" multiMsgFlag="0"><item layout="2"><audio cover="{CoverPic}" src="{MusicUrl}" /><title>{SongName}</title><summary>{ArtistName}</summary></item><source name="网易云音乐" icon="https://s1.music.126.net/style/favicon.ico?v20180823" url="{WebUrl}" action="app" a_actionData="com.tencent.qqmusic" i_actionData="tencent1101079856://" appid="1101079856" /></msg>'''.format( SongName=SongName, WebUrl=WebUrl, CoverPic=CoverPic, MusicUrl=MusicUrl, ArtistName=ArtistName) # return app.sendGroupMessage( # group.id, # MessageChain.create( # [ # Plain(MusicUrl), # Plain(SongName), # Plain(str(SongId)) # ] # ) return app.sendGroupMessage( group.id, MessageChain.create([Plain(""), Xml(xml=finalXML)]))
def WangYiYun(app: GraiaMiraiApplication, group: Group, member: Member, message: MessageChain): r = requests.get("https://nd.2890.ltd/api/") data = json.loads(r.text) payload = data['data']['content']['content'] return app.sendGroupMessage(group.id, MessageChain.create([Plain(text=payload)]))
def AnimePicCome(app: GraiaMiraiApplication, group: Group, member: Member, message: MessageChain): os.system( "cd ./pic/;wget https://acg.yanwz.cn/api.php --no-check-certificate;mv api.php api.png" ) return app.sendGroupMessage( group.id, MessageChain.create([Image.fromLocalFile("./pic/api.png")]))
def TodayInHistory(app: GraiaMiraiApplication, group: Group, member: Member, message): r = requests.get("https://api.asilu.com/today") data = json.loads(r.text) payload = "今天是" + data['month'] + "月" + data['day'] + "日,在历史上的今天:\n" for i in data['data']: payload = payload + str(i['year']) + "年," + i['title'] + "\n" return app.sendGroupMessage(group.id, MessageChain.create([Plain(text=payload)]))
def hitokoto(app: GraiaMiraiApplication, group: Group, member: Member, message: MessageChain): hitokoto_instance = requests.get( "https://v1.hitokoto.cn/?c=a&c=b&c=d&c=i&c=k").json() return app.sendGroupMessage( group.id, MessageChain.create([ Plain(text=hitokoto_instance['from'] + ": " + hitokoto_instance['hitokoto']) ]))
def draw_lots(app: GraiaMiraiApplication, group: Group, member: Member, message: MessageChain): with open('./draw/draw_lots.json', 'rb') as json_f: json_load = json.load(json_f) gua = json_load["六十四卦"][random.randint(0, 63)] payload = gua + "卦象解析如下:" + json_load[gua[-3:-1]][random.randint( 0, len(json_load[gua[-3:-1]]) - 1)] return app.sendGroupMessage(group.id, MessageChain.create([Plain(payload)]))
async def sendMsg(app: GraiaMiraiApplication, msg: MESSAGE_T, qq: int = None, group: int = None): if isinstance(msg, str): msg = MessageChain.create([Plain(msg)]) if isinstance(msg, ExternalElement): msg = MessageChain.create([msg]) msg = msg.asSendable() if qq: asyncio.create_task(app.sendFriendMessage(qq, msg)) if group: asyncio.create_task(app.sendGroupMessage(group, msg))
def MakeaChoice(app: GraiaMiraiApplication, group: Group, member: Member, message: MessageChain): msg_argv = shlex.split(message.asDisplay()) kw = "" try: kw = msg_argv[1] except: pass lst = kw.split(";") if "" in lst: lst.remove("") result = random.choice(lst) payload = "我的提议是" + str(result) + ",你看怎么样?" return app.sendGroupMessage(group.id, MessageChain.create([Plain(payload)]))
def ahelp(app: GraiaMiraiApplication, group: Group, member: Member, message: MessageChain): payload = '''乌理扬诺娃换库辣!代码重写中..... 目前已开启的的命令: #help: 打开帮助面板 #一言: 一句经典的话, #网抑云: 网抑云语录, #历史上的今天: 历史上的今天发生了什么?, #精神小伙: 精神小伙语录, #网易云 (要点的歌曲): 网易云点歌 #来点二次元 :来个二次元图片 #随机 (选项1);(选项2)... :选择困难症的好帮手!让机器人来帮你选了吧! ''' return app.sendGroupMessage(group.id, MessageChain.create([Plain(payload)]))
def group_message_sender(app: GraiaMiraiApplication, group: Group, msg: MessageChain, loop) -> None: asyncio.run_coroutine_threadsafe(app.sendGroupMessage(group, msg), loop)
def MindBoy(app: GraiaMiraiApplication, group: Group, member: Member, message): r = requests.get("https://api.66mz8.com/api/social.php?format=json") data = json.loads(r.text) payload = data['social'] return app.sendGroupMessage(group.id, MessageChain.create([Plain(text=payload)]))
async def send_images(app: GraiaMiraiApplication, group_id: int, image_type: str): msg = await get_pic(image_type) source = app.sendGroupMessage(group_id, msg[1]) return [msg[0], source]