Esempio n. 1
0
def AddBotHelpListener(bcc: Broadcast):
    bcc.receiver("GroupMessage",
                 headless_decorators=[strictPlainCommand("#帮助")
                                      ])(GroupHelpMessage)
    bcc.receiver("GroupMessage",
                 headless_decorators=[strictPlainCommand("#关于")
                                      ])(GroupAboutMessage)
Esempio n. 2
0
def postGroupMessage(message: MessageChain, bcc: Broadcast) -> NoReturn:
    bcc.postEvent(
        GroupMessage(messageChain=message,
                     sender=Member(id=123456789,
                                   memberName="member name",
                                   permission=MemberPerm.Administrator,
                                   group=Group(
                                       id=123456789,
                                       name="group name",
                                       permission=MemberPerm.Administrator))))
def AddGroupAnswerListener(bcc: Broadcast):
    bcc.receiver("GroupMessage")(GroupAddAnswer)
    bcc.receiver("GroupMessage")(GroupDeleteAnswer)
    bcc.receiver("GroupMessage", headless_decorators=[strictPlainCommand("#可用进群答案")])(
        GroupAllowAnswer
    )
    bcc.receiver("MemberJoinRequestEvent")(MemberJoinRequest)
def AddGroupSentenceListener(bcc: Broadcast):
    bcc.receiver("GroupMessage",
                 headless_decorators=[startWith("#添加群语录")])(GroupAddSentence)
    bcc.receiver("GroupMessage")(GroupShowSentence)
    bcc.receiver("GroupMessage")(GroupDeleteSentence)
    bcc.receiver("GroupMessage",
                 headless_decorators=[strictPlainCommand("#随机语录")
                                      ])(GroupRandomSentence)
Esempio n. 5
0
    async def auto_parse_by_type(original_dict: dict) -> BaseEvent:
        """从尚未明确指定事件类型的对象中获取事件的定义, 并进行解析

        Args:
            original_dict (dict): 用 dict 表示的序列化态事件, 应包含有字段 `type` 以供分析事件定义.

        Raises:
            InvaildArgument: 目标对象中不包含字段 `type`
            ValueError: 没有找到对应的字段, 通常的, 这意味着应用获取到了一个尚未被定义的事件, 请报告问题.

        Returns:
            BaseEvent: 已经被序列化的事件
        """
        if not original_dict.get("type") and not isinstance(
                original_dict.get("type"), str):
            raise InvaildArgument(
                "you need to provide a 'type' field for automatic parsing")
        event_type = Broadcast.findEvent(original_dict.get("type"))
        if not event_type:
            raise ValueError("we cannot find a such event: {}".format(
                original_dict.get("type")))
        return await run_always_await(
            event_type.parse_obj(
                {k: v
                 for k, v in original_dict.items() if k != "type"}))
Esempio n. 6
0
 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()
Esempio n. 7
0
 def __init__(self, config: GlobalConfig):
     if not self.__first_init:
         logger.info("Initializing")
         self.__loop = asyncio.get_event_loop()
         self.__bcc = Broadcast(loop=self.__loop)
         self.__app = Ariadne(broadcast=self.__bcc,
                              chat_log_config=False,
                              connect_info=DefaultAdapter(
                                  broadcast=self.__bcc,
                                  ping=False,
                                  mirai_session=MiraiSession(
                                      host=config.mirai_host,
                                      verify_key=str(config.verify_key),
                                      account=config.bot_qq),
                              ))
         self.__saya = Saya(self.__bcc)
         self.__saya.install_behaviours(BroadcastBehaviour(self.__bcc))
         if _install_scheduler:
             self.__sche = GraiaScheduler(loop=self.__loop,
                                          broadcast=self.__bcc)
             self.__saya.install_behaviours(
                 GraiaSchedulerBehaviour(self.__sche))
         self.__app.debug = False
         self.__config = config
         AppCore.__first_init = True
         logger.info("Initialize end")
     else:
         raise AppCoreAlreadyInitialized()
