__version__ = (3, 0, 0) # ©️ Dan Gazizullin, 2021-2023 # This file is a part of Hikka Userbot # Code is licensed under CC-BY-NC-ND 4.0 unless otherwise specified. # 🌐 https://github.com/hikariatama/Hikka # 🔑 https://creativecommons.org/licenses/by-nc-nd/4.0/ # + attribution # + non-commercial # + no-derivatives # You CANNOT edit this file without direct permission from the author. # You can redistribute this file without any changes. # meta pic: https://static.dan.tatar/temp_chat_icon.png # meta banner: https://mods.hikariatama.ru/badges/temp_chat.jpg # meta developer: @hikarimods # scope: hikka_only # scope: hikka_min 1.6.3 import asyncio import datetime import logging import re import time import typing import requests from hikkatl.tl.functions.channels import ( CreateChannelRequest, DeleteChannelRequest, EditPhotoRequest, ) from hikkatl.tl.functions.messages import ExportChatInviteRequest from hikkatl.tl.types import Message from .. import loader, utils logger = logging.getLogger(__name__) class TmpChatInfo(typing.NamedTuple): until: int title: str @loader.tds class TmpChats(loader.Module): """Creates temprorary chats""" strings = { "name": "TmpChats", "chat_is_being_removed": ( "⛔️ This chat is being" " deleted..." ), "args": ( "🚫 Args are incorrect" ), "chat_not_found": ( "🚫 Chat not found" ), "tmp_cancelled": ( " Chat" " {} will now live forever!" ), "delete_error": ( "⛔️ An error occured" " while deleting this temp chat. Please, do it manually." ), "temp_chat_header": ( " This chat will be" " permanently deleted {}." ), "chat_created": ( "👍 Chat {} have been created' ), "delete_error_me": "🚫 Error occured while deleting chat {}", "creating": ( "🟢 Creating temporary" " chat..." ), } strings_ru = { "chat_is_being_removed": ( "⛔️ Чат удаляется..." ), "args": ( "🚫 Неверные" " аргументы" ), "chat_not_found": ( "🚫 Чат не найден" ), "tmp_cancelled": ( " Чат" " {} будет жить вечно!" ), "delete_error": ( "⛔️ Произошла ошибка" " удаления чата. Сделай это вручную." ), "temp_chat_header": ( " Этот чат будет удален" " {}." ), "chat_created": ( "👍 Чат {} создан' ), "delete_error_me": "🚫 Произошла ошибка при удалении чата {}", "creating": ( "🟢 Создание временного" " чата..." ), "_cmd_doc_tmpchat": "<время> <название> - Создать новый временный чат", "_cmd_doc_tmpcurrent": "<время> - Создать новый временный чат", "_cmd_doc_tmpchats": "Показать временные чаты", "_cmd_doc_tmpcancel": "[chat-id] - Отменить удаление чата.", "_cmd_doc_tmpctime": " <новое время> - Изменить время жизни чата", "_cls_doc": "Создает временные чаты во избежание мусорки в Телеграме.", } strings_de = { "chat_is_being_removed": ( "⛔️ Dieser Chat wird" " gelöscht..." ), "args": ( "🚫 Argumente sind" " falsch" ), "chat_not_found": ( "🚫 Chat nicht" " gefunden" ), "tmp_cancelled": ( " Chat" " {} wird jetzt für immer leben!" ), "delete_error": ( "⛔️ Es ist ein Fehler" " beim Löschen dieses temporären Chats aufgetreten. Bitte tun Sie es" " manuell." ), "temp_chat_header": ( " Dieser Chat wird" " dauerhaft gelöscht {}." ), "chat_created": ( "👍 Chat {} wurde erstellt' ), "delete_error_me": "🚫 Fehler beim Löschen des Chats {}", "creating": ( "🟢 Erstelle temporären" " Chat..." ), "_cmd_doc_tmpchat": " - Erstellt neuen temporären Chat", "_cmd_doc_tmpcurrent": " - Erstellt neuen temporären Chat", "_cmd_doc_tmpchats": "Liste temporärer Chats", "_cmd_doc_tmpcancel": ( "[Chat-ID] - Deaktiviert das Löschen des Chats nach Ablauf der Zeit." ), "_cmd_doc_tmpctime": " - Ändert die Löschzeit des Chats", "_cls_doc": "Erstellt temporäre Chats, um den Müll in Telegram zu vermeiden.", } strings_tr = { "chat_is_being_removed": ( "⛔️ Bu sohbet" " siliniyor..." ), "args": ( "🚫 Argümanlar yanlış" ), "chat_not_found": ( "🚫 Sohbet bulunamadı" ), "tmp_cancelled": ( " Sohbet" " {} artık sonsuza kadar yaşayacak!" ), "delete_error": ( "⛔️ Bu geçici sohbeti" " silerken bir hata oluştu. Lütfen bunu yapın manuel." ), "temp_chat_header": ( " Bu sohbet kalıcı" " olarak silinecek {}." ), "chat_created": ( "👍 Sohbet {} oluşturuldu' ), "delete_error_me": "🚫 Sohbeti silerken hata oluştu {}", "creating": ( "🟢 Geçici sohbet" " oluşturuluyor..." ), "_cmd_doc_tmpchat": " - Yeni geçici sohbet oluştur", "_cmd_doc_tmpcurrent": " - Yeni geçici sohbet oluştur", "_cmd_doc_tmpchats": "Geçici sohbetleri listele", "_cmd_doc_tmpcancel": ( "[sohbet-id] - Süre dolduktan sonra sohbeti silmeyi devre dışı bırakın." ), "_cmd_doc_tmpctime": ( " - Sohbet silme süresini değiştir" ), "_cls_doc": "Telegram'daki çöpleri önlemek için geçici sohbetler oluşturur.", } strings_uz = { "chat_is_being_removed": ( "⛔️ Ushbu chat" " o'chirilmoqda..." ), "args": ( "🚫 Argumetlar" " noto'g'ri" ), "chat_not_found": ( "🚫 Chat topilmadi" ), "tmp_cancelled": ( " Chat" " {} doimiy yashashga o'tkazildi!" ), "delete_error": ( "⛔️ Bu vaqtli chatni" " o'chirishda xatolik yuz berdi. Iltimos, uni bajarib ko'ring" " qo'llanma." ), "temp_chat_header": ( " Bu chat doimiy" " ravishda o'chiriladi {}." ), "chat_created": ( "👍 Chat {} yaratildi' ), "delete_error_me": "🚫 Chatni o'chirishda xatolik yuz berdi {}", "creating": ( "🟢 Vaqtli chat" " yaratilmoqda..." ), "_cmd_doc_tmpchat": " - Yangi vaqtli chat yaratish", "_cmd_doc_tmpcurrent": " - Yangi vaqtli chat yaratish", "_cmd_doc_tmpchats": "Vaqtli chatlarni ro'yxatdan o'tkazish", "_cmd_doc_tmpcancel": ( "[chat-id] - Vaqt tugaganidan so'ng chatni o'chirishni bekor qilish." ), "_cmd_doc_tmpctime": ( " - Chatni o'chirish vaqti o'zgartirish" ), "_cls_doc": "Telegramdagi axlatni oldini olish uchun vaqtli chatlar yaratadi.", } strings_it = { "chat_is_being_removed": ( "⛔️ Questa chat sta per" " essere eliminata..." ), "args": ( "🚫 Gli argomenti sono" " sbagliati" ), "chat_not_found": ( "🚫 Chat non trovata" ), "tmp_cancelled": ( " La chat" " {} vivrà per sempre!" ), "delete_error": ( "⛔️ Si è verificato un" " errore durante l'eliminazione di questa chat temporanea. Per favore," " fallo manuale." ), "temp_chat_header": ( " Questa chat verrà" " eliminata {}." ), "chat_created": ( "👍 Chat {} è stata creata' ), "delete_error_me": "🚫 Errore durante l'eliminazione della chat {}", "creating": ( "🟢 Creazione chat" " temporanea..." ), "_cmd_doc_tmpchat": " - Crea nuova chat temporanea", "_cmd_doc_tmpcurrent": " - Crea nuova chat temporanea", "_cmd_doc_tmpchats": "Elenco chat temporanee", "_cmd_doc_tmpcancel": ( "[chat-id] - Disabilita l'eliminazione della chat dopo il tempo" " specificato." ), "_cmd_doc_tmpctime": ( " - Modifica il tempo di eliminazione della chat" ), "_cls_doc": "Crea chat temporanee per evitare la spazzatura in Telegram.", } strings_es = { "chat_is_being_removed": ( "⛔️ Este chat está siendo" " eliminado..." ), "args": ( "🚫 Los argumentos son" " incorrectos" ), "chat_not_found": ( "🚫 Chat no" " encontrado" ), "tmp_cancelled": ( " El chat" " {} ahora vivirá para siempre!" ), "delete_error": ( "⛔️ Se ha producido un" " error al eliminar este chat temporal. Por favor, hágalo manualmente." ), "temp_chat_header": ( " Este chat será" " eliminado {}." ), "chat_created": ( "👍 Chat {} ha sido creado' ), "delete_error_me": "🚫 Error al eliminar el chat {}", "creating": ( "🟢 Creando chat" " temporal..." ), "_cmd_doc_tmpchat": " - Crea un nuevo chat temporal", "_cmd_doc_tmpcurrent": " - Crea un nuevo chat temporal", "_cmd_doc_tmpchats": "Lista de chats temporales", "_cmd_doc_tmpcancel": ( "[chat-id] - Desactiva la eliminación del chat después del tiempo" " especificado." ), "_cmd_doc_tmpctime": ( " - Cambia el tiempo de eliminación del chat" ), "_cls_doc": "Crea chats temporales para evitar la basura en Telegram.", } strings_fr = { "chat_is_being_removed": ( "⛔️ Ce chat est en train" " d'être supprimé..." ), "args": ( "🚫 Les arguments sont" " incorrects" ), "chat_not_found": ( "🚫 Chat introuvable" ), "tmp_cancelled": ( " Le chat" " {} vivra maintenant pour toujours!" ), "delete_error": ( "⛔️ Une erreur s'est" " produite lors de la suppression de ce chat temporaire. S'il vous plaît," " faites-le manuellement." ), "temp_chat_header": ( " Ce chat sera" " définitivement supprimé {}." ), "chat_created": ( "👍 Chat {} a été créé' ), "delete_error_me": ( "🚫 Une erreur s'est produite lors de la suppression du chat {}" ), "creating": ( "🟢 Création du chat" " temporaire..." ), "_cmd_doc_tmpchat": " - Crée un nouveau chat temporaire", "_cmd_doc_tmpcurrent": " - Crée un nouveau chat temporaire", "_cmd_doc_tmpchats": "Liste des chats temporaires", "_cmd_doc_tmpcancel": ( "[chat-id] - Désactive la suppression du chat après le délai spécifié." ), "_cmd_doc_tmpctime": ( " - Modifie le temps de suppression du chat" ), "_cls_doc": "Crée des chats temporaires pour éviter les déchets dans Telegram.", } strings_kk = { "chat_is_being_removed": ( "⛔️ Бұл сөйлеу" " өшірілуде..." ), "args": ( "🚫 Аргументтер дұрыс" " емес" ), "chat_not_found": ( "🚫 Сөйлеу табылмады" ), "tmp_cancelled": ( " Сөйлеу" " {} қазірдің күніне дейін өмір сүрер!" ), "delete_error": ( "⛔️ Осы уақыттың сөйлеуін" " жою кезінде қате пайда болды. Өтінемін, оны қолмен орындаңыз." ), "temp_chat_header": ( " Бұл сөйлеу өшіріледі" " {}." ), "chat_created": ( "👍 Сөйлеу {} жасалды' ), "delete_error_me": "🚫 Сөйлеуді жою кезінде қате пайда болды {}", "creating": ( "🟢 Уақытша сөйлеу" " жасау..." ), "_cmd_doc_tmpchat": "<уақыт> <атауы> - Жаңа уақытша сөйлеу жасау", "_cmd_doc_tmpcurrent": "<уақыт> - Жаңа уақытша сөйлеу жасау", "_cmd_doc_tmpchats": "Уақытша сөйлеулер тізімі", "_cmd_doc_tmpcancel": ( "[сөйлеу-ID] - Уақыт аяқталғаннан кейін сөйлеуді жоюды өшіру." ), "_cmd_doc_tmpctime": "<сөйлеу_ID> <жаңа уақыт> - Сөйлеуді жою уақытын өзгерту", "_cls_doc": "Telegramдағы тығыздықты алу үшін уақытша сөйлеулер жасайды.", } def __init__(self): self._chats: typing.Dict[str, TmpChatInfo] = None async def client_ready(self): self._chats = self.pointer("chats", {}, item_type=TmpChatInfo) @staticmethod def extract_time(t: str) -> int: """ Tries to export time from text """ try: if not str(t)[:-1].isdigit(): return 0 if "d" in str(t): t = int(t[:-1]) * 60 * 60 * 24 if "h" in str(t): t = int(t[:-1]) * 60 * 60 if "m" in str(t): t = int(t[:-1]) * 60 if "s" in str(t): t = int(t[:-1]) t = int(re.sub(r"[^0-9]", "", str(t))) except ValueError: return 0 return t @loader.loop(interval=60, autostart=True) async def chats_handler_async(self): for chat, info in dict(self._chats).items(): if info.until > time.time(): continue try: await self._client.send_message( int(chat), self.strings("chat_is_being_removed"), ) await asyncio.sleep(1) await self._client(DeleteChannelRequest(int(chat))) except Exception: logger.exception("Failed to delete chat") await self.inline.bot.send_message( self._tg_id, self.strings("delete_error_me").format( utils.escape_html(info.title) ), parse_mode="HTML", disable_web_page_preview=True, ) self._chats.pop(chat) @loader.command() async def tmpchat(self, message: Message): """