Пример #1
0
    def change_member_info(self,
                           group: Group,
                           target: int,
                           name=None,
                           specialTitle=None):
        """
        更改群员信息

        :param group: 群
        :param target: 成员
        :param name: 需要更改的群名片(可选)
        :param specialTitle: 给予的头衔(可选)
        :return:
        """
        data = {
            'sessionKey': self.session,
            'target': group.uid,
            'memberId': target,
            'info': {}
        }
        if name:
            data['info']['name'] = name
        if specialTitle:
            data['info']['specialTitle'] = specialTitle
        res = self.json_query('/memberInfo', data)

        if res['code'] == 0:
            logger.info(
                f'Change {target} info from {group.name}({group.uid}) to ' +
                json.dumps(data['info']))
        else:
            logger.error(f'Member info change error: {res["msg"]}')
Пример #2
0
 def verify(self, qq):
     res = self.json_query('/verify', {
         'sessionKey': self.session,
         'qq': qq
     })
     if res['code'] == 0:
         logger.info(f'Successfully bind on qq {qq}.')
Пример #3
0
 def __init__(self, addr: str, authKey: str, retry: int = 5):
     self.addr = addr
     self.baseUrl = addr if addr.startswith('http://') else 'http://' + addr
     self.mirai_version = self.json_query('/about',
                                          post=False)['data']['version']
     self.retry = retry
     logger.info(
         f'Connected to mirai-http backend. The version is {self.mirai_version}.'
     )
     self.session = self.json_query('/auth',
                                    {'authKey': authKey})['session']
     # self.session = '8zHZb8kg'
     logger.info(f'Authed. Your session is {self.session}')
Пример #4
0
 def send_group_message(self, group: Group, msg: Message):
     res = self.json_query(
         '/sendGroupMessage', {
             'sessionKey': self.session,
             'target': group.uid,
             'messageChain': msg.getChain()
         })
     if res['code'] == 0:
         logger.info(
             f'{group.name}({group.uid}) <- {msg.getContent(console=True)}')
     else:
         logger.warn(
             f'Send message to {group.name}({group.uid}) failed with code {res["code"]}'
         )
Пример #5
0
    def registerPlugins(self, plugins: list):
        for plugin in plugins:
            logger.info(f'Loading plugin: {plugin}')
            try:
                __import__(plugin)
            except Exception as e:
                logger.error(e)

        # 处理 OnLoad
        for func in PluginManager.plugins['OnLoad']:
            try:
                logger.info(f'Running OnLoad func from {func}')
                func(self)
            except Exception as e:
                logger.error(e)
Пример #6
0
    def send_friend_message(self, friend: Friend, msg: Message):
        res = self.json_query(
            '/sendFriendMessage', {
                'sessionKey': self.session,
                'target': friend.uid,
                'messageChain': msg.getChain()
            })

        if res['code'] == 0:
            logger.info(
                f'{friend.remark}({friend.uid}) <- {msg.getContent(console=True)}'
            )
        else:
            logger.error(
                f'Send message to {friend.remark}({friend.uid}) failed with code {res["code"]}'
            )
Пример #7
0
 def json_query(self,
                addr: str,
                data: dict = None,
                post: bool = True) -> dict:
     try:
         res = requests.post(
             self.baseUrl +
             addr, json=data) if post else requests.get(self.baseUrl + addr)
         res = json.loads(res.text)
         if res['code']:
             logger.error(f'{addr} got code: {res["code"]}')
         return res
     except Exception as e:
         logger.error(e)
         logger.info(f'Retry after {self.retry}s...')
         time.sleep(self.retry)
         return self.json_query(addr, data, post)
Пример #8
0
    def unmute(self, target: Group, memberId: int):
        """
        解除群成员禁言

        :param target: 群号
        :param memberId: 成员qq
        :return:
        """
        if target.permission != Permission.ADMINISTRATOR.name:
            logger.error(f'Unmute error: Permission denied.')
            return -1

        res = self.json_query('/unmute', {
            'sessionKey': self.session,
            'target': target.uid,
            'memberId': memberId
        })

        if res['code'] == 0:
            logger.info(f'Unmuted {memberId} from {target.name}({target.uid})')
        else:
            logger.warn(f'Unmute error: {res["msg"]}')
Пример #9
0
from saaya.logger import logger
import logging

# 日志级别,logger 和 handler以最高级别为准,不同handler之间可以不一样,不相互影响
logger.setLevel(logging.INFO)

version = '0.2.2 dev'
logger.info(f'Welcome to use saaya({version}) based on mirai!')

flag = 'flag{wElc0me_u5e_Sa@ya}'
Пример #10
0
 def illustrate(self):
     logger.info(f'{self.group.name}({self.group.uid}): '
                 f'{self.operator.name}({self.operator.uid}) <- 撤回了'
                 f'{self.source.getContent()}')
Пример #11
0
 def illustrate(self):
     logger.info(
         f'{self.group.name}({self.group.uid}) -> '
         f'{self.sender.name}({self.sender.uid}): {self.message.getContent(console=True)}'
     )
Пример #12
0
    def processor(self, msg):
        event = Event(self.bot)
        logger.debug(msg)

        data: dict = json.loads(msg)
        event.type = data['type']

        if event.type.endswith('Event'):
            logger.info(f'Receive event: {event.type}')

        if event.type == 'FriendMessage':
            sender = Friend(self.bot,
                            uid=data['sender']['id'],
                            nickname=data['sender']['nickname'],
                            remark=data['sender']['remark'])

            message = Message(data['messageChain'], fromSource=True)
            event = FriendMessage(event, sender, message)

        if event.type == 'GroupMessage':
            group = Group(self.bot,
                          qq=data['sender']['group']['id'],
                          name=data['sender']['group']['name'],
                          permission=data['sender']['group']['permission'])

            sender = GroupMember(self.bot,
                                 qq=data['sender']['id'],
                                 name=data['sender']['memberName'],
                                 permission=data['sender']['permission'])

            message = Message(data['messageChain'], fromSource=True)
            event = GroupMessage(event, sender, group, message)

        if event.type == 'GroupRecallEvent':
            group = Group(self.bot,
                          qq=data['group']['id'],
                          name=data['group']['name'],
                          permission=data['group']['permission'])

            operator = GroupMember(self.bot,
                                   qq=data['operator']['id'],
                                   name=data['operator']['memberName'],
                                   permission=data['operator']['permission'])

            source = Source(msgId=data['messageId'], time=data['time'])

            event = GroupRecallEvent(event, operator, group, source)

        if event.type == 'MemberCardChangeEvent':
            group = Group(self.bot,
                          qq=data['member']['group']['id'],
                          name=data['member']['group']['name'],
                          permission=data['member']['group']['permission'])
            member = GroupMember(self.bot,
                                 qq=data['member']['id'],
                                 name=data['member']['memberName'],
                                 permission=data['member']['permission'])
            if data['operator']:
                operator = GroupMember(
                    self.bot,
                    qq=data['operator']['id'],
                    name=data['operator']['memberName'],
                    permission=data['operator']['permission'])
            else:
                operator = None

            origin = data['origin']
            new = data['new']

            event = MemberCardChangeEvent(event, origin, new, member, group,
                                          operator)

        PluginManager.broadCast(event)
Пример #13
0
 def illustrate(self):
     logger.info(f'{self.group.name}({self.group.uid}) -> '
                 f'{self.member.uid} 的名称从 {self.origin} 变更为 {self.new}')
Пример #14
0
 def __init__(self, addr: str, authKey: str):
     self.qq = 0
     self.protocol = Protocol(addr, authKey)
     logger.info('Bot initialized.')