Esempio n. 8
0
 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 AddGroupMuteMemberListener(bcc: Broadcast):
    bcc.receiver("GroupMessage")(GroupMuteMember)
    bcc.receiver("GroupMessage",
                 headless_decorators=[strictPlainCommand("#解除禁言")
                                      ])(GroupunmuteMember)
    bcc.receiver("GroupMessage",
                 headless_decorators=[strictPlainCommand("#全体禁言")
                                      ])(GroupMuteAll)
    bcc.receiver("GroupMessage",
                 headless_decorators=[strictPlainCommand("#解除全体禁言")
                                      ])(GroupUnMuteAll)
Esempio n. 10
0
 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 AddGroupBlockListListener(bcc: Broadcast):
    bcc.receiver("GroupMessage",
                 headless_decorators=[strictPlainCommand("#警告")
                                      ])(GroupWarnMember)
    bcc.receiver("GroupMessage",
                 headless_decorators=[strictPlainCommand("#删除警告")
                                      ])(GroupCancelWarnMember)
    bcc.receiver("GroupMessage",
                 headless_decorators=[strictPlainCommand("#拉黑")
                                      ])(GroupBlockMember)
    bcc.receiver("GroupMessage",
                 headless_decorators=[strictPlainCommand("#解除拉黑")
                                      ])(GroupUnBlockMember)
Esempio n. 12
0
    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()
Esempio n. 13
0
 async def auto_parse_by_type(original_dict: dict) -> BaseEvent:
     if not original_dict.get("type") and not isinstance(
             original_dict.get("type"), str):
         raise InvaildArgument(
             "you need to provide a 'type' field for automatic parsing")
     event_type = Broadcast.findEvent(original_dict.get("type"))
     if not event_type:
         raise ValueError("we cannot find a such event: {}".format(
             original_dict.get("type")))
     return await run_always_await(
         event_type.parse_obj(
             {k: v
              for k, v in original_dict.items() if k != "type"}))
Esempio n. 14
0
def AddGroupAdminListener(bcc: Broadcast):
    bcc.receiver("GroupMessage", headless_decorators=[strictPlainCommand("#添加管理员")])(
        GroupAddAdmin
    )
    bcc.receiver("GroupMessage", headless_decorators=[strictPlainCommand("#解除管理员")])(
        GroupRemoveAdmin
    )
    bcc.receiver("GroupMessage", headless_decorators=[strictPlainCommand("#当前管理员")])(
        GroupAvailableAdmin
    )
Esempio n. 15
0
def AddAnswerBookListener(bcc: Broadcast):
    bcc.receiver("GroupMessage",
                 headless_decorators=[regexPlain(r"^#神启[\s]*([^\s]*)$")
                                      ])(AnswerBookGroup)
    bcc.receiver("FriendMessage",
                 headless_decorators=[regexPlain(r"^#神启[\s]*([^\s]*)$")
                                      ])(AnswerBookFriend)
    bcc.receiver("TempMessage",
                 headless_decorators=[regexPlain(r"^#神启[\s]*([^\s]*)$")
                                      ])(AnswerBookTemp)
Esempio n. 16
0
def AddAppToUrlListener(bcc: Broadcast):
    bcc.receiver("GroupMessage")(AppToUrlAutoConvertGenerator(GroupMessage))
    bcc.receiver("FriendMessage")(AppToUrlAutoConvertGenerator(FriendMessage))
    bcc.receiver("TempMessage")(AppToUrlAutoConvertGenerator(TempMessage))
    bcc.receiver("GroupMessage",
                 headless_decorators=[strictPlainCommand("#提取App链接")])(
                     MessageAppToUrlGenerator(GroupMessage))
    bcc.receiver("FriendMessage",
                 headless_decorators=[strictPlainCommand("#提取App链接")])(
                     MessageAppToUrlGenerator(FriendMessage))
    bcc.receiver("TempMessage",
                 headless_decorators=[strictPlainCommand("#提取App链接")
                                      ])(MessageAppToUrlGenerator(TempMessage))
Esempio n. 17
0
import asyncio
from graia.saya import Saya
from graia.broadcast import Broadcast
from graia.saya.builtins.broadcast import BroadcastBehaviour
from graia.scheduler import GraiaScheduler
from graia.scheduler.saya import GraiaSchedulerBehaviour
from graia.application.entry import (
    GraiaMiraiApplication, Session
)
from utils import ModuleLoader, BotAttributes
from utils import logger

