Example #1
0
 def replacer(match) -> str:
     puppet = pu.Puppet.find_by_displayname(match.group(2))
     if puppet:
         offset = match.start()
         length = match.end() - offset
         if puppet.username:
             entity = MessageEntityMention(offset, length)
             text = f"@{puppet.username}"
         else:
             entity = MessageEntityMentionName(offset, length, user_id=puppet.tgid)
             text = puppet.displayname
         entities.append(entity)
         return text
     return "".join(match.groups())
 async def append_entity(self, id, entities, message):
     fail = True
     try:
         entity = await self._client.get_input_entity(id)
     except ValueError:
         pass
     else:
         if isinstance(entity, InputPeerSelf):
             entity = await self._client.get_me(True)
         if isinstance(entity, InputPeerUser):
             fail = False
             entities.append(MessageEntityMentionName(len(message),
                             len(str(entity.user_id)), entity.user_id))
             message += str(entity.user_id)
     if fail:
         if not isinstance(id, int):
             id = utils.get_entity_id(id)
         entities.append(MessageEntityCode(len(message), len(str(id))))
         message += str(id)
     return message
Example #3
0
 async def _log(self, type, group, affected_uids, data):
     """Logs an operation to the group"""
     message = "#"
     message += type
     entities = [MessageEntityHashtag(0, len(message)), MessageEntityBold(0, len(message))]
     if affected_uids:
         message += " in "
         for user in affected_uids:
             try:
                 await self._client.get_input_entity(user)
             except ValueError:
                 entities.append(MessageEntityCode(len(message), len(str(user))))
             else:
                 entities.append(MessageEntityMentionName(len(message), len(str(user)), user))
             message += str(user) + ", "
         message = message[:-2]
     if group:
         message += " in "
         entities.append(MessageEntityCode(len(message), len(str(group))))
         message += str(group)
     if data:
         message += "\n\n" + data
     logger.debug(message)
     chat = None
     if self.config["LOG_ID"]:
         try:
             chat = await self._client.get_entity(self.config["LOG_ID"])
         except ValueError:
             logger.debug("ent not found", exc_info=True)
             async for dialog in self._client.iter_dialogs():
                 if dialog.id == self.config["LOG_ID"] or abs(dialog.id + 1000000000000) == self.config["LOG_ID"]:
                     chat = dialog.entity
                     break
         if chat is None:
             logger.debug("chat not found")
         else:
             await self._client.send_message(chat, message, parse_mode=lambda m: (m, entities))