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
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))