예제 #1
0
 async def mirai_Poke(ctx: Poke, event: Message, chat: Chat):
     content = f"[Poke]\n{ctx.name}" if ctx.name else "[Content missing]"
     at_str = "@me"
     begin_index = len(content)
     end_index = begin_index + len(at_str)
     at_list = {(begin_index, end_index): chat.self}
     return [efb_text_simple_wrapper(content, at_list)]
예제 #2
0
 async def mirai_Quote(ctx: Quote, event: Message, chat: Chat):
     original_message = ""
     for message in ctx.origin:
         if isinstance(message, Plain):
             original_message += message.text
         elif isinstance(message, Image):
             original_message += " [Image] "
         elif isinstance(message, Face):
             original_message += f" [Face {message.faceId}]"
     return [efb_text_simple_wrapper(f"「{original_message}」\n\n")]
예제 #3
0
 async def mirai_At(ctx: At, event: Message, chat: Chat):
     at_list = None
     if not ctx.display:
         if event.type == MessageType.GROUP.value:
             members = await MiraiFactory.instance.async_get_group_member_list(
                 group_id=event.member.group.id, no_cache=False)
             flag = False
             for member in members:
                 if int(member['uid']) == int(ctx.target):
                     ctx.display = f"@{member['name']}"
                     flag = True
                     break
             if not flag:
                 ctx.display = "@Unknown"
     if MiraiConfig.configs.get('qq', 0) == ctx.target:
         ctx.display = "@me"
         begin_index = 0
         end_index = len(ctx.display)
         at_list = {(begin_index, end_index): chat.self}
     logger.debug(at_list)
     return [efb_text_simple_wrapper(ctx.display, at_list)]
예제 #4
0
 async def mirai_AtAll(ctx: AtAll, event: Message, chat: Chat):
     content = "@all"
     begin_index = 0
     end_index = len(content)
     at_list = {(begin_index, end_index): chat.self}
     return [efb_text_simple_wrapper(content, at_list)]
예제 #5
0
 async def mirai_Face(ctx: Face, event: Message, chat: Chat):
     qq_face = int(ctx.faceId) & 255
     if qq_face in qq_emoji_list:
         return [efb_text_simple_wrapper(qq_emoji_list[qq_face])]
     else:
         return [efb_text_simple_wrapper(f"[Face {ctx.faceId}]")]
예제 #6
0
 async def mirai_Plain(ctx: Plain, event: Message, chat: Chat):
     if not ctx.text:
         return []
     content = ctx.text
     return [efb_text_simple_wrapper(content)]
예제 #7
0
        async def message_handler(event: Event.BaseEvent):
            try:
                if isinstance(event, Event.Message):
                    if event.type == MessageType.GROUP.value:
                        chat = ChatMgr.build_efb_chat_as_group(EFBGroupChat(
                            uid=f"group_{event.member.group.id}",
                            name=event.member.group.name
                        ))
                        author = ChatMgr.build_efb_chat_as_member(chat, EFBGroupMember(
                            name=event.member.memberName,
                            alias=await self.async_get_friend_remark(event.member.id),
                            uid=f'member_{event.member.id}'
                        ))
                    elif event.type == MessageType.FRIEND.value:
                        chat = ChatMgr.build_efb_chat_as_private(EFBPrivateChat(
                            uid=f'friend_{event.friend.id}',
                            name=event.friend.nickname,
                            alias=event.friend.remark
                        ))
                        author = chat.other
                    else:  # temp message
                        chat = ChatMgr.build_efb_chat_as_private(EFBPrivateChat(
                            uid=f'private_{event.member.id}_{event.member.group.id}',
                            name=event.member.memberName
                        ))
                        author = chat.other

                    messages = []
                    try:
                        for message in event.messageChain[1:]:
                            func = getattr(MiraiMessageProcessor, f'mirai_{message.type}')
                            messages.extend(await func(message, event, chat))
                    except:
                        print_exc()
                    message_id = event.messageChain.get_source().id

                    text = ""
                    ats = {}
                    for idx, val in enumerate(messages):
                        flag = False
                        if val.substitutions:
                            flag = True
                            for indexes, substitution in val.substitutions.items():
                                original_begin, original_end = indexes
                                new_begin = original_begin + len(text)
                                new_end = original_end + len(text)
                                ats[new_begin, new_end] = substitution
                        if val.text:
                            flag = True
                            text += val.text
                        if flag:
                            continue
                        val.uid = chat.uid + f"_{message_id}_{idx}"
                        val.chat = chat
                        val.author = author
                        val.deliver_to = coordinator.master
                        coordinator.send_message(val)
                        if val.file:
                            val.file.close()

                    # Finally send the text messages
                    if text:
                        text_msg = efb_text_simple_wrapper(text, ats)
                        text_msg.uid = chat.uid + f"_{message_id}"
                        text_msg.chat = chat
                        text_msg.author = author
                        text_msg.deliver_to = coordinator.master
                        coordinator.send_message(text_msg)
                        if text_msg.file:
                            text_msg.file.close()
                return True
            except:
                print_exc()
                return False