loop = asyncio.get_event_loop()
broadcast = Broadcast(loop=loop)
scheduler = GraiaScheduler(loop, broadcast)
saya = Saya(broadcast)

bot = BotAttributes("./config.json")

saya.install_behaviours(BroadcastBehaviour(broadcast))
saya.install_behaviours(GraiaSchedulerBehaviour(scheduler))

ModuleLoader.load(saya)

app = GraiaMiraiApplication(
    broadcast=broadcast,
    connect_info=Session(
        host=bot.host,
        authKey=bot.authKey,
        account=bot.account,
        websocket=True
Esempio n. 18
0
        @staticmethod
        async def catch(interface: "DispatcherInterface"):
            if interface.annotation is str:
                return "1"


@Waiter.create_using_function([TestEvent])
def waiter(event: TestEvent):
    return 1


event = TestEvent()
loop = asyncio.get_event_loop()

broadcast = Broadcast(
    loop=loop,
    debug_flag=False,
)


@broadcast.receiver(TestEvent)
async def r(r: str, d: str, c: str):
    # loop.call_later(1, lambda: broadcast.postEvent(TestEvent()))
    # print(await inc.wait(waiter))
    pass


count = 40000

event = TestEvent()
listener = broadcast.getListener(r)
tasks = []
def AddGroupConfigChangeListener(bcc: Broadcast):
    bcc.receiver("BotGroupPermissionChangeEvent")(GroupPermissionChange)
    bcc.receiver("GroupNameChangeEvent")(GroupNameChange)
    bcc.receiver("GroupEntranceAnnouncementChangeEvent")(
        GroupEntranceAnnouncementChange)
    bcc.receiver("GroupMuteAllEvent")(GroupMuteAll)
    bcc.receiver("GroupAllowAnonymousChatEvent")(GroupAnonymousChat)
    bcc.receiver("GroupAllowConfessTalkEvent")(GroupConfessTalk)
Esempio n. 20
0
    def MiraiRun(self):
        Cfg = self.RecorderInstance.GetConfig

        asyncio.set_event_loop(asyncio.new_event_loop())
        loop = asyncio.get_event_loop()

        bcc = Broadcast(loop=loop)
        app = GraiaMiraiApplication(
            broadcast=bcc,
            connect_info=Session(
                host="http://" + Cfg().
                plugin_notifybot_mirai_api_http_locate,  # 填入 httpapi 服务运行的地址
                authKey=Cfg().plugin_notifybot_authkey,  # 填入 authKey
                account=Cfg().plugin_notifybot_qq_number,  # 你的机器人的 qq 号
                websocket=True  # Graia 已经可以根据所配置的消息接收的方式来保证消息接收部分的正常运作.
            ))

        @bcc.receiver("FriendMessage")
        async def event_fm(app: GraiaMiraiApplication, friend: Friend,
                           msg: MessageChain):
            self.PrintLog("Receive friend message: " + str(msg))
            for Callback in self.RecorderInstance.GetCallbackCollection(
                    "QQInterface", "OnFriendMessage"):
                try:
                    Callback(room_info)
                except Exception as pe:
                    self.PrintLog("Plugin exception: " + repr(e))
                    traceback.print_exc()
            await app.sendFriendMessage(
                friend, MessageChain.create([Plain(text="机器人没有私聊功能")]))

        def GetSelfName():
            Names = Cfg().plugin_notifybot_say_selfname
            if len(Names) > 0:
                return Names[random.randint(0, len(Names) - 1)]
            else:
                return ""

        def GetCalendarMessage():
            try:
                TxtResult = []
                CalData = self.requirements[
                    "RoomPollingClient"].GetLiveCalendar()
                ts = CalData["now"]
                rts = datetime.datetime.fromtimestamp(ts)

                prog_today_passed = None
                prog_scheduled = None
                for prog in CalData["programs"]:
                    prog_ts = prog["ts"]
                    prog_rts = datetime.datetime.fromtimestamp(prog_ts)
                    if prog_ts < ts and prog_rts.day == rts.day:
                        prog_today_passed = prog
                    if prog_ts >= ts:
                        prog_scheduled = prog
                        break
                TxtResult.append("让我康康直播日历,")
                if prog_scheduled:
                    prog_ts = prog_scheduled["ts"]
                    prog_rts = datetime.datetime.fromtimestamp(prog_ts)
                    if prog_rts.day == rts.day:
                        TxtResult.append("今天 " + prog_rts.strftime("%H:%M") +
                                         " 有直播哦!标题:" + prog_scheduled["title"])
                    else:
                        if prog_today_passed:
                            TxtResult.append("今天播过了!标题:" +
                                             prog_today_passed["title"])
                            TxtResult.append("今天接下来没有了!下一场:" +
                                             prog_rts.strftime("%m-%d %H:%M") +
                                             " 标题:" + prog_scheduled["title"])
                        else:
                            TxtResult.append("今天没有!下一场:" +
                                             prog_rts.strftime("%m-%d %H:%M") +
                                             " 标题:" + prog_scheduled["title"])
                else:
                    if prog_today_passed:
                        TxtResult.append("今天播过了!标题:" +
                                         prog_today_passed["title"])
                        TxtResult.append("之后的日历全是空的!")
                    else:
                        TxtResult.append("今天没有!之后的日历也全是空的!")
                return "\n".join(TxtResult)
            except Exception as e:
                self.PrintLog("Query calendar failed: " + repr(e))
                traceback.print_exc()
                return "不知道咋回事,出错了"

        def IsInvolved(msg):
            for i in msg.get(At):
                if i.target == Cfg().plugin_notifybot_qq_number:
                    return True
            return False

        async def ProcessRevoke(group, msg):
            Ret = False
            if IsInvolved(msg):
                msgtxt = msg.asDisplay()
                if "撤回" in msgtxt:
                    if self.LastSentMsgId[group.id] != 0:
                        await app.revokeMessage(self.LastSentMsgId[group.id])
                    self.LastSentMsgId[group.id] = 0
                    Ret = True
            return Ret

        async def SendGroupMsg(group, msg):
            BotMsg = await app.sendGroupMessage(group,
                                                MessageChain.create(msg))
            self.LastSentMsgId[group] = BotMsg.messageId

        async def ProcessAnyLiveMsg(group, msg):
            Ret = False
            msgtxt = msg.asDisplay()
            Matched = False
            for Keyword in Cfg().plugin_notifybot_recognise_selfname:
                if Keyword in msgtxt:
                    if "播吗" in msgtxt:
                        Matched = True
                        break
                    if "播嘛" in msgtxt:
                        Matched = True
                        break
            for Keyword in Cfg().plugin_notifybot_anylive_keyword:
                if Keyword in msgtxt:
                    Matched = True
                    break
            if Matched == True:
                if (datetime.datetime.now() -
                        self.LastAnyLiveReportTime[group.id]).seconds > 60:
                    await SendGroupMsg(group.id, [Plain(GetCalendarMessage())])
                    Ret = True
                self.LastAnyLiveReportTime[group.id] = datetime.datetime.now()
            return Ret

        async def ProcessConversations(group, member, msg):
            Ret = False
            SenderID = member.id
            if Cfg().plugin_notifybot_conversation_blacklist.__contains__(
                    SenderID):
                if random.random() >= Cfg(
                ).plugin_notifybot_conversation_blacklist[SenderID]:
                    return Ret
            msgtxt = msg.asDisplay()
            for Conv in Cfg().plugin_notifybot_conversations:
                IsKeywordFound = False
                for Keyword in Conv[0]:
                    if Keyword in msgtxt:
                        IsKeywordFound = True
                        break
                if IsKeywordFound == True:
                    if len(Conv[1]) != 0:
                        while True:
                            RandItem = Conv[1][random.randint(
                                0,
                                len(Conv[1]) - 1)]
                            if random.random() <= RandItem[0]:
                                if RandItem[1] != "":
                                    NewOvertalkCounter = self.OvertalkCounter[
                                        group.id] - (datetime.datetime.now(
                                        ) - self.LastTalkTime[group.id]
                                                     ).seconds / 60
                                    if NewOvertalkCounter < 0:
                                        NewOvertalkCounter = 0
                                    NewOvertalkCounter += 1
                                    self.LastTalkTime[
                                        group.id] = datetime.datetime.now()
                                    if NewOvertalkCounter > Cfg(
                                    ).plugin_notifybot_overtalk_threshold:
                                        if self.OvertalkCounter[group.id] <= Cfg(
                                        ).plugin_notifybot_overtalk_threshold:
                                            await SendGroupMsg(
                                                group.id, [
                                                    Plain(
                                                        emoji.
                                                        emojize(Cfg(
                                                        ).plugin_notifybot_overtalk_word,
                                                                use_aliases=True
                                                                ))
                                                ])
                                    else:
                                        await SendGroupMsg(
                                            group.id, [
                                                Plain(
                                                    emoji.emojize(
                                                        RandItem[1],
                                                        use_aliases=True))
                                            ])
                                    self.OvertalkCounter[
                                        group.id] = NewOvertalkCounter
                                    Ret = True
                                break
                    break
            return Ret

        async def ProcessRepeat(group, msg):
            Ret = False
            msgtxt = msg.include(Plain, Face, Image).asSerializationString()
            if msgtxt == self.LastRepeatMsg[group.id]:
                Matched = False
                for Keyword in Cfg().plugin_notifybot_repeat_keyword:
                    if Keyword in msgtxt:
                        if random.random() < Cfg(
                        ).plugin_notifybot_repeat_keyword_prob:
                            Matched = True
                        break
                if random.random() < Cfg().plugin_notifybot_repeat_prob:
                    Matched = True
                for Keyword in Cfg().plugin_notifybot_repeat_blacklist:
                    if Keyword in msgtxt:
                        Matched = False
                        break
                if Matched == True:
                    NewMsg = msg.include(Face, Plain, Image).__root__
                    if len(NewMsg):
                        await SendGroupMsg(group.id, NewMsg)
                        Ret = True
            self.LastRepeatMsg[group.id] = msgtxt
            return Ret

        @bcc.receiver("GroupMessage")
        async def event_gm(app: GraiaMiraiApplication, group: Group,
                           member: Member, msg: MessageChain):
            try:
                if Cfg().plugin_notifybot_group_number.__contains__(group.id):
                    MsgSent = False
                    if MsgSent == False:
                        MsgSent = await ProcessRevoke(group, msg)
                    if MsgSent == False:
                        MsgSent = await ProcessAnyLiveMsg(group, msg)
                    if MsgSent == False:
                        MsgSent = await ProcessConversations(
                            group, member, msg)
                    if MsgSent == False:
                        MsgSent = await ProcessRepeat(group, msg)
            except Exception as e:
                self.PrintLog("Exception in gm processing: " + repr(e))
                traceback.print_exc()

        @bcc.receiver("TempMessage")
        async def event_tm(app: GraiaMiraiApplication, group: Group,
                           member: Member, msg: MessageChain):
            await app.sendTempMessage(
                group, member, MessageChain.create([Plain(text="机器人没有私聊功能")]))

        async def SendLiveOnMessageAsync():
            for Grp in Cfg().plugin_notifybot_group_number:
                if Cfg().plugin_notifybot_atall:
                    Message = [
                        Plain(text=GetSelfName() + "开播了! " +
                              self.RecorderInstance.GetRoomTitle() +
                              "https://live.bilibili.com/" +
                              self.RecorderInstance.room_id),
                        AtAll()
                    ]
                else:
                    Message = [
                        Plain(text=GetSelfName() + "开播了! " +
                              self.RecorderInstance.GetRoomTitle() +
                              "https://live.bilibili.com/" +
                              self.RecorderInstance.room_id),
                    ]
                try:
                    await SendGroupMsg(Grp, Message)
                except Exception as e:
                    self.PrintLog("Send QQ live notify message failed: " +
                                  repr(e))
                    traceback.print_exc()

        def SendLiveOnMessage():
            try:
                fut = asyncio.run_coroutine_threadsafe(
                    SendLiveOnMessageAsync(), loop)
            except Exception as e:
                self.PrintLog("Send QQ live notify message failed: " + repr(e))
                traceback.print_exc()

        def ProcessLiveStartEvent(FileNameGen):
            t = threading.Thread(target=SendLiveOnMessage)
            t.daemon = True
            t.start()

        async def SendDiskWarningMessageAsync():
            for MgrQQ in Cfg().plugin_notifybot_manager_qq_number:
                try:
                    await app.sendFriendMessage(
                        MgrQQ, MessageChain.create([Plain(text="磁盘空间紧张!")]))
                    await asyncio.sleep(2)
                except Exception as e:
                    self.PrintLog("Send disk warning message failed: " +
                                  repr(e))
                    traceback.print_exc()

        def DiskWarning():
            try:
                fut = asyncio.run_coroutine_threadsafe(
                    SendDiskWarningMessageAsync(), loop)
            except Exception as e:
                self.PrintLog("Send disk warning message failed: " + repr(e))
                traceback.print_exc()

        self.app = app

        self.RecorderInstance.RegisterCallback("RecorderInstance",
                                               "OnLiveStart",
                                               ProcessLiveStartEvent)
        self.RecorderInstance.RegisterCallback("DiskSpaceMonitor", "OnWarning",
                                               DiskWarning)

        self.LastAnyLiveReportTime = {}
        self.LastTalkTime = {}
        self.OvertalkCounter = {}
        self.LastSentMsgId = {}
        self.LastRepeatMsg = {}
        for GrpNum in Cfg().plugin_notifybot_group_number:
            self.LastAnyLiveReportTime[
                GrpNum] = datetime.datetime.fromtimestamp(0)
            self.LastTalkTime[GrpNum] = datetime.datetime.now()
            self.OvertalkCounter[GrpNum] = 0
            self.LastSentMsgId[GrpNum] = 0
            self.LastRepeatMsg[GrpNum] = ""

        app.launch_blocking()
def AddInitDatabaseListener(bcc: Broadcast):
    bcc.receiver(ApplicationLaunched)(InitGroupDataBase)
Esempio n. 22
0
import asyncio

from graia.application import GraiaMiraiApplication as GraiaApp, Session
from graia.broadcast import Broadcast
from graia.application.entry import Friend, FriendMessage, MessageChain, Group, GroupMessage, Plain
from graia.application.entry import ApplicationLaunched, MemberMuteEvent, At, MemberUnmuteEvent, Member

import yaml
import aiohttp

# 包含mirai-api-http的配置文件中的对应部分以及qq号
with open('setting.yml') as f:
    setting = yaml.load(f, yaml.BaseLoader)
loop = asyncio.get_event_loop()
bcc = Broadcast(loop=loop)
app = GraiaApp(broadcast=bcc,
               connect_info=Session(
                   host=f"http://{setting['host']}:{setting['port']}",
                   authKey=f"{setting['authKey']}",
                   account=setting['qq'],
                   websocket=setting['enableWebsocket']))


# 复读
# @bcc.receiver(FriendMessage)
async def echoer(app: GraiaApp, message: MessageChain, friend: Friend):
    if message.asDisplay().startswith("复读"):
        await app.sendFriendMessage(friend, message.asSendable())


echoer = bcc.receiver(FriendMessage)(echoer)  # 如果不用修饰器
import asyncio
from os.path import abspath

from graia.application import GraiaMiraiApplication, Session
from graia.broadcast import Broadcast

from config import config

loop = asyncio.get_event_loop()
config_filename = 'config.cfg'
config_path = abspath('./config/' + config_filename)


def c(q):
    return config(config_path, q)


bcc = Broadcast(loop=loop, debug_flag=c('debug_flag'))
app = GraiaMiraiApplication(
    broadcast=bcc,
    enable_chat_log=c('enable_chat_log'),
    connect_info=Session(
        host=c('host'),  # 填入 httpapi 服务运行的地址
        authKey=c('authkey'),  # 填入 authKey
        account=c('account'),  # 你的机器人的 qq 号
        websocket=c('websocket')  # Graia 已经可以根据所配置的消息接收的方式来保证消息接收部分的正常运作.
    ))