def __init__(self, app_configs: Dict, configs: Dict): self.directs = {} self.docs = {} self.schedules = {} self.inner_commands = {} self.commands = {} self.schedule_task_list = [] self.message_queue = Queue() self.command_queue = Queue() self.history = None self.loop = asyncio.get_event_loop() self.bcc = Broadcast(loop=self.loop) self.counters = [0, 0] if configs['debug']: global defaultLogger defaultLogger.close() defaultLogger = DefaultLogger(level=DEBUG) self.logger = defaultLogger self.app = GraiaMiraiApplication(broadcast=self.bcc, connect_info=Session(**app_configs), logger=self.logger, debug=configs['debug']) self.prefix = configs['prefix'] self.db = Storage.load() self.load_mods()
def __init__(self, config: dict): if not self.__first_init: logger.info("Initializing") if any(parameter not in config for parameter in self.necessary_parameters): raise ValueError( f"Missing necessary parameters! (miraiHost, authKey, BotQQ)" ) self.__loop = asyncio.get_event_loop() self.__bcc = Broadcast(loop=self.__loop) self.__app = GraiaMiraiApplication(broadcast=self.__bcc, connect_info=Session( host=config["miraiHost"], authKey=config["authKey"], account=config["BotQQ"], websocket=True), enable_chat_log=False) self.__saya = Saya(self.__bcc) self.__saya.install_behaviours(BroadcastBehaviour(self.__bcc)) self.__app.debug = False self.__config = config AppCore.__first_init = True logger.info("Initialize end") else: raise AppCoreAlreadyInitialized()
def __init__(self, account, key): self.loop = asyncio.get_event_loop() self.bcc = Broadcast(loop=self.loop) self.scheduler = AsyncIOScheduler() self.mirai = GraiaMiraiApplication(broadcast=self.bcc, connect_info=Session( host="http://localhost:8080", authKey=key, account=account, websocket=True))
def start(self): message_handler = MsgHandler() # message_handler.initHandler() loop = asyncio.get_event_loop() bcc = Broadcast(loop=loop) app = GraiaMiraiApplication( broadcast=bcc, connect_info=Session( host="http://*****:*****@bcc.receiver("FriendMessage") async def friend_message_listener(graia_app: GraiaMiraiApplication, friend: Friend, message: MessageChain): async def friend_sender(send_msg): result = await graia_app.sendFriendMessage( friend, MessageChain.create([send_msg])) if result: self.set_send_msg_flag(False) threading.Timer(5.0, self.set_send_msg_flag).start() msg = message.asDisplay() log.i("receive friend message: %s" % msg) await message_handler.handle(msg, friend_sender, friend=friend) @bcc.receiver("GroupMessage") async def group_message_listener(graia_app: GraiaMiraiApplication, group: Group, member: Member, message: MessageChain): async def group_sender(send_msg): should_respond = True if member.id == aqiang_id: should_respond = False if should_respond: result = await graia_app.sendGroupMessage( group, MessageChain.create([send_msg])) if result: self.set_send_msg_flag(False) threading.Timer(5.0, self.set_send_msg_flag).start() msg = message.asDisplay() log.i("receive group message: %s" % msg) await message_handler.handle(msg, group_sender) app.launch_blocking()
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 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 main(): loop = asyncio.get_event_loop() bcc = Broadcast(loop=loop) app = GraiaMiraiApplication( broadcast=bcc, connect_info=Session( host="http://xqh.ma:12321", # 填入 httpapi 服务运行的地址 authKey="ltrump923429", # 填入 authKey account=3218088431, # 你的机器人的 qq 号 websocket=True # Graia 已经可以根据所配置的消息接收的方式来保证消息接收部分的正常运作. )) env['app'] = app env['bcc'] = bcc load_plugins() app.launch_blocking()
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 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 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)]))
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 __init__(self): host = Util.getConfig("mirai", "host") port = Util.getConfig("mirai", "port") authKey = Util.getConfig("mirai", "authKey") account = Util.getConfig("mirai", "account") url = "http://" + "{}:{}".format(host, port) self.app = GraiaMiraiApplication( broadcast=bcc, connect_info=Session( host=url, # 填入 httpapi 服务运行的地址 authKey=authKey, # 填入 authKey account=account, # 你的机器人的 qq 号 websocket=False # Graia `已经可以根据所配置的消息接收的方式来保证消息接收部分的正常运作. ))
from SAGIRIBOT.functions.petpet import petpet from SAGIRIBOT.functions.get_abbreviation_explain import get_abbreviation_explain loop = asyncio.get_event_loop() bcc = Broadcast(loop=loop) sche = GraiaScheduler(loop=loop, broadcast=bcc) with open('config.json', 'r', encoding='utf-8') as f: # 从json读配置 configs = json.loads(f.read()) app = GraiaMiraiApplication( broadcast=bcc, connect_info=Session( host="http://localhost:8080", authKey="1234567890", account=configs["BotQQ"], websocket=True ) ) # 复读判断 group_repeat = dict() tasks = Queue() lock=threading.Lock() # async def group_message_sender(message_info: GroupMessage, message: list, group: Group, # app: GraiaMiraiApplication) -> None: # message_send = await group_message_process(message, message_info, app) # await group_assist_process(message, message_info, message_send, group)
# 超级管理员 start_baiDu_group = [] mast_manager_group = [] quick_find_question_list = {} shutdown_all_group = [] loop = asyncio.get_event_loop() # 获取bot运行的协程 json_config = {} bcc = Broadcast(loop=loop) app = GraiaMiraiApplication( broadcast=bcc, connect_info=Session( host=API_ROOT, # httpapi 服务运行的地址 authKey=AuthKey, # authKey account=BOTQQ, # 机器人的 qq 号 websocket=True # Graia 已经可以根据所配置的消息接收的方式来保证消息接收部分的正常运作. )) async def ReadConfig(): try: with open('config.json', 'r') as f: global json_config json_config = json.load(f).copy() if 'baiDu_group' in json_config.keys(): for i in json_config['baiDu_group']: start_baiDu_group.append(i) if 'shutdown_all_group' in json_config.keys(): for i in json_config['shutdown_all_group']:
from graia.application.friend import Friend from graia.application.group import Group, Member from graia.application.message.chain import MessageChain from graia.application.message.elements.internal import Source, Plain, At, Image, Face from graia.broadcast import Broadcast from commands import std, easter_eggs from config import host, auth_key, account, database_path, information_groups from icu.decorator import command from icu.database import Database loop = asyncio.get_event_loop() bcc = Broadcast(loop=loop) app = GraiaMiraiApplication(broadcast=bcc, connect_info=Session(host=host, authKey=auth_key, account=account, websocket=True)) database = Database(database_path) command.register( registers=( std.register_common_commands, std.register_database_commands, easter_eggs.register_common_commands, ), database=database, ) # average_message_length,用于判断大喘气:member_id, length, count aml = collections.defaultdict(lambda: [0, 0, 0])
from graia.application import GraiaMiraiApplication, Session from graia.application.event.lifecycle import ApplicationLaunched, ApplicationShutdowned from graia.broadcast import Broadcast from handler import * from handler.handler_manager import HandlerManager from pixiv import start_auto_auth, start_search_helper, start_illust_cacher, stop_illust_cacher, stop_search_helper from utils import settings, start_reply_queue, stop_reply_queue, LoguruWarpper loop = asyncio.get_event_loop() bcc = Broadcast(loop=loop) app = GraiaMiraiApplication( broadcast=bcc, connect_info=Session( host= f"""http://{settings["mirai"]["host"]}:{settings["mirai"]["port"]}""", # 填入 httpapi 服务运行的地址 authKey=settings["mirai"]["auth_key"], # 填入 authKey account=int(settings["mirai"]["qq"]), # 你的机器人的 qq 号 # Graia 已经可以根据所配置的消息接收的方式来保证消息接收部分的正常运作. websocket=settings["mirai"]["enable_websocket"]), logger=LoguruWarpper()) manager = HandlerManager(bcc) manager.register(HelpQueryHandler(tag="help query", settings=settings["help"]), priority=settings["function"]["priority"]["help"], allow_friend=settings["function"]["friend"]["listen"] if settings["function"]["friend"]["help"] else [], allow_group=settings["function"]["group"]["listen"] if settings["function"]["group"]["help"] else []) manager.register(PixivRankingQueryHandler(tag="ranking query", settings=settings["ranking"]), priority=settings["function"]["priority"]["ranking"],
from graia.application import GraiaMiraiApplication, Session from graia.application.entry import MemberJoinRequestEvent, MessageChain, Plain from graia.broadcast import Broadcast from graia.broadcast.builtin.decoraters import Depend from graia.broadcast.exceptions import ExecutionStop from chancechecker import chanceChecker from verifyuid import verifyQmailUid # Application & BCC 初始化 loop = asyncio.get_event_loop() bcc = Broadcast(loop=loop) app = GraiaMiraiApplication(broadcast=bcc, connect_info=Session( host=os.environ['graia-host'], authKey=os.environ['graia-authkey'], account=int(os.environ['graia-account']), websocket=True), enable_chat_log=False ) class qqGroup(object): '''QQ 群号''' main = 586146922 # 主用户群 cafe = 651672723 # 咖啡馆 admins = 985317265 # 运营组 workInGroups = [qqGroup.main, qqGroup.cafe] # 在这些群内工作
import tenxun_voice import huangli import Tao config = configparser.ConfigParser() # ini类实例化 loop = asyncio.get_event_loop() config.read("tao.ini") bcc = Broadcast(loop=loop) app = GraiaMiraiApplication( broadcast=bcc, connect_info=Session( host="{}:{}".format(config['connect_mirai']['host'],config['connect_mirai']['port']), # 填入 httpapi 服务运行的地址 authKey=config['connect_mirai']['authKey'], # 填入 authKey account=config.getint('connect_mirai','account'), # 机器人的 qq 号 websocket=config.getboolean('connect_mirai','websocket') # Graia 已经可以根据所配置的消息接收的方式来保证消息接收部分的正常运作. ), logger=log.CustomLogger() #继承日志输出的抽象调用方法 ) inc =InterruptControl(bcc) async def netease_cloud_music_hot(some,*member): send_message = MessageChain.create([Plain(wangyiyun.reping())]) if member[0] == (): await app.sendFriendMessage(some, send_message) else: at = MessageChain.create([At(member[0][0].id)]) await app.sendGroupMessage(some,MessageChain.join(at,send_message)) async def netease_cloud_music_get(some,rmsg,*member):
r = requests.post(url, params=payload, headers=headers) rr = r.json() return rr['trans_result'][0]['dst'] def ai(ms): r = requests.get( f'http://api.qingyunke.com/api.php?key=free&appid=0&msg={ms}').json() return re.sub('''{br}''', '\n', r['content']) loop = asyncio.get_event_loop() bcc = Broadcast(loop=loop) app = GraiaMiraiApplication(broadcast=bcc, connect_info=Session(host="http://*****:*****@bcc.receiver("FriendMessage") async def deff( message: MessageChain, app: GraiaMiraiApplication, friend: Friend, ): fll = 0 for mme in range(1, 10): if message.asDisplay().startswith('xx' + str(mme)): await app.sendFriendMessage(friend, MessageChain.create([Plain(kkb(mme))]))
from function.danmaku import livewrite, entrance, get_info from function.live import getlive, liveend, livechange loop = asyncio.get_event_loop() info = {} ua = Faker() headers = {'User-Agent': str(ua.user_agent)} global null null = '' groups = [372733015, 875626950, 766517688, 862315052, 729801800] bcc = Broadcast(loop=loop) app = GraiaMiraiApplication( broadcast=bcc, connect_info=Session( host="http://42.193.102.81:8080", # 填入 httpapi 服务运行的地址 authKey="myon759572692", # 填入 authKey account=2157510360, # 你的机器人的 qq 号 websocket=True # Graia 已经可以根据所配置的消息接收的方式来保证消息接收部分的正常运作. )) inc = InterruptControl(bcc) bvpattern = re.compile(r'BV1[1-9A-NP-Za-km-z]{9}') @bcc.receiver(GroupMessage) async def group_message_handler(app: GraiaMiraiApplication, message: MessageChain, group: Group, member: Member): url = "" b23_url = "" # 先申请好两种要用的url
loop = asyncio.get_event_loop() bcc = Broadcast(loop=loop) sche = GraiaScheduler(loop=loop, broadcast=bcc) with open('config.json', 'r', encoding='utf-8') as f: # 从json读配置 configs = json.loads(f.read()) if configs["highPerformance"]: from SAGIRIBOT.high_performances.porn_identification import porn_identification from SAGIRIBOT.basics.tools import save_img app = GraiaMiraiApplication(broadcast=bcc, connect_info=Session(host=configs["miraiHost"], authKey=configs["authKey"], account=configs["BotQQ"], websocket=True)) # 复读判断 group_repeat = dict() tasks = Queue() lock = threading.Lock() frequency_limit_dict = {} frequency_limit_instance = None exception_resender_instance = None # async def group_message_sender(message_info: GroupMessage, message: list, group: Group, # app: GraiaMiraiApplication) -> None: # message_send = await group_message_process(message, message_info, app)
# 从设置文件中读api的地址 if os.path.exists("config.ini"): conf = configparser.ConfigParser() conf.read("setting.ini") api_url = conf.get("API", "API", fallback='http://*****:*****@bcc.receiver("FriendMessage") async def group_message_handler(message: MessageChain, friend: Friend, graia_app: GraiaMiraiApplication): if message.has(Plain): request_text = message[Plain][0].text # 获取传来的数据的要求 request_parm = request_text.split() # 将传来的数据split开 if len(request_parm) > 1: # 当传来的request可以分为多于一个值的时候 if request_parm[0].lower() == "search": # 如果第一个单词是search,则执行查询论文指令 # 解析传入的查询信息 search_flag = "query"
import AutoUpdate import logging import json logging.basicConfig(level=logging.INFO) loop = asyncio.get_event_loop() with open('./config.json', encoding='utf-8') as config_file: config = json.load(config_file) bcc = Broadcast(loop=loop) app = GraiaMiraiApplication(broadcast=bcc, connect_info=Session( host='http://localhost:{}'.format( config['Graia']['port']), authKey=config['Graia']['authKey'], account=config['Graia']['qq'], websocket=True)) Bot = AutoUpdate.PCRBot() Bot.initialize() Global_group = config['Graia']['group'] boss_num, legal_begin = [], ['状态', '绑定', '总查刀', '查', '预约', '获取'] # for b in ['1', '2', '3', '4', '5.5', '5']: # legal_begin.append('查' + b) # legal_begin.append('预约' + b)
import asyncio from graia.broadcast import Broadcast from graia.application import GraiaMiraiApplication from graia.application.session import Session from graia.application.message.chain import MessageChain from graia.application.group import Group, Member from devtools import debug loop = asyncio.get_event_loop() bcc = Broadcast(loop=loop) app = GraiaMiraiApplication(broadcast=bcc, connect_info=Session(host="http://*****:*****@bcc.receiver("GroupMessage") async def group_message_handler(app: GraiaMiraiApplication, message: MessageChain, group: Group, member: Member): print(group.id, member.id) app.launch_blocking()
loop = asyncio.get_event_loop() bcc = Broadcast(loop=loop) saya = Saya(bcc) config_path = Path("config.yaml") if not config_path.is_file(): config_path.write_text(Path("config.yaml.sample").read_text()) sys.exit(1) config = yaml.load(config_path.read_text(), Loader=SafeLoader) saya.install_behaviours(BroadcastBehaviour(bcc)) app = GraiaMiraiApplication( broadcast=bcc, connect_info=Session( host=config["mirai"]["host"], authKey=config["mirai"]["authKey"], account=config["mirai"]["account"], websocket=config["mirai"]["websocket"], ), ) with saya.module_context(): for i in get_all_package_name("functions/"): saya.require("functions.{}".format(i), config) try: app.launch_blocking() except KeyboardInterrupt: sys.exit()