diff --git a/src/bot/bot.py b/src/bot/bot.py index 46dc63a..6652e51 100644 --- a/src/bot/bot.py +++ b/src/bot/bot.py @@ -137,7 +137,8 @@ class Bot(): value = tokens[5] src_title = await self.__get_chat_title(src) dst_title = await self.__get_chat_title(dst) - name = "{0} -> {1} ({2})".format(src_title, dst_title, value) + name = "[{0}] '{1}' = [{2}] {3} -> [{4}] {5}".format( + ftype, value, src, src_title, dst, dst_title) rule = self.__config.add_subscription(src, ftype, value, dst, name=name) if rule is None: return "Already exists: {0} [{1}] '{2}' -> {3}".format(src, ftype, value, dst) @@ -166,10 +167,30 @@ class Bot(): return "No such line: {0} (total: {1})".format(line_no, len(subs)) self.__config.set_enabled(subs[line_no - 1]['id'], False) return "Disabled line {0}".format(line_no) + if cmd == 'names': + return await self.__sub_actualize_names() except (ValueError, IndexError): return self.__sub_help() return self.__sub_help() + async def __sub_actualize_names(self) -> str: + subs = self.__config.list_subscriptions() + if not subs: + return "No subscriptions" + updated = 0 + for s in subs: + src = s.get('srcChatId') + dst = s.get('action', {}).get('chatId') + ftype = s.get('filter', {}).get('type', '') + value = s.get('filter', {}).get('value', '') + src_title = await self.__get_chat_title(src) + dst_title = await self.__get_chat_title(dst) + name = "[{0}] '{1}' = [{2}] {3} -> [{4}] {5}".format( + ftype, value, src, src_title, dst, dst_title) + self.__config.set_name(s['id'], name) + updated += 1 + return "Updated {0} names".format(updated) + async def __get_chat_title(self, chat_id: int) -> str: try: entity = await self.__bot.get_entity(chat_id) @@ -199,7 +220,8 @@ class Bot(): "!sub list\n" "!sub add \n" "!sub del \n" - "!sub on | !sub off ") + "!sub on | !sub off \n" + "!sub names") async def __send_all_chats_to_owner(self) -> None: text = "" diff --git a/src/settings/config.py b/src/settings/config.py index a02e7b4..b64a0ca 100644 --- a/src/settings/config.py +++ b/src/settings/config.py @@ -78,6 +78,18 @@ class Config(): return True return False + def set_name(self, sub_id: int, name: str) -> bool: + with self.__lock: + for rules in self.__config.get('onMessage', {}).values(): + if not isinstance(rules, list): + continue + for rule in rules: + if rule.get('id') == sub_id: + rule['name'] = name + self.__save() + return True + return False + def set_enabled(self, sub_id: int, enabled: bool) -> bool: with self.__lock: for rules in self.__config.get('onMessage', {}).values():