mirror of
https://github.com/MuRuLOSE/limoka.git
synced 2026-06-16 14:34:17 +02:00
Commited backup
This commit is contained in:
216
KorenbZla/HikkaModules/AuroraAFK.py
Normal file
216
KorenbZla/HikkaModules/AuroraAFK.py
Normal file
@@ -0,0 +1,216 @@
|
||||
# * _ __ __ _ _
|
||||
# * / \ _ _ _ __ ___ _ __ __ _| \/ | ___ __| |_ _| | ___ ___
|
||||
# * / _ \| | | | '__/ _ \| '__/ _` | |\/| |/ _ \ / _` | | | | |/ _ \/ __|
|
||||
# * / ___ \ |_| | | | (_) | | | (_| | | | | (_) | (_| | |_| | | __/\__ \
|
||||
# * /_/ \_\__,_|_| \___/|_| \__,_|_| |_|\___/ \__,_|\__,_|_|\___||___/
|
||||
# *
|
||||
# * © Copyright 2024
|
||||
# *
|
||||
# * https://t.me/AuroraModules
|
||||
# *
|
||||
# * 🔒 Code is licensed under GNU AGPLv3
|
||||
# * 🌐 https://www.gnu.org/licenses/agpl-3.0.html
|
||||
# * ⛔️ You CANNOT edit this file without direct permission from the author.
|
||||
# * ⛔️ You CANNOT distribute this file if you have modified it without the direct permission of the author.
|
||||
|
||||
# Name: AuroraAFK
|
||||
# Author: dend1yy | Felix?
|
||||
# Commands:
|
||||
# .afk | .removestatus | .setstatus | .unafk
|
||||
# scope: hikka_only
|
||||
# meta developer: @AuroraModules
|
||||
|
||||
# meta pic: https://i.postimg.cc/Hx3Zm8rB/logo.png
|
||||
# meta banner: https://te.legra.ph/file/f35de08579b3bd2235bc4.jpg
|
||||
|
||||
__version__ = (1, 0, 3)
|
||||
|
||||
import datetime
|
||||
import logging
|
||||
import time
|
||||
from telethon import types, functions # type: ignore
|
||||
from .. import loader, utils
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@loader.tds
|
||||
class AuroraAFKMod(loader.Module):
|
||||
"""Your personal assistant to while you are in AFK mode"""
|
||||
|
||||
strings = {
|
||||
"name": "AuroraAFK",
|
||||
"gone": "<b><emoji document_id=5287692511945437157>✅</emoji> You have successfully entered AFK mode!</b>",
|
||||
"back": "<b><emoji document_id=5287692511945437157>✅</emoji> You have successfully exited AFK mode!</b>",
|
||||
"afk": "<b><emoji document_id=5287613458777387650>😴</emoji> I'm currently in AFK\n<emoji document_id=5287737368583876982>🌀</emoji> Was online <code>{}</code> ago</b>",
|
||||
"afk_reason": "<b><emoji document_id=5287613458777387650>😴</emoji> I'm currently in AFK\n<emoji document_id=5287737368583876982>🌀</emoji> Was online <code>{}</code> ago\n<emoji document_id=5445161912985724546>✏️</emoji> Reason: <i>{}</i></b>",
|
||||
"status_added": "<b><emoji document_id=5285372392086976148>🦋</emoji> Status successfully set!</b>",
|
||||
"status_removed": "<b><emoji document_id=5879896690210639947>🗑</emoji> Status successfully removed!</b>",
|
||||
"no_user": "<b><emoji document_id=5287611315588707430>❌</emoji> Failed to get user information.</b>",
|
||||
"no_previous_status": "<b><emoji document_id=5287740598399285194>😵💫</emoji> Previous nickname not found.</b>",
|
||||
}
|
||||
|
||||
strings_ru = {
|
||||
"gone": "<b><emoji document_id=5287692511945437157>✅</emoji> Вы успешно вошли в AFK режим!</b>",
|
||||
"back": "<b><emoji document_id=5287692511945437157>✅</emoji> Вы успешно вышли из AFK режима!</b>",
|
||||
"afk": "<b><emoji document_id=5287613458777387650>😴</emoji> Сейчас я нахожусь в AFK\n<emoji document_id=5287737368583876982>🌀</emoji> Был в сети <code>{}</code> назад</b>",
|
||||
"afk_reason": "<b><emoji document_id=5287613458777387650>😴</emoji> Сейчас я нахожусь в AFK\n<emoji document_id=5287737368583876982>🌀</emoji> Был в сети <code>{}</code> назад\n<emoji document_id=5445161912985724546>✏️</emoji> Причина: <i>{}</i></b>",
|
||||
"status_added": "<b><emoji document_id=5285372392086976148>🦋</emoji> Статус успешно установлен!</b>",
|
||||
"status_removed": "<b><emoji document_id=5879896690210639947>🗑</emoji> Статус успешно удалён!</b>",
|
||||
"no_user": "<b><emoji document_id=5287611315588707430>❌</emoji> Не удалось получить информацию о пользователе.</b>",
|
||||
"no_previous_status": "<b><emoji document_id=5287740598399285194>😵💫</emoji> Предыдущий ник не найден.</b>",
|
||||
}
|
||||
|
||||
strings_uz = {
|
||||
"gone": "<b><emoji document_id=5287692511945437157>✅</emoji> AFK holatiga muvaffaqiyatli kirdingiz!</b>",
|
||||
"back": "<b><emoji document_id=5287692511945437157>✅</emoji> AFK rejimidan muvaffaqiyatli chiqdingiz!</b>",
|
||||
"afk": "<b><emoji document_id=5287613458777387650>😴</emoji> Hozir men AFK holatida\n<emoji document_id=5287737368583876982>🌀</emoji> <code>{}</code> avval onlayn bo'lgan</b>",
|
||||
"afk_reason": "<b><emoji document_id=5287613458777387650>😴</emoji> Hozir men AFK holatida\n<emoji document_id=5287737368583876982>🌀</emoji> <code>{}</code> avval onlayn bo'lgan\n<emoji document_id=5445161912985724546>✏️</emoji> Sabab: <i>{}</i></b>",
|
||||
"status_added": "<b><emoji document_id=5285372392086976148>🦋</emoji> Status muvaffaqiyatli o'rnatildi!</b>",
|
||||
"status_removed": "<b><emoji document_id=5879896690210639947>🗑</emoji> Status muvaffaqiyatli olib tashlandi!</b>",
|
||||
"no_user": "<b><emoji document_id=5287611315588707430>❌</emoji> Foydalanuvchi ma'lumotlari olishda xatolik.</b>",
|
||||
"no_previous_status": "<b><emoji document_id=5287740598399285194>😵💫</emoji> Avvalgi nom topilmadi.</b>",
|
||||
}
|
||||
|
||||
strings_de = {
|
||||
"gone": "<b><emoji document_id=5287692511945437157>✅</emoji> Du hast den AFK-Modus erfolgreich aktiviert!</b>",
|
||||
"back": "<b><emoji document_id=5287692511945437157>✅</emoji> Du hast den AFK-Modus erfolgreich deaktiviert!</b>",
|
||||
"afk": "<b><emoji document_id=5287613458777387650>😴</emoji> Ich bin derzeit im AFK\n<emoji document_id=5287737368583876982>🌀</emoji> War vor <code>{}</code> online</b>",
|
||||
"afk_reason": "<b><emoji document_id=5287613458777387650>😴</emoji> Ich bin derzeit im AFK\n<emoji document_id=5287737368583876982>🌀</emoji> War vor <code>{}</code> online\n<emoji document_id=5445161912985724546>✏️</emoji> Grund: <i>{}</i></b>",
|
||||
"status_added": "<b><emoji document_id=5285372392086976148>🦋</emoji> Status erfolgreich gesetzt!</b>",
|
||||
"status_removed": "<b><emoji document_id=5879896690210639947>🗑</emoji> Status erfolgreich entfernt!</b>",
|
||||
"no_user": "<b><emoji document_id=5287611315588707430>❌</emoji> Benutzerinformationen konnten nicht abgerufen werden.</b>",
|
||||
"no_previous_status": "<b><emoji document_id=5287740598399285194>😵💫</emoji> Vorheriger Spitzname nicht gefunden.</b>",
|
||||
}
|
||||
|
||||
strings_es = {
|
||||
"gone": "<b><emoji document_id=5287692511945437157>✅</emoji> ¡Has entrado correctamente en el modo AFK!</b>",
|
||||
"back": "<b><emoji document_id=5287692511945437157>✅</emoji> ¡Has salido correctamente del modo AFK!</b>",
|
||||
"afk": "<b><emoji document_id=5287613458777387650>😴</emoji> Actualmente estoy en AFK\n<emoji document_id=5287737368583876982>🌀</emoji> Estuve en línea hace <code>{}</code></b>",
|
||||
"afk_reason": "<b><emoji document_id=5287613458777387650>😴</emoji> Actualmente estoy en AFK\n<emoji document_id=5287737368583876982>🌀</emoji> Estuve en línea hace <code>{}</code>\n<emoji document_id=5445161912985724546>✏️</emoji> Razón: <i>{}</i></b>",
|
||||
"status_added": "<b><emoji document_id=5285372392086976148>🦋</emoji> ¡Estado establecido correctamente!</b>",
|
||||
"status_removed": "<b><emoji document_id=5879896690210639947>🗑</emoji> ¡Estado eliminado correctamente!</b>",
|
||||
"no_user": "<b><emoji document_id=5287611315588707430>❌</emoji> No se pudieron obtener las información del usuario.</b>",
|
||||
"no_previous_status": "<b><emoji document_id=5287740598399285194>😵💫</emoji> Nombre de usuario anterior no encontrado.</b>",
|
||||
}
|
||||
|
||||
async def client_ready(self, client, db):
|
||||
self.client = client
|
||||
self._db = db
|
||||
self._me = await client.get_me()
|
||||
|
||||
@loader.command(
|
||||
ru_doc="[reason] - Установить режим AFK",
|
||||
uz_doc="[reason] - AFK holatini sozlash",
|
||||
de_doc="[reason] - AFK-Modusstatus setzen",
|
||||
es_doc="[reason] - Establecer estado de modo AFK"
|
||||
)
|
||||
async def afk(self, message):
|
||||
"""[reason] - Set AFK mode status"""
|
||||
if utils.get_args_raw(message):
|
||||
self._db.set(__name__, "afk", utils.get_args_raw(message))
|
||||
else:
|
||||
self._db.set(__name__, "afk", True)
|
||||
self._db.set(__name__, "gone", time.time())
|
||||
self._db.set(__name__, "ratelimit", [])
|
||||
await self.allmodules.log("afk", data=utils.get_args_raw(message) or None)
|
||||
await utils.answer(message, self.strings("gone", message))
|
||||
|
||||
@loader.command(
|
||||
ru_doc="Выйти из режима AFK",
|
||||
uz_doc="AFK rejimidan chiqish",
|
||||
de_doc="Verlassen des AFK-Modus",
|
||||
es_doc="Salir del modo AFK"
|
||||
)
|
||||
async def unafk(self, message):
|
||||
"""Exit AFK mode"""
|
||||
self._db.set(__name__, "afk", False)
|
||||
self._db.set(__name__, "gone", None)
|
||||
self._db.set(__name__, "ratelimit", [])
|
||||
await self.allmodules.log("unafk")
|
||||
await utils.answer(message, self.strings("back", message))
|
||||
|
||||
@loader.command(
|
||||
ru_doc="Установить статус AFK",
|
||||
uz_doc="AFK holatini sozlash",
|
||||
de_doc="Setzt den AFK-Status",
|
||||
es_doc="Establece el estado AFK"
|
||||
)
|
||||
async def setstatus(self, message):
|
||||
"""Set the AFK status"""
|
||||
user = await utils.get_user(message)
|
||||
if user:
|
||||
current_last_name = user.last_name if user.last_name else ""
|
||||
|
||||
if " || AFK" in current_last_name:
|
||||
await utils.answer(message, self.strings["status_added"].format(name=current_last_name))
|
||||
return
|
||||
|
||||
new_last_name = current_last_name + " || AFK"
|
||||
try:
|
||||
await self.client(functions.account.UpdateProfileRequest(last_name=new_last_name))
|
||||
await utils.answer(message, self.strings["status_added"].format(name=new_last_name))
|
||||
except Exception as e:
|
||||
await utils.answer(message, f"<b>Ошибка при добавлении статуса: {str(e)}</b>")
|
||||
else:
|
||||
await utils.answer(message, self.strings["no_user"])
|
||||
|
||||
@loader.command(
|
||||
ru_doc="Удалить статус AFK",
|
||||
uz_doc="AFK holatini o'chirish",
|
||||
de_doc="Löscht den AFK-Status",
|
||||
es_doc="Eliminar el estado AFK"
|
||||
)
|
||||
async def removestatus(self, message):
|
||||
"""Удалить статус AFK."""
|
||||
user = await utils.get_user(message)
|
||||
if user:
|
||||
current_last_name = user.last_name if user.last_name else ""
|
||||
|
||||
if " || AFK" in current_last_name:
|
||||
try:
|
||||
previous_first_name = user.first_name if user.first_name else ""
|
||||
previous_last_name = current_last_name.replace(" || AFK", "")
|
||||
await self.client(functions.account.UpdateProfileRequest(first_name=previous_first_name, last_name=previous_last_name))
|
||||
await utils.answer(message, self.strings["status_removed"])
|
||||
except Exception as e:
|
||||
await utils.answer(message, f"<b>Ошибка при удалении статуса: {str(e)}</b>")
|
||||
else:
|
||||
await utils.answer(message, self.strings["no_previous_status"])
|
||||
else:
|
||||
await utils.answer(message, self.strings["no_user"])
|
||||
|
||||
async def watcher(self, message):
|
||||
if not isinstance(message, types.Message):
|
||||
return
|
||||
if message.mentioned or getattr(message.to_id, "user_id", None) == self._me.id:
|
||||
afk_state = self.get_afk()
|
||||
if not afk_state:
|
||||
return
|
||||
logger.debug("tagged!")
|
||||
ratelimit = self._db.get(__name__, "ratelimit", [])
|
||||
if utils.get_chat_id(message) in ratelimit:
|
||||
return
|
||||
else:
|
||||
self._db.setdefault(__name__, {}).setdefault("ratelimit", []).append(
|
||||
utils.get_chat_id(message)
|
||||
)
|
||||
self._db.save()
|
||||
user = await utils.get_user(message)
|
||||
if user.is_self or user.bot or user.verified:
|
||||
logger.debug("User is self, bot or verified.")
|
||||
return
|
||||
if self.get_afk() is False:
|
||||
return
|
||||
now = datetime.datetime.now().replace(microsecond=0)
|
||||
gone = datetime.datetime.fromtimestamp(
|
||||
self._db.get(__name__, "gone")
|
||||
).replace(microsecond=0)
|
||||
diff = now - gone
|
||||
if afk_state is True:
|
||||
ret = self.strings("afk", message).format(diff)
|
||||
elif afk_state is not False:
|
||||
ret = self.strings("afk_reason", message).format(diff, afk_state)
|
||||
await utils.answer(message, ret, reply_to=message)
|
||||
|
||||
def get_afk(self):
|
||||
return self._db.get(__name__, "afk", False)
|
||||
6379
KorenbZla/HikkaModules/AuroraBull.json
Normal file
6379
KorenbZla/HikkaModules/AuroraBull.json
Normal file
File diff suppressed because one or more lines are too long
164
KorenbZla/HikkaModules/AuroraBull.py
Normal file
164
KorenbZla/HikkaModules/AuroraBull.py
Normal file
@@ -0,0 +1,164 @@
|
||||
# * _ __ __ _ _
|
||||
# * / \ _ _ _ __ ___ _ __ __ _| \/ | ___ __| |_ _| | ___ ___
|
||||
# * / _ \| | | | '__/ _ \| '__/ _` | |\/| |/ _ \ / _` | | | | |/ _ \/ __|
|
||||
# * / ___ \ |_| | | | (_) | | | (_| | | | | (_) | (_| | |_| | | __/\__ \
|
||||
# * /_/ \_\__,_|_| \___/|_| \__,_|_| |_|\___/ \__,_|\__,_|_|\___||___/
|
||||
# *
|
||||
# * © Copyright 2024
|
||||
# *
|
||||
# * https://t.me/AuroraModules
|
||||
# *
|
||||
# * 🔒 Code is licensed under GNU AGPLv3
|
||||
# * 🌐 https://www.gnu.org/licenses/agpl-3.0.html
|
||||
# * ⛔️ You CANNOT edit this file without direct permission from the author.
|
||||
# * ⛔️ You CANNOT distribute this file if you have modified it without the direct permission of the author.
|
||||
|
||||
# Name: AuroraBull
|
||||
# Author: Felix?
|
||||
# Commands:
|
||||
# .abull | .abullspam | .abulloff
|
||||
# scope: hikka_only
|
||||
# meta developer: @AuroraModules
|
||||
|
||||
# meta pic: https://i.postimg.cc/Hx3Zm8rB/logo.png
|
||||
# meta banner: https://te.legra.ph/file/7612b5506856c1eb34c56.jpg
|
||||
|
||||
version = (1, 0, 0)
|
||||
|
||||
import json
|
||||
import aiohttp
|
||||
import asyncio
|
||||
from random import choice
|
||||
from .. import loader, utils
|
||||
from telethon.tl.types import Message # type: ignore
|
||||
|
||||
@loader.tds
|
||||
class AuroraBullMod(loader.Module):
|
||||
"""Module for insults, make the interlocutor depressed."""
|
||||
|
||||
strings = {
|
||||
"name": "AuroraBull",
|
||||
"error_key": "<b><i>Error: Key 'BullText' not found.</i></b>",
|
||||
"error_decoding": "<b><i>Error: The JSON could not be decoded.</i></b>",
|
||||
"error_uploading_data": "<b><i>Error loading data</i></b>",
|
||||
"error_valid_args": "<b><i>Please enter valid arguments!</i></b>",
|
||||
"launched": "<b><i>AuroraBull launched!</i></b>\n\n<b><i>Use <code>.abulloff</code> to stop the attack.</i></b>",
|
||||
"stopped": "<b><i>AuroraBull has stopped.</i></b>",
|
||||
}
|
||||
|
||||
strings_ru = {
|
||||
"error_key": "<b><i>Error: ключ 'BullText' не найден.</i></b>",
|
||||
"error_decoding": "<b><i>Error: не удалось декодировать JSON.</i></b>",
|
||||
"error_uploading_data": "<b><i>Ошибка при загрузке данных</i></b>",
|
||||
"error_valid_args": "<b><i>Введите корректные аргументы!</i></b>",
|
||||
"launched": "<b><i>AuroraBull запущен!</i></b>\n\n<b><i>Используйте <code>.abulloff</code>, чтобы остановить атаку.</i></b>",
|
||||
"stopped": "<b><i>AuroraBull остановлен.</i></b>",
|
||||
}
|
||||
|
||||
strings_uz = {
|
||||
"error_key": "<b><i>Error: 'BullText' калити топилмади.</i></b>",
|
||||
"error_decoding": "<b><i>Error: JSON декодлаш муваффақиятли амалга ошмади.</i></b>",
|
||||
"error_uploading_data": "<b><i>Маълумотлар юклаб олинмади</i></b>",
|
||||
"error_valid_args": "<b><i>Iltimos, to'g'ri dalillarni kiriting!</i></b>",
|
||||
"launched": "<b><i>AuroraBull ishga tushirildi!</i></b>\n\n<b><i>Hujumni toʻxtatish uchun <code>.abulloff</code> dan foydalaning.</i></b>",
|
||||
"stopped": "<b><i>AuroraBull to'xtadi.</i></b>",
|
||||
}
|
||||
|
||||
strings_de = {
|
||||
"error_key": "<b><i>Error: Der Schlüssel 'BullText' wurde nicht gefunden.</i></b>",
|
||||
"error_decoding": "<b><i>Error: JSON konnte nicht decodiert werden.</i></b>",
|
||||
"error_uploading_data": "<b><i>Fehler beim Hochladen der Daten</i></b>",
|
||||
"error_valid_args": "<b><i>Bitte geben Sie gültige Argumente ein!</i></b>",
|
||||
"launched": "<b><i>AuroraBull gestartet!</i></b>\n\n<b><i>Verwenden Sie <code>.abulloff</code>, um den Angriff zu stoppen.</i></b>",
|
||||
"stopped": "<b><i>AuroraBull hat angehalten.</i></b>",
|
||||
}
|
||||
|
||||
strings_es = {
|
||||
"error_key": "<b><i>Error: No se encontró la clave 'BullText'.</i></b>",
|
||||
"error_decoding": "<b><i>Error: No se pudo decodificar JSON.</i></b>",
|
||||
"error_uploading_data": "<b><i>Error al cargar los datos</i></b>",
|
||||
"error_valid_args": "<b><i>¡Por favor ingrese argumentos válidos!</i></b>",
|
||||
"launched": "<b><i>¡AuroraBull lanzado!</i></b>\n\n<b><i>Utiliza <code>.abulloff</code> para detener el ataque.</i></b>",
|
||||
"stopped": "<b><i>AuroraBull se ha detenido.</i></b>",
|
||||
|
||||
}
|
||||
|
||||
@loader.command(
|
||||
ru_doc="Оскорбите вашего собеседника.",
|
||||
uz_doc="Suhbatdoshingizni insult qiling.",
|
||||
de_doc="Beleidigen Sie Ihren Gesprächspartner.",
|
||||
es_doc="Insulta a tu interlocutor.",
|
||||
)
|
||||
async def abull(self, message):
|
||||
"""Insult your interlocutor"""
|
||||
url = "https://raw.githubusercontent.com/KorenbZla/HikkaModules/main/AuroraBull.json"
|
||||
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.get(url) as response:
|
||||
if response.status == 200:
|
||||
response = await response.text()
|
||||
try:
|
||||
data = json.loads(response)
|
||||
if "BullText" in data and isinstance(data["BullText"], list) and data["BullText"]:
|
||||
text = choice(data["BullText"])
|
||||
await utils.answer(message, text)
|
||||
else:
|
||||
await utils.answer(message, self.strings("error_key"))
|
||||
except json.JSONDecodeError:
|
||||
await utils.answer(message, self.strings("error_decoding"))
|
||||
else:
|
||||
await utils.answer(message, f"{self.strings('error_uploading_data')}: {response.status}")
|
||||
|
||||
@loader.command(
|
||||
ru_doc="[time] [text] - Заспамте оскорблениями вашего собеседника",
|
||||
uz_doc="[time] [text] - Suhbatdoshingizni haqorat bilan spam qiling",
|
||||
de_doc="[time] [text] - Spammen Sie Ihren Gesprächspartner mit Beleidigungen zu",
|
||||
es_doc="[time] [text] - Spamea a tu interlocutor con insultos",
|
||||
)
|
||||
async def abullspam(self, message: Message):
|
||||
"""[time] [text] - Spam your interlocutor with insults"""
|
||||
url = "https://raw.githubusercontent.com/KorenbZla/HikkaModules/main/AuroraBull.json"
|
||||
args = utils.get_args(message)
|
||||
|
||||
if not args:
|
||||
await utils.answer(message, self.strings("error_valid_args"))
|
||||
return
|
||||
else:
|
||||
self.db.set(self.strings["AuroraBull"], "state", True)
|
||||
|
||||
try:
|
||||
time = float(args[0])
|
||||
text = ' '.join(args[1:]) + " " if len(args) > 1 else ""
|
||||
except ValueError:
|
||||
await utils.answer(message, self.strings("error_valid_args"))
|
||||
return
|
||||
|
||||
await utils.answer(message, self.strings("launched"))
|
||||
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.get(url) as response:
|
||||
if response.status == 200:
|
||||
response = await response.text()
|
||||
|
||||
data = json.loads(response)
|
||||
if "BullText" in data and isinstance(data["BullText"], list) and data["BullText"]:
|
||||
while self.db.get(self.strings["AuroraBull"], "state"):
|
||||
bull_text = choice(data["BullText"])
|
||||
await message.respond(text + bull_text)
|
||||
await asyncio.sleep(time)
|
||||
else:
|
||||
await utils.answer(message, self.strings("error_key"))
|
||||
else:
|
||||
await utils.answer(message, f"{self.strings('error_uploading_data')}: {response.status}")
|
||||
|
||||
@loader.command(
|
||||
ru_doc="Остановить оскорбления",
|
||||
uz_doc="Haqoratlarni to'xtating",
|
||||
de_doc="Hört auf mit den Beleidigungen",
|
||||
es_doc="basta de insultos",
|
||||
)
|
||||
async def abulloff(self, message: Message):
|
||||
"""Stop the insults"""
|
||||
self.db.set(self.strings["AuroraBull"], "state", False)
|
||||
await utils.answer(message, self.strings("stopped"))
|
||||
return
|
||||
162
KorenbZla/HikkaModules/AuroraDonate.py
Normal file
162
KorenbZla/HikkaModules/AuroraDonate.py
Normal file
@@ -0,0 +1,162 @@
|
||||
# * _ __ __ _ _
|
||||
# * / \ _ _ _ __ ___ _ __ __ _| \/ | ___ __| |_ _| | ___ ___
|
||||
# * / _ \| | | | '__/ _ \| '__/ _` | |\/| |/ _ \ / _` | | | | |/ _ \/ __|
|
||||
# * / ___ \ |_| | | | (_) | | | (_| | | | | (_) | (_| | |_| | | __/\__ \
|
||||
# * /_/ \_\__,_|_| \___/|_| \__,_|_| |_|\___/ \__,_|\__,_|_|\___||___/
|
||||
# *
|
||||
# * © Copyright 2024
|
||||
# *
|
||||
# * https://t.me/AuroraModules
|
||||
# *
|
||||
# * 🔒 Code is licensed under GNU AGPLv3
|
||||
# * 🌐 https://www.gnu.org/licenses/agpl-3.0.html
|
||||
# * ⛔️ You CANNOT edit this file without direct permission from the author.
|
||||
# * ⛔️ You CANNOT distribute this file if you have modified it without the direct permission of the author.
|
||||
|
||||
# Name: AuroraDonate
|
||||
# Author: Felix?
|
||||
# Commands:
|
||||
# .dme
|
||||
# scope: hikka_only
|
||||
# meta developer: @AuroraModules
|
||||
|
||||
# meta pic: https://i.postimg.cc/Hx3Zm8rB/logo.png
|
||||
# meta banner: https://te.legra.ph/file/d3f0f14e90ce2f82d8f1f.jpg
|
||||
|
||||
__version__ = (1, 2, 0)
|
||||
|
||||
from hikkatl.types import Message # type: ignore
|
||||
from .. import loader, utils
|
||||
|
||||
@loader.tds
|
||||
class AuroraDonateMod(loader.Module):
|
||||
"""Module for creating a message with your details for donations"""
|
||||
|
||||
strings = {
|
||||
"name": "AuroraDonate",
|
||||
"cfg_custom_text": "Enter the custom message to be sent with your donation details.",
|
||||
"cfg_hide_text": "Enter the text that will be sent when using the '-h' argument to show hidden or private credentials.",
|
||||
"cfg_banner_url": "Enter the URL of the image to be sent with your donation details.",
|
||||
"cfg_CryptoBot": "Enter the URL to your multi-account in @CryptoBot.",
|
||||
"cfg_xRocket": "Enter the URL to your multi-account in @xRocket.",
|
||||
}
|
||||
|
||||
strings_ru = {
|
||||
"cfg_custom_text": "Введите кастомное сообщение, которое будет отправляться с вашими реквизитами для донатов.",
|
||||
"cfg_hide_text": "Введите текст, который будет отправляться при аргументе '-h', чтобы показать скрытые или приватные реквизиты.",
|
||||
"cfg_banner_url": "Введите ссылку на изображение, которое будет отправляться с вашими реквизитами для донатов.",
|
||||
"cfg_CryptoBot": "Введите ссылку на мультисчет в @CryptoBot.",
|
||||
"cfg_xRocket": "Введите ссылку на мультисчет в @xRocket.",
|
||||
}
|
||||
|
||||
strings_uz = {
|
||||
"cfg_custom_text": "Donat qilish uchun ma'lumotlaringiz bilan yuboriladigan maxsus xabarni kiriting.",
|
||||
"cfg_hide_text": "Yashirin yoki shaxsiy ma’lumotlarni ko‘rsatish uchun '-h' argumenti ishlatilganda yuboriladigan matnni kiriting.",
|
||||
"cfg_banner_url": "Donat qilish uchun ma'lumotlaringiz bilan yuboriladigan rasm havolasini kiriting.",
|
||||
"cfg_CryptoBot": "@CryptoBot dagi multischet havolasini kiriting.",
|
||||
"cfg_xRocket": "@xRocket dagi multischet havolasini kiriting.",
|
||||
}
|
||||
|
||||
strings_de = {
|
||||
"cfg_custom_text": "Geben Sie eine benutzerdefinierte Nachricht ein, die mit Ihren Spendeninformationen gesendet wird.",
|
||||
"cfg_hide_text": "Geben Sie den Text ein, der beim Argument '-h' gesendet wird, um versteckte oder private Zugangsdaten anzuzeigen.",
|
||||
"cfg_banner_url": "Geben Sie den Link zu einem Bild ein, das mit Ihren Spendeninformationen gesendet wird.",
|
||||
"cfg_CryptoBot": "Geben Sie den Link zu Ihrem Multikonto bei @CryptoBot ein.",
|
||||
"cfg_xRocket": "Geben Sie den Link zu Ihrem Multikonto bei @xRocket ein.",
|
||||
}
|
||||
|
||||
strings_es = {
|
||||
"cfg_custom_text": "Ingrese un mensaje personalizado que se enviará con sus detalles de donación.",
|
||||
"cfg_hide_text": "Introduce el texto que se enviará al usar el argumento '-h' para mostrar credenciales ocultas o privadas.",
|
||||
"cfg_banner_url": "Ingrese el enlace de la imagen que se enviará con sus detalles de donación.",
|
||||
"cfg_CryptoBot": "Ingrese el enlace a su cuenta múltiple en @CryptoBot.",
|
||||
"cfg_xRocket": "Ingrese el enlace a su cuenta múltiple en @xRocket.",
|
||||
}
|
||||
|
||||
def __init__(self):
|
||||
self.config = loader.ModuleConfig(
|
||||
loader.ConfigValue(
|
||||
"custom_text",
|
||||
None,
|
||||
lambda: self.strings["cfg_custom_text"],
|
||||
),
|
||||
loader.ConfigValue(
|
||||
"hide_text",
|
||||
None,
|
||||
lambda: self.strings["cfg_hide_text"],
|
||||
),
|
||||
loader.ConfigValue(
|
||||
"banner_url",
|
||||
"https://te.legra.ph/file/a596292807cc71508b7db.jpg",
|
||||
lambda: self.strings["cfg_banner_url"],
|
||||
validator=loader.validators.Link(),
|
||||
),
|
||||
loader.ConfigValue(
|
||||
"CryptoBot",
|
||||
None,
|
||||
lambda: self.strings["cfg_CryptoBot"],
|
||||
validator=loader.validators.Link(),
|
||||
),
|
||||
loader.ConfigValue(
|
||||
"xRocket",
|
||||
None,
|
||||
lambda: self.strings["cfg_xRocket"],
|
||||
validator=loader.validators.Link(),
|
||||
),
|
||||
)
|
||||
|
||||
@loader.command(
|
||||
ru_doc="{-h} - Открыть реквизиты для донатов",
|
||||
uz_doc="{-h} - Donatlar uchun ma'lumotlarni ochish",
|
||||
de_doc="{-h} - Details für Spenden öffnen",
|
||||
es_doc="{-h} - Abrir detalles para donaciones",
|
||||
)
|
||||
async def dme(self, message):
|
||||
"""{-h} - Open details for donations"""
|
||||
|
||||
args = utils.get_args_raw(message).split()
|
||||
|
||||
CryptoBot = self.config["CryptoBot"]
|
||||
xRocket = self.config["xRocket"]
|
||||
banner_url = self.config["banner_url"]
|
||||
custom_text = self.config["custom_text"]
|
||||
hide_text = self.config["hide_text"]
|
||||
|
||||
if custom_text is None:
|
||||
custom_text = "<b><i>Created by: @AuroraModules</i></b>"
|
||||
else:
|
||||
custom_text = custom_text
|
||||
|
||||
if args[0] == "-h":
|
||||
if hide_text is None:
|
||||
custom_text = custom_text
|
||||
else:
|
||||
custom_text = hide_text
|
||||
|
||||
if CryptoBot is None and xRocket is None:
|
||||
if banner_url is None:
|
||||
await utils.answer(message, custom_text)
|
||||
else:
|
||||
await self.client.send_file(
|
||||
message.chat_id,
|
||||
banner_url,
|
||||
caption=custom_text
|
||||
)
|
||||
else:
|
||||
await self.inline.form(
|
||||
message=message,
|
||||
text=str(custom_text),
|
||||
photo=banner_url,
|
||||
reply_markup=[
|
||||
[
|
||||
{"text": "👛 CryptoBot", "url": CryptoBot},
|
||||
{"text": "🚀 xRocket", "url": xRocket},
|
||||
],
|
||||
[
|
||||
{"text": "🔻 Закрыть", "callback": self.delete}
|
||||
],
|
||||
],
|
||||
)
|
||||
|
||||
async def delete(self, call):
|
||||
await call.delete()
|
||||
125
KorenbZla/HikkaModules/AuroraFarm.py
Normal file
125
KorenbZla/HikkaModules/AuroraFarm.py
Normal file
@@ -0,0 +1,125 @@
|
||||
# * _ __ __ _ _
|
||||
# * / \ _ _ _ __ ___ _ __ __ _| \/ | ___ __| |_ _| | ___ ___
|
||||
# * / _ \| | | | '__/ _ \| '__/ _` | |\/| |/ _ \ / _` | | | | |/ _ \/ __|
|
||||
# * / ___ \ |_| | | | (_) | | | (_| | | | | (_) | (_| | |_| | | __/\__ \
|
||||
# * /_/ \_\__,_|_| \___/|_| \__,_|_| |_|\___/ \__,_|\__,_|_|\___||___/
|
||||
# *
|
||||
# * © Copyright 2024
|
||||
# *
|
||||
# * https://t.me/AuroraModules
|
||||
# *
|
||||
# * 🔒 Code is licensed under GNU AGPLv3
|
||||
# * 🌐 https://www.gnu.org/licenses/agpl-3.0.html
|
||||
# * ⛔️ You CANNOT edit this file without direct permission from the author.
|
||||
# * ⛔️ You CANNOT distribute this file if you have modified it without the direct permission of the author.
|
||||
|
||||
# Name: AuroraFarm
|
||||
# Author: Felix?
|
||||
# Commands:
|
||||
# .afarm
|
||||
# scope: hikka_only
|
||||
# meta developer: @AuroraModules
|
||||
|
||||
# meta pic: https://i.postimg.cc/Hx3Zm8rB/logo.png
|
||||
# meta banner: https://te.legra.ph/file/903b12da5af31a1947ca8.jpg
|
||||
|
||||
__version__ = (3, 0, 0)
|
||||
|
||||
import asyncio
|
||||
from .. import loader, utils
|
||||
|
||||
@loader.tds
|
||||
class AuroraFarmMod(loader.Module):
|
||||
"""Automatic progress farm at @kynimeister_bot"""
|
||||
|
||||
strings = {
|
||||
"name": "AuroraFarm",
|
||||
"status": "<emoji document_id=6028435952299413210>ℹ️</emoji> Module operation status",
|
||||
"s_1": "Active.",
|
||||
"s_0": "Inactive.",
|
||||
"on": "Activated.",
|
||||
"off": "Deactivated.",
|
||||
"n_args": "<emoji document_id=5285372392086976148>🚫</emoji> Specify the arguments",
|
||||
}
|
||||
|
||||
strings_ru = {
|
||||
"status": "<emoji document_id=6028435952299413210>ℹ️</emoji> Статус работы модуля",
|
||||
"s_1": "Активно.",
|
||||
"s_0": "Неактивно.",
|
||||
"on": "Активировано.",
|
||||
"off": "Деактивировано.",
|
||||
"n_args": "<emoji document_id=5285372392086976148>🚫</emoji> Укажите аргументы",
|
||||
}
|
||||
|
||||
strings_uz = {
|
||||
"status": "<emoji document_id=6028435952299413210>ℹ️</emoji> Modul ishlash holati",
|
||||
"s_1": "Faol.",
|
||||
"s_0": "Faol emas.",
|
||||
"on": "Faollashtirildi.",
|
||||
"off": "O'chirildi.",
|
||||
"n_args": "<emoji document_id=5285372392086976148>🚫</emoji> Argumentlarni kiriting",
|
||||
}
|
||||
|
||||
strings_de = {
|
||||
"status": "<emoji document_id=6028435952299413210>ℹ️</emoji> Modulbetriebsstatus",
|
||||
"s_1": "Aktiv.",
|
||||
"s_0": "Inaktiv.",
|
||||
"on": "Aktiviert.",
|
||||
"off": "Deaktiviert.",
|
||||
"n_args": "<emoji document_id=5285372392086976148>🚫</emoji> Geben Sie die Argumente an",
|
||||
}
|
||||
|
||||
strings_es = {
|
||||
"status": "<emoji document_id=6028435952299413210>ℹ️</emoji> Estado de operación del módulo",
|
||||
"s_1": "Activo.",
|
||||
"s_0": "Inactivo.",
|
||||
"on": "Activado.",
|
||||
"off": "Desactivado.",
|
||||
"n_args": "<emoji document_id=5285372392086976148>🚫</emoji> Especifica los argumentos",
|
||||
|
||||
}
|
||||
|
||||
async def client_ready(self, client, db):
|
||||
self.db = db
|
||||
self.client = client
|
||||
self.db.get("AuroraFarm", "status", False)
|
||||
|
||||
@loader.command(
|
||||
ru_doc="{on/off} - включить или выключить автоматическую фарминг",
|
||||
uz_doc="{on/off} - avtomatik fermani yoqish yoki o'chirish",
|
||||
de_doc="{on/off} - Auto-Farm ein- oder ausschalten",
|
||||
es_doc="{on/off} - activar o desactivar la auto-granja",
|
||||
)
|
||||
async def afarm(self, message):
|
||||
"""{on/off} - turn auto farm on or off"""
|
||||
args = utils.get_args_raw(message).lower()
|
||||
|
||||
status_result_True = self.db.get("AuroraFarm", "status", True)
|
||||
if status_result_True:
|
||||
status_result = self.strings("s_1")
|
||||
else:
|
||||
status_result = self.strings("s_0")
|
||||
|
||||
if not args:
|
||||
status = self.strings("status")
|
||||
await utils.answer(message, f"<b>{status}: <i>{status_result}</i></b>")
|
||||
return
|
||||
|
||||
if args == "on":
|
||||
args_s = self.strings("on")
|
||||
self.db.set("AuroraFarm", "status", True)
|
||||
await utils.answer(message, f"<emoji document_id=5287692511945437157>✅</emoji> <b>AutoFarmUniversal: <i>{args_s}</i></b>")
|
||||
elif args == "off":
|
||||
args_s = self.strings("off")
|
||||
self.db.set("AuroraFarm", "status", False)
|
||||
await utils.answer(message, f"<emoji document_id=5287692511945437157>✅</emoji> <b>AutoFarmUniversal: <i>{args_s}</i></b>")
|
||||
else:
|
||||
n_args = self.strings("n_args")
|
||||
await utils.answer(message, f"<b>{n_args}</b>")
|
||||
return
|
||||
|
||||
while self.db.get("AuroraFarm", "status"):
|
||||
bot_id = 6814754616
|
||||
text = "Куни"
|
||||
await message.client.send_message(bot_id, text)
|
||||
await asyncio.sleep(14444)
|
||||
304
KorenbZla/HikkaModules/AuroraFeedBack.py
Normal file
304
KorenbZla/HikkaModules/AuroraFeedBack.py
Normal file
@@ -0,0 +1,304 @@
|
||||
# * _ __ __ _ _
|
||||
# * / \ _ _ _ __ ___ _ __ __ _| \/ | ___ __| |_ _| | ___ ___
|
||||
# * / _ \| | | | '__/ _ \| '__/ _` | |\/| |/ _ \ / _` | | | | |/ _ \/ __|
|
||||
# * / ___ \ |_| | | | (_) | | | (_| | | | | (_) | (_| | |_| | | __/\__ \
|
||||
# * /_/ \_\__,_|_| \___/|_| \__,_|_| |_|\___/ \__,_|\__,_|_|\___||___/
|
||||
# *
|
||||
# * © Copyright 2024
|
||||
# *
|
||||
# * https://t.me/AuroraModules
|
||||
# *
|
||||
# * 🔒 Code is licensed under GNU AGPLv3
|
||||
# * 🌐 https://www.gnu.org/licenses/agpl-3.0.html
|
||||
# * ⛔️ You CANNOT edit this file without direct permission from the author.
|
||||
# * ⛔️ You CANNOT distribute this file if you have modified it without the direct permission of the author.
|
||||
|
||||
# Name: AuroraFeedBack
|
||||
# Author: Felix? || n3rcy
|
||||
# Commands:
|
||||
# .flink | .banfeedback | .unbanfeedback
|
||||
# scope: hikka_only
|
||||
# meta developer: @AuroraModules & @nercymods
|
||||
|
||||
# meta pic: https://i.postimg.cc/Hx3Zm8rB/logo.png
|
||||
# meta banner: https://te.legra.ph/file/05a519da50f993b950260.jpg
|
||||
|
||||
__version__ = (1, 0, 2)
|
||||
|
||||
from aiogram.types import Message as AiogramMessage
|
||||
from aiogram.types import CallbackQuery as AiogramCallbackQuery
|
||||
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup, InputMediaPhoto
|
||||
from ..inline.types import InlineCall # type: ignore
|
||||
from html import escape
|
||||
from .. import loader, utils
|
||||
|
||||
@loader.tds
|
||||
class AuroraFeedBackMod(loader.Module):
|
||||
"""Multifunctional feedback bot."""
|
||||
|
||||
strings = {
|
||||
"name": "AuroraFeedBack",
|
||||
"new_m": "🗣 New message from",
|
||||
"not_text": "🔎 The text was not found.",
|
||||
"waiting_answer": "⏳ Waiting for answer to user",
|
||||
"flink": "Here is my link to the feedback bot",
|
||||
"owner_answer": "🗣 Owner's Response",
|
||||
"successfully_send": "💬 Message successfully sent",
|
||||
"not_arg": "❌ No UserID argument provided",
|
||||
"successfully_ban": "✅ User successfully banned",
|
||||
"successfully_unban": "✅ User successfully unbanned",
|
||||
"already_banned": "🚫 User is already banned",
|
||||
"not_in_ban": "✅ User is not in the ban list",
|
||||
"cfg_mode": "Enable/Disable feedback bot functionality",
|
||||
"cfg_custom_text": "Enter custom greeting text",
|
||||
"cfg_no_meta": "Enter custom text for /nometa",
|
||||
"cfg_no_meta_baner": "Enter custom link for meta-banner",
|
||||
}
|
||||
|
||||
strings_ru = {
|
||||
"new_m": "🗣 Новое сообщение от",
|
||||
"not_text": "🔎 Текст не найден.",
|
||||
"waiting_answer": "⏳ Ожидание ответа пользователя",
|
||||
"flink": "Вот моя ссылка на feedback бота",
|
||||
"owner_answer": "🗣 Ответ владельца",
|
||||
"successfully_send": "💬 Сообщение успешно отправлено",
|
||||
"not_arg": "❌ Не указан UserID",
|
||||
"successfully_ban": "✅ Пользователь успешно заблокирован",
|
||||
"successfully_unban": "✅ Пользователь успешно разблокирован",
|
||||
"already_banned": "🚫 Пользователь уже заблокирован",
|
||||
"not_in_ban": "✅ Пользователь не находится в списке заблокированных",
|
||||
"cfg_mode": "Включить/выключить функционал feedback бота",
|
||||
"cfg_custom_text": "Введите кастомный текст для приветствия",
|
||||
"cfg_no_meta": "Введите кастомный текст для команды /nometa",
|
||||
"cfg_no_meta_baner": "Введите кастомную ссылку на мета-баннер",
|
||||
}
|
||||
|
||||
strings_uz = {
|
||||
"new_m": "🗣 Yangi xabar",
|
||||
"not_text": "🔎 Matn topilmadi.",
|
||||
"waiting_answer": "⏳ Foydalanuvchidan javob kutilmoqda",
|
||||
"flink": "Bu mening feedback botim havolam",
|
||||
"owner_answer": "🗣 Egasi javobi",
|
||||
"successfully_send": "💬 Xabar muvaffaqiyatli yuborildi",
|
||||
"not_arg": "❌ UserID argument kiritilmagan",
|
||||
"successfully_ban": "✅ Foydalanuvchi muvaffaqiyatli bloklandi",
|
||||
"successfully_unban": "✅ Foydalanuvchi muvaffaqiyatli ochib tashlandi",
|
||||
"already_banned": "🚫 Foydalanuvchi allaqachon bloklangan",
|
||||
"not_in_ban": "✅ Foydalanuvchi blok ro'yxatida yo'q",
|
||||
"cfg_mode": "Feedback bot funktsiyasini yoqish/yopish",
|
||||
"cfg_custom_text": "Xush kelibsiz matnini kiriting",
|
||||
"cfg_no_meta": "/nometa uchun maxsus matnni kiriting",
|
||||
"cfg_no_meta_baner": "Meta-banner uchun maxsus havolani kiriting",
|
||||
}
|
||||
|
||||
strings_de = {
|
||||
"new_m": "🗣 Neue Nachricht von",
|
||||
"not_text": "🔎 Der Text wurde nicht gefunden.",
|
||||
"waiting_answer": "⏳ Warten auf die Antwort des Benutzers",
|
||||
"flink": "Hier ist mein Link zum Feedback-Bot",
|
||||
"owner_answer": "🗣 Antwort des Eigentümers",
|
||||
"successfully_send": "💬 Nachricht erfolgreich gesendet",
|
||||
"not_arg": "❌ Kein UserID-Argument angegeben",
|
||||
"successfully_ban": "✅ Benutzer erfolgreich gesperrt",
|
||||
"successfully_unban": "✅ Benutzer erfolgreich entsperrt",
|
||||
"already_banned": "🚫 Benutzer ist bereits gesperrt",
|
||||
"not_in_ban": "✅ Benutzer befindet sich nicht in der Sperrliste",
|
||||
"cfg_mode": "Feedback-Bot-Funktionalität aktivieren/deaktivieren",
|
||||
"cfg_custom_text": "Geben Sie benutzerdefinierten Begrüßungstext ein",
|
||||
"cfg_no_meta": "Geben Sie benutzerdefinierten Text für /nometa ein",
|
||||
"cfg_no_meta_baner": "Geben Sie einen benutzerdefinierten Link für den Meta-Banner ein",
|
||||
}
|
||||
|
||||
strings_es = {
|
||||
"new_m": "🗣 Nuevo mensaje de",
|
||||
"not_text": "🔎 No se encontró el texto.",
|
||||
"waiting_answer": "⏳ Esperando la respuesta del usuario",
|
||||
"flink": "Aquí está mi enlace al bot de retroalimentación",
|
||||
"owner_answer": "🗣 Respuesta del propietario",
|
||||
"successfully_send": "💬 Mensaje enviado con éxito",
|
||||
"not_arg": "❌ No se proporcionó el argumento UserID",
|
||||
"successfully_ban": "✅ Usuario bloqueado correctamente",
|
||||
"successfully_unban": "✅ Usuario desbloqueado correctamente",
|
||||
"already_banned": "🚫 El usuario ya está bloqueado",
|
||||
"not_in_ban": "✅ El usuario no está en la lista de bloqueados",
|
||||
"cfg_mode": "Activar/Desactivar la funcionalidad del bot de retroalimentación",
|
||||
"cfg_custom_text": "Ingrese texto de saludo personalizado",
|
||||
"cfg_no_meta": "Ingrese texto personalizado para /nometa",
|
||||
"cfg_no_meta_baner": "Ingrese el enlace personalizado para el meta-banner",
|
||||
}
|
||||
|
||||
def __init__(self):
|
||||
self.config = loader.ModuleConfig(
|
||||
loader.ConfigValue(
|
||||
"mode",
|
||||
True,
|
||||
lambda: self.strings["cfg_mode"],
|
||||
validator=loader.validators.Boolean(),
|
||||
),
|
||||
loader.ConfigValue(
|
||||
"start_custom_text",
|
||||
None,
|
||||
lambda: self.strings["cfg_custom_text"],
|
||||
),
|
||||
loader.ConfigValue(
|
||||
"no_meta",
|
||||
None,
|
||||
lambda: self.strings["cfg_no_meta"],
|
||||
),
|
||||
loader.ConfigValue(
|
||||
"no_meta_baner",
|
||||
"https://te.legra.ph/file/91a54dee84cf1ec5990fd.jpg",
|
||||
lambda: self.strings["cfg_no_meta_baner"],
|
||||
validator=loader.validators.Link(),
|
||||
),
|
||||
)
|
||||
|
||||
async def on_dlmod(self, client, db):
|
||||
self.db.set("AuroraFeedBackMod", "ban_list", [])
|
||||
|
||||
async def client_ready(self, client, db):
|
||||
self.forwarding_enabled = {}
|
||||
self._ban_list = self.db.get("AuroraFeedBackMod", "ban_list")
|
||||
self._name = utils.escape_html((await client.get_me()).first_name)
|
||||
self.db.set("AuroraFeedBackMod", "state", "done")
|
||||
|
||||
@loader.command(
|
||||
ru_doc="- Получить ссылку на feedback бота",
|
||||
uz_doc="- Feedback botga havolani olish",
|
||||
de_doc="- Erhalten Sie einen Link zum Feedback-Bot",
|
||||
es_doc="- Obtener un enlace al bot de retroalimentación",
|
||||
)
|
||||
async def flink(self, message):
|
||||
"""- Get a link to the feedback bot"""
|
||||
slinkbot = f"{self.strings['flink']}: https://t.me/{self.inline.bot_username}?start=AuroraFeedBack"
|
||||
await utils.answer(message, slinkbot)
|
||||
|
||||
@loader.command(
|
||||
ru_doc="[UserID] - Заблокировать пользователю feedback бота",
|
||||
uz_doc="[UserID] - Feedback botga foydalanuvchi kirishini bloklang",
|
||||
de_doc="[UserID] - Blockiere den Zugriff des Benutzers auf den Feedback-Bot",
|
||||
es_doc="[UserID] - Bloquear el acceso del usuario al bot de retroalimentación",
|
||||
)
|
||||
async def banfeedback(self, message):
|
||||
"""[UserID] - Block the feedback bot user"""
|
||||
user_id = utils.get_args_raw(message)
|
||||
if not user_id:
|
||||
await utils.answer(message, self.strings["not_arg"])
|
||||
else:
|
||||
user_id = int(user_id)
|
||||
if user_id not in self._ban_list:
|
||||
self._ban_list.append(user_id)
|
||||
self.db.set("AuroraFeedBackMod", "ban_list", self._ban_list)
|
||||
await utils.answer(message, self.strings["successfully_ban"])
|
||||
else:
|
||||
await utils.answer(message, self.strings["already_banned"])
|
||||
|
||||
@loader.command(
|
||||
ru_doc="[UserID] - Разблокировать пользователю feedback бота",
|
||||
uz_doc="[UserID] - Feedback bot foydalanuvchisini ochib tashlash",
|
||||
de_doc="[UserID] - Feedback-Bot-Benutzer entsperren",
|
||||
es_doc="[UserID] - Desbloquear al usuario del bot de retroalimentación",
|
||||
)
|
||||
async def unbanfeedback(self, message):
|
||||
"""[UserID] - Unblock the feedback bot user"""
|
||||
|
||||
user_id = utils.get_args_raw(message)
|
||||
if not user_id:
|
||||
await utils.answer(message, self.strings["not_arg"])
|
||||
else:
|
||||
user_id = int(user_id)
|
||||
if user_id in self._ban_list:
|
||||
self._ban_list.remove(user_id)
|
||||
self.db.set("AuroraFeedBackMod", "ban_list", self._ban_list)
|
||||
await utils.answer(message, self.strings["successfully_unban"])
|
||||
else:
|
||||
await utils.answer(message, self.strings["not_in_ban"])
|
||||
|
||||
async def aiogram_watcher(self, message: AiogramMessage):
|
||||
if self.config["mode"] is False:
|
||||
return
|
||||
|
||||
if message.from_user.id in list(self.db.get("AuroraFeedBackMod", "ban_list")):
|
||||
return
|
||||
|
||||
if message.text == "/start AuroraFeedBack":
|
||||
if self.config["start_custom_text"] == None:
|
||||
text = "Добро пожаловать в Aurora Feedback Bot!\nПожалуйста, ознакомтесь с /nometa"
|
||||
else:
|
||||
text = self.config["start_custom_text"]
|
||||
await message.answer(text)
|
||||
return
|
||||
|
||||
elif message.text == "/nometa":
|
||||
if self.config["no_meta"] == None:
|
||||
meta_text = "<b>🫦 Уважаемый пользователь!</b>\nПожалуйста, не задавайте мне вопросы такие, как:\n\n«Привет» , «Какие дела?» , «Что делаешь?» , «Чем занимаешься?» и т.д.\n\nЕсли вы хотите у меня что-то спросить, спрашивайте по делу, а также всю суть вопроса опишите в одном сообщении."
|
||||
else:
|
||||
meta_text = self.config["no_meta"]
|
||||
if self.config["no_meta_baner"] == None:
|
||||
await self.inline.bot.send_message(message.from_user.id, meta_text)
|
||||
else:
|
||||
await self.inline.bot.send_photo(
|
||||
message.from_user.id,
|
||||
self.config["no_meta_baner"],
|
||||
caption=meta_text,
|
||||
)
|
||||
return
|
||||
|
||||
if message.from_user.id == self.tg_id:
|
||||
state = self.db.get("AuroraFeedBackMod", "state")
|
||||
if state.startswith('waiting_'):
|
||||
to_id = int(state.split('_')[1])
|
||||
waiting_message_id = int(state.split('_')[2])
|
||||
custom_text = f'{self.strings["owner_answer"]}:\n\n{message.text}'
|
||||
await self.inline.bot.send_message(to_id, custom_text)
|
||||
await self.inline.bot.delete_message(message.chat.id, waiting_message_id)
|
||||
await self.inline.bot.send_message(self.tg_id, f'{self.strings["successfully_send"]}')
|
||||
self.db.set("AuroraFeedBackMod", "state", "done")
|
||||
return
|
||||
|
||||
original_text = message.caption if message.caption else message.text
|
||||
user_id = message.from_user.id
|
||||
WriteInPM =f'<b><a href="tg://user?id={user_id}">✏️Write in PM</a></b>'
|
||||
custom_text = f"{self.strings['new_m']} {escape(message.from_user.first_name)}:\n\n{escape(original_text) if original_text is not None else {self.strings['not_text']}}\n\nUserID: {message.from_user.id}\n{WriteInPM}"
|
||||
|
||||
reply_markup = InlineKeyboardMarkup()
|
||||
reply_markup.add(InlineKeyboardButton(text="📃 Reply", callback_data=f"reply_{user_id}")) if message.from_user.id != self._tg_id else None
|
||||
reply_markup.add(InlineKeyboardButton(text="🔐 Ban", callback_data=f"ban_{user_id}"))
|
||||
reply_markup.add(InlineKeyboardButton(text="🗑️ Delete", callback_data=f"MessageDelete"))
|
||||
|
||||
await self.inline.bot.send_message(self.tg_id, custom_text, reply_markup=reply_markup)
|
||||
await self.inline.bot.send_message(message.from_user.id, f'{self.strings["successfully_send"]}')
|
||||
|
||||
async def feedback_callback_handler(self, call: InlineCall):
|
||||
if call.data == "MessageDelete":
|
||||
self.inline.ss(call.from_user.id, False)
|
||||
await self.inline.bot.delete_message(
|
||||
call.message.chat.id,
|
||||
call.message.message_id,
|
||||
)
|
||||
return
|
||||
if call.data.startswith('ban_'):
|
||||
user_id = int(call.data.split('_')[1])
|
||||
self._ban_list.append(user_id)
|
||||
self.db.set("AuroraFeedBackMod", "ban_list", self._ban_list)
|
||||
reply_markup = InlineKeyboardMarkup()
|
||||
reply_markup.add(InlineKeyboardButton(text="🔓 Unban", callback_data=f"unban_{user_id}"))
|
||||
await self.inline.bot.send_message(self.tg_id, f'{self.strings["successfully_ban"]} ({user_id})', reply_markup=reply_markup)
|
||||
return
|
||||
if call.data.startswith('unban_'):
|
||||
user_id = int(call.data.split('_')[1])
|
||||
self._ban_list.remove(user_id)
|
||||
self.db.set("AuroraFeedBackMod", "ban_list", self._ban_list)
|
||||
reply_markup = InlineKeyboardMarkup()
|
||||
reply_markup.add(InlineKeyboardButton(text="🔐 Ban", callback_data=f"ban_{user_id}"))
|
||||
await self.inline.bot.send_message(self.tg_id, f'{self.strings["successfully_unban"]} ({user_id})', reply_markup=reply_markup)
|
||||
return
|
||||
if call.data.startswith("reply"):
|
||||
user_id = int(call.data.split('_')[1])
|
||||
self.db.set("AuroraFeedBackMod", "state", f"waiting_{user_id}_{call.message.message_id}")
|
||||
reply_markup = InlineKeyboardMarkup()
|
||||
reply_markup.add(InlineKeyboardButton(text="❌ Cancel", callback_data=f"cancel_reply"))
|
||||
await self.inline.bot.send_message(self.tg_id, f'{self.strings["waiting_answer"]}', reply_markup=reply_markup)
|
||||
if call.data == "cancel_reply":
|
||||
self.db.set("AuroraFeedBackMod", "state", "done")
|
||||
await self.inline.bot.delete_message(call.message.chat.id, call.message.message_id)
|
||||
131
KorenbZla/HikkaModules/AuroraSpam.py
Normal file
131
KorenbZla/HikkaModules/AuroraSpam.py
Normal file
@@ -0,0 +1,131 @@
|
||||
# * _ __ __ _ _
|
||||
# * / \ _ _ _ __ ___ _ __ __ _| \/ | ___ __| |_ _| | ___ ___
|
||||
# * / _ \| | | | '__/ _ \| '__/ _` | |\/| |/ _ \ / _` | | | | |/ _ \/ __|
|
||||
# * / ___ \ |_| | | | (_) | | | (_| | | | | (_) | (_| | |_| | | __/\__ \
|
||||
# * /_/ \_\__,_|_| \___/|_| \__,_|_| |_|\___/ \__,_|\__,_|_|\___||___/
|
||||
# *
|
||||
# * © Copyright 2024
|
||||
# *
|
||||
# * https://t.me/AuroraModules
|
||||
# *
|
||||
# * 🔒 Code is licensed under GNU AGPLv3
|
||||
# * 🌐 https://www.gnu.org/licenses/agpl-3.0.html
|
||||
# * ⛔️ You CANNOT edit this file without direct permission from the author.
|
||||
# * ⛔️ You CANNOT distribute this file if you have modified it without the direct permission of the author.
|
||||
|
||||
# Name: AuroraSpam
|
||||
# Author: Felix?
|
||||
# Commands:
|
||||
# .aspam
|
||||
# scope: hikka_only
|
||||
# meta developer: @AuroraModules
|
||||
|
||||
# meta pic: https://i.postimg.cc/Hx3Zm8rB/logo.png
|
||||
# meta banner: https://te.legra.ph/file/e5b219dd459e4cf8b0b11.jpg
|
||||
|
||||
__version__ = (1, 1, 6)
|
||||
|
||||
import asyncio
|
||||
from .. import loader, utils
|
||||
from telethon.tl.types import Message # type: ignore
|
||||
|
||||
@loader.tds
|
||||
class AuroraSpamMod(loader.Module):
|
||||
"""Module for mailings message"""
|
||||
|
||||
strings = {
|
||||
"name": "AuroraSpam",
|
||||
"successfully_spam": "<emoji document_id=5823396554345549784>✔️</emoji> <b><i>The newsletter has been successfully completed, all messages have been delivered.</i></b>",
|
||||
"error_cfg_group_id": "<emoji document_id=5778527486270770928>❌</emoji>Error! The config value was entered incorrectly or it does not exist.",
|
||||
"cfg_group_id": "Enter the group identifier in the format СhatId , СhatId",
|
||||
"cfg_custom_text": "Enter a custom text for the mailing",
|
||||
"cfg_photo_url": "Enter a link to send media with text.",
|
||||
}
|
||||
|
||||
strings_ru = {
|
||||
"successfully_spam": "<emoji document_id=5823396554345549784>✔️</emoji> <b><i>Рассылка успешно завершена, все сообщения были доставлены.</i></b>",
|
||||
"error_cfg_group_id": "<emoji document_id=5778527486270770928>❌</emoji>Error! Неправильно введено значение конфига или его не существует.",
|
||||
"cfg_group_id": "Введите индификатор группы в формате СhatID , ChatID",
|
||||
"cfg_custom_text": "Введите кастомный текст для рассылки",
|
||||
"cfg_photo_url": "Введите ссылку для отправки медиа с текстом.",
|
||||
}
|
||||
|
||||
strings_uz = {
|
||||
"successfully_spam": "<emoji document_id=5823396554345549784>✔️</emoji> <b><i>Yuborish muvaffaqiyatli yakunlandi, barcha xabarlarni yetkazib berildi.</i></b>",
|
||||
"error_cfg_group_id": "<emoji document_id=5778527486270770928>❌</emoji>Error! Konfiguratsiya qiymati noto'g'ri yoki mavjud emas.",
|
||||
"cfg_group_id": "Guruh identifikatorini ChatID, ChatID formatida kiriting",
|
||||
"cfg_custom_text": "Yuborish uchun maxsus matnni kiriting",
|
||||
"cfg_photo_url": "Matnli media yuborish uchun havolani kiriting.",
|
||||
}
|
||||
|
||||
strings_de = {
|
||||
"successfully_spam": "<emoji document_id=5823396554345549784>✔️</emoji> <b><i>Die Verteilung wurde erfolgreich abgeschlossen, alle Nachrichten wurden zugestellt.</i></b>",
|
||||
"error_cfg_group_id": "<emoji document_id=5778527486270770928>❌</emoji>Error! Falscher oder nicht vorhandener Konfigurationswert.",
|
||||
"cfg_group_id": "Geben Sie die Gruppenkennung im Format ChatID, ChatID ein",
|
||||
"cfg_custom_text": "Geben Sie den benutzerdefinierten Text für die Verteilung ein",
|
||||
"cfg_photo_url": "Geben Sie einen Link ein, um Medien mit Text zu senden.",
|
||||
}
|
||||
|
||||
strings_es = {
|
||||
"successfully_spam": "<emoji document_id=5823396554345549784>✔️</emoji> <b><i>La distribución se ha completado con éxito, todos los mensajes han sido entregados.</i></b>",
|
||||
"error_cfg_group_id": "<emoji document_id=5778527486270770928>❌</emoji>Error! Valor de configuración incorrecto o inexistente",
|
||||
"cfg_group_id": "Ingrese el identificador del grupo en formato ChatID, ChatID",
|
||||
"cfg_custom_text": "Ingrese el texto personalizado para la distribución",
|
||||
"cfg_photo_url": "Enter the ",
|
||||
}
|
||||
|
||||
def __init__(self):
|
||||
self.config = loader.ModuleConfig(
|
||||
loader.ConfigValue(
|
||||
"group_id",
|
||||
None,
|
||||
lambda: self.strings["cfg_group_id"],
|
||||
validator=loader.validators.Series(
|
||||
validator=loader.validators.Union(
|
||||
loader.validators.TelegramID(),
|
||||
loader.validators.RegExp("[0-9]"),
|
||||
),
|
||||
),
|
||||
),
|
||||
loader.ConfigValue(
|
||||
"custom_text",
|
||||
"The module was created by @AuroraModules",
|
||||
lambda: self.strings["cfg_custom_text"],
|
||||
),
|
||||
loader.ConfigValue(
|
||||
"photo_url",
|
||||
None,
|
||||
lambda: self.strings("cfg_photo_url"),
|
||||
validator=loader.validators.Link(),
|
||||
),
|
||||
)
|
||||
|
||||
@loader.command(
|
||||
ru_doc="Начать рассылку сообщений.",
|
||||
uz_doc="Xabarlarni yuborishni boshlang.",
|
||||
de_doc="Starten Sie den Versand von Nachrichten.",
|
||||
es_doc="Empezar a enviar mensajes.",
|
||||
)
|
||||
async def aspam(self, message: Message):
|
||||
"""Start sending messages."""
|
||||
ccid = self.config["group_id"]
|
||||
text = self.config["custom_text"]
|
||||
photo = self.config["photo_url"]
|
||||
sp = self.strings["successfully_spam"]
|
||||
|
||||
if ccid is None or ccid == []:
|
||||
await utils.answer(message, self.strings["error_cfg_group_id"])
|
||||
return
|
||||
|
||||
for i in ccid:
|
||||
if self.config["photo_url"] == None:
|
||||
await self.client.send_message(i, text)
|
||||
else:
|
||||
await self.client.send_file(
|
||||
i,
|
||||
photo,
|
||||
caption=text,
|
||||
)
|
||||
await utils.answer(message, sp)
|
||||
await asyncio.sleep(6)
|
||||
await message.delete()
|
||||
179
KorenbZla/HikkaModules/AutoDeleteMessages.py
Normal file
179
KorenbZla/HikkaModules/AutoDeleteMessages.py
Normal file
@@ -0,0 +1,179 @@
|
||||
# * _ __ __ _ _
|
||||
# * / \ _ _ _ __ ___ _ __ __ _| \/ | ___ __| |_ _| | ___ ___
|
||||
# * / _ \| | | | '__/ _ \| '__/ _` | |\/| |/ _ \ / _` | | | | |/ _ \/ __|
|
||||
# * / ___ \ |_| | | | (_) | | | (_| | | | | (_) | (_| | |_| | | __/\__ \
|
||||
# * /_/ \_\__,_|_| \___/|_| \__,_|_| |_|\___/ \__,_|\__,_|_|\___||___/
|
||||
# *
|
||||
# * © Copyright 2024
|
||||
# *
|
||||
# * https://t.me/AuroraModules
|
||||
# *
|
||||
# * 🔒 Code is licensed under GNU AGPLv3
|
||||
# * 🌐 https://www.gnu.org/licenses/agpl-3.0.html
|
||||
# * ⛔️ You CANNOT edit this file without direct permission from the author.
|
||||
# * ⛔️ You CANNOT distribute this file if you have modified it without the direct permission of the author.
|
||||
|
||||
# Name: AutoDeleteMessages
|
||||
# Author: Felix?
|
||||
# Commands:
|
||||
# .autodel
|
||||
# scope: hikka_only
|
||||
# meta developer: @AuroraModules
|
||||
|
||||
# meta pic: https://i.postimg.cc/Hx3Zm8rB/logo.png
|
||||
# meta banner: https://te.legra.ph/file/b3e9c4bef7348c0fda21e.jpg
|
||||
|
||||
__version__ = (1, 0, 0)
|
||||
|
||||
import asyncio
|
||||
from hikkatl.types import Message # type: ignore
|
||||
from .. import loader, utils
|
||||
|
||||
class AutoDeleteMessagesMod(loader.Module):
|
||||
"""Automatically deletes all your messages in the specified chats."""
|
||||
|
||||
strings = {
|
||||
"name": "AutoDeleteMessages",
|
||||
"status": "<emoji document_id=6028435952299413210>ℹ️</emoji> Status of AutoDeleteMessages",
|
||||
"s_True": "Active.",
|
||||
"s_False": "Inactive.",
|
||||
"on": "Activated.",
|
||||
"off": "Deactivated.",
|
||||
"n_args": "<emoji document_id=5285372392086976148>🚫</emoji> Please provide arguments",
|
||||
"error": "Error: {}",
|
||||
"cfg_chat_id": "Enter the chat ID where messages will be deleted",
|
||||
"cfg_time_delete": "Enter the interval in minutes after which your messages will be deleted",
|
||||
"cfg_error": "Configuration error or value not specified",
|
||||
}
|
||||
|
||||
strings_ru = {
|
||||
"status": "<emoji document_id=6028435952299413210>ℹ️</emoji> Статус работы AutoDeleteMessages",
|
||||
"s_True": "Активно.",
|
||||
"s_False": "Неактивно.",
|
||||
"on": "Включено.",
|
||||
"off": "Выключено.",
|
||||
"n_args": "<emoji document_id=5285372392086976148>🚫</emoji> Укажите аргументы",
|
||||
"error": "Error: {}",
|
||||
"cfg_chat_id": "Введите идентификатор чата, в котором будут удаляться сообщения",
|
||||
"cfg_time_delete": "Введите интервал в минутах, через который будут удаляться ваши сообщения",
|
||||
"cfg_error": "Ошибка в конфигурации или не указано значение",
|
||||
}
|
||||
|
||||
|
||||
strings_uz = {
|
||||
"status": "<emoji document_id=6028435952299413210>ℹ️</emoji> AutoDeleteMessages holati",
|
||||
"s_True": "Faol.",
|
||||
"s_False": "Faol emas.",
|
||||
"on": "Faollashtirildi.",
|
||||
"off": "O'chirildi.",
|
||||
"n_args": "<emoji document_id=5285372392086976148>🚫</emoji> Iltimos, argumentlarni kiriting",
|
||||
"error": "Error: {}",
|
||||
"cfg_chat_id": "Xabarlar o'chiriladigan chat ID'sini kiriting",
|
||||
"cfg_time_delete": "Xabarlaringiz qachon o'chirilishini daqiqalarda kiriting",
|
||||
"cfg_error": "Konfiguratsiya xatosi yoki qiymat ko'rsatilmagan",
|
||||
}
|
||||
|
||||
strings_de = {
|
||||
"status": "<emoji document_id=6028435952299413210>ℹ️</emoji> Status von AutoDeleteMessages",
|
||||
"s_True": "Aktiv.",
|
||||
"s_False": "Inaktiv.",
|
||||
"on": "Aktiviert.",
|
||||
"off": "Deaktiviert.",
|
||||
"n_args": "<emoji document_id=5285372392086976148>🚫</emoji> Bitte geben Sie Argumente an",
|
||||
"error": "Error: {}",
|
||||
"cfg_chat_id": "Geben Sie die Chat-ID ein, in der Nachrichten gelöscht werden sollen",
|
||||
"cfg_time_delete": "Geben Sie das Intervall in Minuten ein, nach dem Ihre Nachrichten gelöscht werden",
|
||||
"cfg_error": "Konfigurationsfehler oder Wert nicht angegeben",
|
||||
}
|
||||
|
||||
strings_es = {
|
||||
"status": "<emoji document_id=6028435952299413210>ℹ️</emoji> Estado de AutoDeleteMessages",
|
||||
"s_True": "Activo.",
|
||||
"s_False": "Inactivo.",
|
||||
"on": "Activado.",
|
||||
"off": "Desactivado.",
|
||||
"n_args": "<emoji document_id=5285372392086976148>🚫</emoji> Por favor, proporcione argumentos",
|
||||
"error": "Error: {}",
|
||||
"cfg_chat_id": "Ingrese el ID del chat donde se eliminarán los mensajes",
|
||||
"cfg_time_delete": "Ingrese el intervalo en minutos después del cual se eliminarán sus mensajes",
|
||||
"cfg_error": "Error de configuración o valor no especificado",
|
||||
}
|
||||
|
||||
def __init__(self):
|
||||
self.config = loader.ModuleConfig(
|
||||
loader.ConfigValue(
|
||||
"chat_id",
|
||||
[],
|
||||
lambda: self.strings["cfg_chat_id"],
|
||||
),
|
||||
loader.ConfigValue(
|
||||
"time_delete",
|
||||
15,
|
||||
lambda: self.strings["cfg_time_delete"],
|
||||
validator=loader.validators.Integer(minimum=1),
|
||||
),
|
||||
)
|
||||
|
||||
async def client_ready(self, client, db):
|
||||
self.client = client
|
||||
self.db = db
|
||||
|
||||
@loader.command(
|
||||
ru_doc="<on/off> - установить статус работы модуля.",
|
||||
uz_doc="<on/off> - modulning ish holatini sozlash.",
|
||||
de_doc="<on/off> - Den Status des Moduls festlegen.",
|
||||
es_doc="<on/off> - Establecer el estado de operación del módulo.",
|
||||
)
|
||||
async def autodel(self, message):
|
||||
"""<on/off> - set the module operation status"""
|
||||
args = utils.get_args_raw(message).lower()
|
||||
|
||||
if self.config["chat_id"] is None or self.config["chat_id"] == []:
|
||||
await utils.answer(message, self.strings("cfg_error"))
|
||||
return
|
||||
else:
|
||||
chat_ids = self.config["chat_id"]
|
||||
if isinstance(chat_ids, int):
|
||||
chat_ids = [chat_ids]
|
||||
elif not isinstance(chat_ids, list):
|
||||
chat_ids = []
|
||||
|
||||
if self.config["time_delete"] == None:
|
||||
await utils.answer(message, self.strings("cfg_error"))
|
||||
return
|
||||
else:
|
||||
time = self.config["time_delete"]
|
||||
|
||||
status_result_True = self.db.get("AutoDeleteMessages", "status", True)
|
||||
if status_result_True:
|
||||
status_result = self.strings("s_True")
|
||||
else:
|
||||
status_result = self.strings("s_False")
|
||||
|
||||
if not args:
|
||||
status = self.strings("status")
|
||||
await utils.answer(message, f"<b>{status}: <i>{status_result}</i></b>")
|
||||
return
|
||||
|
||||
if args == "on":
|
||||
args_s = self.strings("on")
|
||||
self.db.set("AutoDeleteMessages", "status", True)
|
||||
await utils.answer(message, f"<emoji document_id=5287692511945437157>✅</emoji> <b>AutoDeleteMessages: <i>{args_s}</i></b>")
|
||||
elif args == "off":
|
||||
args_s = self.strings("off")
|
||||
self.db.set("AutoDeleteMessages", "status", False)
|
||||
await utils.answer(message, f"<emoji document_id=5287692511945437157>✅</emoji> <b>AutoDeleteMessages: <i>{args_s}</i></b>")
|
||||
else:
|
||||
n_args = self.strings("n_args")
|
||||
await utils.answer(message, f"<b>{n_args}</b>")
|
||||
return
|
||||
|
||||
await asyncio.sleep(time)
|
||||
while self.db.get("AutoDeleteMessages", "status"):
|
||||
for chat_id in chat_ids:
|
||||
try:
|
||||
async for msg in self.client.iter_messages(chat_id, from_user="me"):
|
||||
await msg.delete()
|
||||
except Exception as e:
|
||||
await utils.answer(message, self.strings['error'].format(e))
|
||||
await asyncio.sleep(time)
|
||||
222
KorenbZla/HikkaModules/AutoFarmUniversal.py
Normal file
222
KorenbZla/HikkaModules/AutoFarmUniversal.py
Normal file
@@ -0,0 +1,222 @@
|
||||
# * _ __ __ _ _
|
||||
# * / \ _ _ _ __ ___ _ __ __ _| \/ | ___ __| |_ _| | ___ ___
|
||||
# * / _ \| | | | '__/ _ \| '__/ _` | |\/| |/ _ \ / _` | | | | |/ _ \/ __|
|
||||
# * / ___ \ |_| | | | (_) | | | (_| | | | | (_) | (_| | |_| | | __/\__ \
|
||||
# * /_/ \_\__,_|_| \___/|_| \__,_|_| |_|\___/ \__,_|\__,_|_|\___||___/
|
||||
# *
|
||||
# * © Copyright 2024
|
||||
# *
|
||||
# * https://t.me/AuroraModules
|
||||
# *
|
||||
# * 🔒 Code is licensed under GNU AGPLv3
|
||||
# * 🌐 https://www.gnu.org/licenses/agpl-3.0.html
|
||||
# * ⛔️ You CANNOT edit this file without direct permission from the author.
|
||||
# * ⛔️ You CANNOT distribute this file if you have modified it without the direct permission of the author.
|
||||
|
||||
# Name: AutoFarmUniversal
|
||||
# Author: Felix?
|
||||
# Commands:
|
||||
# .ufarm
|
||||
# scope: hikka_only
|
||||
# meta developer: @AuroraModules
|
||||
|
||||
# meta pic: https://i.postimg.cc/Hx3Zm8rB/logo.png
|
||||
# meta banner: https://te.legra.ph/file/77e64e3d33263a669125f.jpg
|
||||
|
||||
__version__ = (1, 0, 0)
|
||||
|
||||
import asyncio
|
||||
import random
|
||||
from .. import loader, utils
|
||||
|
||||
@loader.tds
|
||||
class AutoFarmUniversalMod(loader.Module):
|
||||
"""Universal auto farmer with settings in the config"""
|
||||
|
||||
strings = {
|
||||
"name": "AutoFarmUniversal",
|
||||
"status": "<emoji document_id=6028435952299413210>ℹ️</emoji> Module operation status",
|
||||
"s_1": "Active.",
|
||||
"s_0": "Inactive.",
|
||||
"on": "Activated.",
|
||||
"off": "Deactivated.",
|
||||
"n_args": "<emoji document_id=5285372392086976148>🚫</emoji> Specify the arguments",
|
||||
"error_cfg": "<emoji document_id=5287611315588707430>❌</emoji> <b>Error! Incorrect config value.</b>",
|
||||
"cfg_chat_id": "Enter the chat identifier.",
|
||||
"cfg_text": "Enter the text that will be sent.",
|
||||
"cfg_time_delay": "Enter the delay in seconds",
|
||||
"random_time_delay_min": "Enter the minimum value after how long the command will be sent",
|
||||
"random_time_delay_max": "Enter the maximum value after how long the command will be sent",
|
||||
}
|
||||
|
||||
strings_ru = {
|
||||
"status": "<emoji document_id=6028435952299413210>ℹ️</emoji> Статус работы модуля",
|
||||
"s_1": "Активно.",
|
||||
"s_0": "Неактивно.",
|
||||
"on": "Активировано.",
|
||||
"off": "Деактивировано.",
|
||||
"n_args": "<emoji document_id=5285372392086976148>🚫</emoji> Укажите аргументы",
|
||||
"error_cfg": "<emoji document_id=5287611315588707430>❌</emoji> <b>Ошибка! Неверное значение конфигурации.</b>",
|
||||
"cfg_chat_id": "Введите идентификатор чата.",
|
||||
"cfg_text": "Введите текст, который будет отправлен.",
|
||||
"cfg_time_delay": "Введите задержку в секундах",
|
||||
"random_time_delay_min": "Введите минимальное значение времени, через которое будет отправлена команда",
|
||||
"random_time_delay_max": "Введите максимальное значение времени, через которое будет отправлена команда",
|
||||
}
|
||||
|
||||
strings_uz = {
|
||||
"status": "<emoji document_id=6028435952299413210>ℹ️</emoji> Modul ishlash holati",
|
||||
"s_1": "Faol.",
|
||||
"s_0": "Faol emas.",
|
||||
"on": "Faollashtirildi.",
|
||||
"off": "O'chirildi.",
|
||||
"n_args": "<emoji document_id=5285372392086976148>🚫</emoji> Argumentlarni kiriting",
|
||||
"error_cfg": "<emoji document_id=5287611315588707430>❌</emoji> <b>Xato! Noto'g'ri konfiguratsiya qiymati.</b>",
|
||||
"cfg_chat_id": "Chat identifikatorini kiriting.",
|
||||
"cfg_text": "Yuboriladigan matnni kiriting.",
|
||||
"cfg_time_delay": "Kechikishni sekundlarda kiriting",
|
||||
"random_time_delay_min": "Buyruq yuboriladigan minimal vaqtni kiriting",
|
||||
"random_time_delay_max": "Buyruq yuboriladigan maksimal vaqtni kiriting",
|
||||
}
|
||||
|
||||
strings_de = {
|
||||
"status": "<emoji document_id=6028435952299413210>ℹ️</emoji> Modulbetriebsstatus",
|
||||
"s_1": "Aktiv.",
|
||||
"s_0": "Inaktiv.",
|
||||
"on": "Aktiviert.",
|
||||
"off": "Deaktiviert.",
|
||||
"n_args": "<emoji document_id=5285372392086976148>🚫</emoji> Geben Sie die Argumente an",
|
||||
"error_cfg": "<emoji document_id=5287611315588707430>❌</emoji> <b>Fehler! Ungültiger Konfigurationswert.</b>",
|
||||
"cfg_chat_id": "Geben Sie die Chat-ID ein.",
|
||||
"cfg_text": "Geben Sie den zu sendenden Text ein.",
|
||||
"cfg_time_delay": "Geben Sie die Verzögerung in Sekunden ein",
|
||||
"random_time_delay_min": "Geben Sie den minimalen Wert an, nach dem der Befehl gesendet wird",
|
||||
"random_time_delay_max": "Geben Sie den maximalen Wert an, nach dem der Befehl gesendet wird",
|
||||
}
|
||||
|
||||
strings_es = {
|
||||
"status": "<emoji document_id=6028435952299413210>ℹ️</emoji> Estado de operación del módulo",
|
||||
"s_1": "Activo.",
|
||||
"s_0": "Inactivo.",
|
||||
"on": "Activado.",
|
||||
"off": "Desactivado.",
|
||||
"n_args": "<emoji document_id=5285372392086976148>🚫</emoji> Especifica los argumentos",
|
||||
"error_cfg": "<emoji document_id=5287611315588707430>❌</emoji> <b>Error! Valor de configuración incorrecto.</b>",
|
||||
"cfg_chat_id": "Introduce el identificador del chat.",
|
||||
"cfg_text": "Introduce el texto que se enviará.",
|
||||
"cfg_time_delay": "Introduce el retraso en segundos",
|
||||
"random_time_delay_min": "Introduce el valor mínimo después del cual se enviará el comando",
|
||||
"random_time_delay_max": "Introduce el valor máximo después del cual se enviará el comando",
|
||||
}
|
||||
|
||||
|
||||
def __init__(self):
|
||||
self.config = loader.ModuleConfig(
|
||||
loader.ConfigValue(
|
||||
"chat_id",
|
||||
None,
|
||||
lambda: self.strings["cfg_chat_id"]
|
||||
),
|
||||
loader.ConfigValue(
|
||||
"text",
|
||||
None,
|
||||
lambda: self.strings["cfg_text"]
|
||||
),
|
||||
loader.ConfigValue(
|
||||
"time_delay",
|
||||
None,
|
||||
lambda: self.strings["cfg_time_delay"],
|
||||
validator=loader.validators.Integer(minimum=1),
|
||||
),
|
||||
loader.ConfigValue(
|
||||
"random_time_delay_min",
|
||||
None,
|
||||
lambda: self.strings["cfg_random_time_delay_min"],
|
||||
validator=loader.validators.Integer(minimum=1),
|
||||
),
|
||||
loader.ConfigValue(
|
||||
"random_time_delay_max",
|
||||
None,
|
||||
lambda: self.strings["cfg_random_time_delay_max"],
|
||||
validator=loader.validators.Integer(minimum=2),
|
||||
),
|
||||
)
|
||||
|
||||
async def client_ready(self, client, db):
|
||||
self.db = db
|
||||
self.client = client
|
||||
|
||||
@loader.command(
|
||||
ru_doc="{on/off} - включить или выключить автоматическую фарминг",
|
||||
uz_doc="{on/off} - avtomatik fermani yoqish yoki o'chirish",
|
||||
de_doc="{on/off} - Auto-Farm ein- oder ausschalten",
|
||||
es_doc="{on/off} - activar o desactivar la auto-granja",
|
||||
)
|
||||
async def ufarm(self, message):
|
||||
"""{on/off} - turn auto farm on or off"""
|
||||
args = utils.get_args_raw(message).lower()
|
||||
|
||||
status_result_True = self.db.get("AutoFarmUniversal", "status", True)
|
||||
if status_result_True:
|
||||
status_result = self.strings("s_1")
|
||||
else:
|
||||
status_result = self.strings("s_0")
|
||||
|
||||
error_cfg = self.strings("error_cfg")
|
||||
time_delay = self.config["time_delay"]
|
||||
random_time_delay = self.config["random_time_delay_min"] or self.config["random_time_delay_max"]
|
||||
if self.config["chat_id"] == None:
|
||||
await utils.answer(message, f"<b>{error_cfg}</b>")
|
||||
self.db.set("AutoFarmUniversal", "status", False)
|
||||
await self.allmodules.commands["config"](await message.client.send_message(message.chat_id, f"{self.get_prefix()}cfg AutoFarmUniversal"))
|
||||
return
|
||||
if self.config["text"] == None:
|
||||
await utils.answer(message, f"<b>{error_cfg}</b>")
|
||||
self.db.set("AutoFarmUniversal", "status", False)
|
||||
await self.allmodules.commands["config"](await message.client.send_message(message.chat_id, f"{self.get_prefix()}cfg AutoFarmUniversal"))
|
||||
return
|
||||
if (time_delay is not None and time_delay != 0) and (random_time_delay is not None and random_time_delay != 0):
|
||||
await utils.answer(message, f"<b>{error_cfg}</b>")
|
||||
self.db.set("AutoFarmUniversal", "status", False)
|
||||
await self.allmodules.commands["config"](await message.client.send_message(message.chat_id, f"{self.get_prefix()}cfg AutoFarmUniversal"))
|
||||
return
|
||||
if (time_delay is None or time_delay == 0) and (random_time_delay is None or random_time_delay == 0):
|
||||
await utils.answer(message, f"<b>{error_cfg}</b>")
|
||||
self.db.set("AutoFarmUniversal", "status", False)
|
||||
await self.allmodules.commands["config"](await message.client.send_message(message.chat_id, f"{self.get_prefix()}cfg AutoFarmUniversal"))
|
||||
return
|
||||
|
||||
if not args:
|
||||
status = self.strings("status")
|
||||
await utils.answer(message, f"<b>{status}: <i>{status_result}</i></b>")
|
||||
return
|
||||
|
||||
if args == "on":
|
||||
args_s = self.strings("on")
|
||||
self.db.set("AutoFarmUniversal", "status", True)
|
||||
await utils.answer(message, f"<emoji document_id=5287692511945437157>✅</emoji> <b>AutoFarmUniversal: <i>{args_s}</i></b>")
|
||||
elif args == "off":
|
||||
args_s = self.strings("off")
|
||||
self.db.set("AutoFarmUniversal", "status", False)
|
||||
await utils.answer(message, f"<emoji document_id=5287692511945437157>✅</emoji> <b>AutoFarmUniversal: <i>{args_s}</i></b>")
|
||||
else:
|
||||
n_args = self.strings("n_args")
|
||||
await utils.answer(message, f"<b>{n_args}</b>")
|
||||
return
|
||||
|
||||
chat_id = self.config["chat_id"]
|
||||
text = self.config["text"]
|
||||
|
||||
if time_delay is not None and time_delay != 0:
|
||||
while self.db.get("AutoFarmUniversal", "status"):
|
||||
await message.client.send_message(chat_id, str(text))
|
||||
time = self.config["time_delay"]
|
||||
await asyncio.sleep(time)
|
||||
|
||||
if random_time_delay is not None and random_time_delay != 0:
|
||||
while self.db.get("AutoFarmUniversal", "status"):
|
||||
min_delay = self.config['random_time_delay_min']
|
||||
max_delay = self.config['random_time_delay_max']
|
||||
r_time = random.randint(min_delay, max_delay)
|
||||
await message.client.send_message(chat_id, str(text))
|
||||
await asyncio.sleep(r_time)
|
||||
232
KorenbZla/HikkaModules/BanWord.py
Normal file
232
KorenbZla/HikkaModules/BanWord.py
Normal file
@@ -0,0 +1,232 @@
|
||||
# * _ __ __ _ _
|
||||
# * / \ _ _ _ __ ___ _ __ __ _| \/ | ___ __| |_ _| | ___ ___
|
||||
# * / _ \| | | | '__/ _ \| '__/ _` | |\/| |/ _ \ / _` | | | | |/ _ \/ __|
|
||||
# * / ___ \ |_| | | | (_) | | | (_| | | | | (_) | (_| | |_| | | __/\__ \
|
||||
# * /_/ \_\__,_|_| \___/|_| \__,_|_| |_|\___/ \__,_|\__,_|_|\___||___/
|
||||
# *
|
||||
# * © Copyright 2024
|
||||
# *
|
||||
# * https://t.me/AuroraModules
|
||||
# *
|
||||
# * 🔒 Code is licensed under GNU AGPLv3
|
||||
# * 🌐 https://www.gnu.org/licenses/agpl-3.0.html
|
||||
# * ⛔️ You CANNOT edit this file without direct permission from the author.
|
||||
# * ⛔️ You CANNOT distribute this file if you have modified it without the direct permission of the author.
|
||||
|
||||
# Name: BanWord
|
||||
# Author: dend1yya
|
||||
# Commands:
|
||||
# .bwadd | .bword | .bwlist | .bwordoff | .bwon | .bwdel | .bwoff
|
||||
# scope: hikka_only
|
||||
# meta developer: @AuroraModules
|
||||
|
||||
# meta pic: https://i.postimg.cc/Hx3Zm8rB/logo.png
|
||||
# meta banner: https://te.legra.ph/file/926b74bc3235fb03433ea.jpg
|
||||
|
||||
version = (1, 0, 0)
|
||||
|
||||
from .. import loader, utils
|
||||
from datetime import timedelta
|
||||
|
||||
@loader.tds
|
||||
class BanWordMod(loader.Module):
|
||||
"""Модуль для управления запрещёнными словами в чате."""
|
||||
|
||||
strings = {
|
||||
"name": "BanWord",
|
||||
"word_added": "<b><emoji document_id=5873153278023307367>📄</emoji> Banword successfully added:</b> <code>{}</code>",
|
||||
"kick": "<b><emoji document_id=5442879640379076105>👤</emoji> | User @{message.sender.username} used a banned word and was kicked. <emoji document_id=5253780051471642059>🛡</emoji>\n<i><emoji document_id=5231165412275668380>🥰</emoji> | Protected by AuroraModules</i>",
|
||||
"mute": "<b><emoji document_id=5442879640379076105>👤</emoji> | User @{message.sender.username} used a banned word and was muted for 1 hour. <emoji document_id=5253780051471642059>🛡</emoji></b>\n<i><emoji document_id=5231165412275668380>🥰</emoji> | Protected by AuroraModules</i>",
|
||||
"word_removed": "<b><emoji document_id=5445267414562389170>🗑</emoji> Banned word removed:</b> <code>{}</code>",
|
||||
"none_bw": "<b><emoji document_id=5287613115180006030>🤬</emoji> The list of prohibited words is empty.</b>",
|
||||
"bword_enabled": "<b><emoji document_id=5398001711786762757>✅</emoji> Banned words are included in this chat</b>",
|
||||
"bword_disabled": "<b><emoji document_id=5388785832956016892>❌</emoji> Prohibited words are disabled.</b>",
|
||||
"action_set": "<b><emoji document_id=5255999175174137421>🛡</emoji> Action set:</b> <code>{}</code>",
|
||||
"no_action": "<b><emoji document_id=5980953710157632545>❌</emoji> Action not specified. Use: kick, mute, delete</b>",
|
||||
"no_word": "<b><emoji document_id=5443038326535759644>💬</emoji> Word not specified</b>"
|
||||
}
|
||||
|
||||
strings_ru = {
|
||||
"word_added": "<b><emoji document_id=5873153278023307367>📄</emoji> Запрещённое слово добавлено:</b> <code>{}</code>",
|
||||
"kick": "<b><emoji document_id=5442879640379076105>👤</emoji> | Пользователь @{message.sender.username} использовал запрещённое слово и был кикнут. <emoji document_id=5253780051471642059>🛡</emoji>\n<i><emoji document_id=5231165412275668380>🥰</emoji> | Protected by AuroraModules</i>",
|
||||
"mute": "<b><emoji document_id=5442879640379076105>👤</emoji> | Пользователь @{message.sender.username} использовал запрещённое слово и был замучен на 1 час. <emoji document_id=5253780051471642059>🛡</emoji></b>\n<i><emoji document_id=5231165412275668380>🥰</emoji> | Protected by AuroraModules</i>",
|
||||
"word_removed": "<b><emoji document_id=5445267414562389170>🗑</emoji> Запрещённое слово удалено:</b> <code>{}</code>",
|
||||
"none_bw": "<b><emoji document_id=5287613115180006030>🤬</emoji> Список запрещённых слов пуст.</b>",
|
||||
"bword_enabled": "<b><emoji document_id=5398001711786762757>✅</emoji> Банворды включены в этом чате.</b>",
|
||||
"bword_disabled": "<b><emoji document_id=5388785832956016892>❌</emoji> Банворды выключены в этом чате.</b>",
|
||||
"action_set": "<b><emoji document_id=5255999175174137421>🛡</emoji> Действие установлено:</b> <code>{}</code>",
|
||||
"no_action": "<b><emoji document_id=5980953710157632545>❌</emoji> Действие не указано. Используйте: kick, mute, delete.</b>",
|
||||
"no_word": "<b><emoji document_id=5443038326535759644>💬</emoji> Слово не указано.</b>",
|
||||
}
|
||||
|
||||
strings_uz = {
|
||||
"word_added": "<b><emoji document_id=5873153278023307367>📄</emoji> Taqiqlangan so'z qo'shildi:</b> <code>{}</code>",
|
||||
"kick": "<b><emoji document_id=5442879640379076105>👤</emoji> | Foydalanuvchi @{message.sender.username} taqiqlangan soʻzni ishlatgan va haydalgan. <emoji document_id=5253780051471642059>🛡</emoji>\n<i><emoji document_id=5231165412275668380>🥰</emoji> | Protected by AuroraModules</i>",
|
||||
"mute": "<b><emoji document_id=5442879640379076105>👤</emoji> | Foydalanuvchi @{message.sender.username} taqiqlangan soʻzni ishlatgan va 1 soatga o'chirilgan. <emoji document_id=5253780051471642059>🛡</emoji></b>\n<i><emoji document_id=5231165412275668380>🥰</emoji> | Protected by AuroraModules</i>",
|
||||
"word_removed": "<b><emoji document_id=5445267414562389170>🗑</emoji> Taqiqlangan soʻz olib tashlandi:</b> <code>{}</code>",
|
||||
"bword_enabled": "<b><emoji document_id=5398001711786762757>✅</emoji> Bu chatda banwords yoqilgan.</b>",
|
||||
"bw_none": "<b><emoji document_id=5287613115180006030>🤬</emoji> Taqiqlangan so'zlar ro'yxati bo'sh.</b>",
|
||||
"bword_disabled": "<b><emoji document_id=5388785832956016892>❌</emoji> Banwords o'chirilgan.</b>",
|
||||
"action_set": "<b><emoji document_id=5255999175174137421>🛡</emoji> Harakat muvaffaqiyatli o'rnatildi:</b> <code>{}</code>",
|
||||
"no_action": "<b><emoji document_id=5980953710157632545>❌</emoji> Harakat belgilanmagan, foydalaning: kick, mute, delete</b>",
|
||||
"no_word": "<b><emoji document_id=5443038326535759644>💬</emoji> So'z belgilanmagan</b>",
|
||||
}
|
||||
|
||||
strings_de = {
|
||||
"word_added": "<b><emoji document_id=5873153278023307367>📄</emoji> Verbotenes Wort hinzugefügt:</b> <code>{}</code>",
|
||||
"kick": "<b><emoji document_id=5442879640379076105>👤</emoji> | Benutzer @{message.sender.username} hat ein verbotenes Wort verwendet und wurde rausgeworfen. <emoji document_id=5253780051471642059>🛡</emoji>\n<i><emoji document_id=5231165412275668380>🥰</emoji> | Protected by AuroraModules</i>",
|
||||
"mute": "<b><emoji document_id=5442879640379076105>👤</emoji> | Benutzer @{message.sender.username} hat ein verbotenes Wort verwendet und wurde für 1 Stunde stummgeschaltet. <emoji document_id=5253780051471642059>🛡</emoji></b>\n<i><emoji document_id=5231165412275668380>🥰</emoji> | Protected by AuroraModules</i>",
|
||||
"word_removed": "<b><emoji document_id=5445267414562389170>🗑</emoji> Verbotenes Wort entfernt:</b> <code>{}</code>",
|
||||
"bw_none": "<b><emoji document_id=5287613115180006030>🤬</emoji> Die Liste der verbotenen Wörter ist leer.</b>",
|
||||
"bword_enabled": "<b><emoji document_id=5398001711786762757>✅</emoji> Banwords sind in diesem Chat aktiviert.</b>",
|
||||
"bword_disabled": "<b><emoji document_id=5388785832956016892>❌</emoji> Banwords sind in diesem Chat deaktiviert.</b>",
|
||||
"action_set": "<b><emoji document_id=5255999175174137421>🛡</emoji> Aktion erfolgreich festgelegt:</b> <code>{}</code>",
|
||||
"no_action": "<b><emoji document_id=5980953710157632545>❌</emoji> Aktion nicht angegeben, verwenden: kick, mute, delete</b>",
|
||||
"no_word": "<b><emoji document_id=5443038326535759644>💬</emoji> Das Wort ist nicht angegeben.</b>"
|
||||
}
|
||||
|
||||
strings_es = {
|
||||
"word_added": "<b><emoji document_id=5873153278023307367>📄</emoji> Palabra prohibida añadida con éxito:</b> <code>{}</code>",
|
||||
"kick": "<b><emoji document_id=5442879640379076105>👤</emoji> | El usuario @{message.sender.username} utilizó una palabra prohibida y fue expulsado. <emoji document_id=5253780051471642059>🛡</emoji>\n<i><emoji document_id=5231165412275668380>🥰</emoji> | Protegido por AuroraModules</i>",
|
||||
"mute": "<b><emoji document_id=5442879640379076105>👤</emoji> | El usuario @{message.sender.username} utilizó una palabra prohibida y fue silenciado por 1 hora. <emoji document_id=5253780051471642059>🛡</emoji></b>\n<i><emoji document_id=5231165412275668380>🥰</emoji> | Protegido por AuroraModules</i>",
|
||||
"word_removed": "<b><emoji document_id=5445267414562389170>🗑</emoji> Palabra prohibida eliminada:</b> <code>{}</code>",
|
||||
"none_bw": "<b><emoji document_id=5287613115180006030>🤬</emoji> La lista de palabras prohibidas está vacía.</b>",
|
||||
"bword_enabled": "<b><emoji document_id=5398001711786762757>✅</emoji> Las palabras prohibidas están activadas en este chat</b>",
|
||||
"bword_disabled": "<b><emoji document_id=5388785832956016892>❌</emoji> Las palabras prohibidas están desactivadas.</b>",
|
||||
"action_set": "<b><emoji document_id=5255999175174137421>🛡</emoji> Acción configurada:</b> <code>{}</code>",
|
||||
"no_action": "<b><emoji document_id=5980953710157632545>❌</emoji> Acción no especificada. Usa: kick, mute, delete</b>",
|
||||
"no_word": "<b><emoji document_id=5443038326535759644>💬</emoji> Palabra no especificada</b>"
|
||||
}
|
||||
|
||||
def __init__(self):
|
||||
self.config = loader.ModuleConfig(
|
||||
loader.ConfigValue(
|
||||
"BAN_ACTION",
|
||||
"delete",
|
||||
lambda: "Action when finding a forbidden word: kick, mute, delete",
|
||||
),
|
||||
)
|
||||
|
||||
async def watcher(self, message):
|
||||
chat_id = utils.get_chat_id(message)
|
||||
enabled_chats = self.db.get("BanWord", "enabled_chats", [])
|
||||
if str(chat_id) not in enabled_chats:
|
||||
return
|
||||
|
||||
banned_words = self.db.get("BanWord", "banned_words", [])
|
||||
if any(word in message.text for word in banned_words):
|
||||
action = self.config["BAN_ACTION"]
|
||||
if action == "delete":
|
||||
await message.delete()
|
||||
elif action == "kick":
|
||||
entity = await message.client.get_input_entity(chat_id)
|
||||
await message.client.kick_participant(entity, message.sender_id)
|
||||
await message.respond(f"<b><emoji document_id=5442879640379076105>👤</emoji> | User @{message.sender.username} used a banned word and was kicked. <emoji document_id=5253780051471642059>🛡</emoji></b>\n<i><emoji document_id=5231165412275668380>🥰</emoji></i>\n<b><i>Protected by @AuroraModules</b></i>")
|
||||
elif action == "mute":
|
||||
mute_duration = timedelta(hours=1)
|
||||
until_date = message.date + mute_duration
|
||||
entity = await message.client.get_input_entity(chat_id)
|
||||
await message.client.edit_permissions(
|
||||
entity,
|
||||
message.sender_id,
|
||||
until_date=until_date,
|
||||
send_messages=False
|
||||
)
|
||||
await message.respond(f"<b><emoji document_id=5442879640379076105>👤</emoji> | User @{message.sender.username} used a banned word and was muted for 1 hour. <emoji document_id=5253780051471642059>🛡</emoji></b>\n<i><emoji document_id=5231165412275668380>🥰</emoji></i>\n<b><i>Protected by @AuroraModules</b></i>")
|
||||
|
||||
@loader.command(
|
||||
ru_doc = "Добавляет запрещённое слово.",
|
||||
uz_doc = "Taqiqlangan so'zni qo'shadi.",
|
||||
de_doc = "Fügt ein verbotenes Wort hinzu.",
|
||||
es_doc = "Añade una palabra prohibida.",
|
||||
)
|
||||
async def bwadd(self, message):
|
||||
"""Adds a banned word."""
|
||||
args = utils.get_args_raw(message)
|
||||
if not args:
|
||||
await utils.answer(message, self.strings["no_word"])
|
||||
return
|
||||
banned_words = self.db.get("BanWord", "banned_words", [])
|
||||
if args not in banned_words:
|
||||
banned_words.append(args)
|
||||
self.db.set("BanWord", "banned_words", banned_words)
|
||||
await utils.answer(message, self.strings["word_added"].format(args))
|
||||
|
||||
@loader.command(
|
||||
ru_doc = "Удаляет запрещённое слово.",
|
||||
uz_doc = "Taqiqlangan so'zni olib tashlaydi.",
|
||||
de_doc = "Entfernt ein verbotenes Wort.",
|
||||
es_doc = "Elimina una palabra prohibida.",
|
||||
)
|
||||
async def bwdel(self, message):
|
||||
"""Removes a banned word."""
|
||||
args = utils.get_args_raw(message)
|
||||
if not args:
|
||||
await utils.answer(message, self.strings["no_word"])
|
||||
return
|
||||
banned_words = self.db.get("BanWord", "banned_words", [])
|
||||
if args in banned_words:
|
||||
banned_words.remove(args)
|
||||
self.db.set("BanWord", "banned_words", banned_words)
|
||||
await utils.answer(message, self.strings["word_removed"].format(args))
|
||||
|
||||
@loader.command(
|
||||
ru_doc = "Включает банворды в чате.",
|
||||
uz_doc = "Chatda banwordsni yoqadi.",
|
||||
de_doc = "Aktiviert Banwords im Chat.",
|
||||
es_doc = "Activa las palabras prohibidas en el chat.",
|
||||
)
|
||||
async def bwon(self, message):
|
||||
"""Enables banwords in chat."""
|
||||
chat_id = str(utils.get_chat_id(message))
|
||||
enabled_chats = self.db.get("BanWord", "enabled_chats", [])
|
||||
if chat_id not in enabled_chats:
|
||||
enabled_chats.append(chat_id)
|
||||
self.db.set("BanWord", "enabled_chats", enabled_chats)
|
||||
await utils.answer(message, self.strings["bword_enabled"])
|
||||
|
||||
@loader.command(
|
||||
ru_doc = "Отключает банворды в чате.",
|
||||
uz_doc = "Chatdagi bandwordlarni o'chirib qo'yadi.",
|
||||
de_doc = "Deaktiviert Ban Words im Chat.",
|
||||
es_doc = "Desactiva las palabras prohibidas en el chat.",
|
||||
)
|
||||
async def bwoff(self, message):
|
||||
"""Disable banword in chat."""
|
||||
chat_id = str(utils.get_chat_id(message))
|
||||
enabled_chats = self.db.get("BanWord", "enabled_chats", [])
|
||||
if chat_id in enabled_chats:
|
||||
enabled_chats.remove(chat_id)
|
||||
self.db.set("BanWord", "enabled_chats", enabled_chats)
|
||||
await utils.answer(message, self.strings["bword_disabled"])
|
||||
|
||||
@loader.command(
|
||||
ru_doc = "Устанавливает действие при нахождении запрещённого слова (kick, mute, delete).",
|
||||
uz_doc = "Taqiqlangan so'z aniqlanganda harakatni o'rnatadi (kick, mute, delete).",
|
||||
de_doc = "Legt die Aktion fest, wenn ein verbotenes Wort gefunden wird (kick, mute, delete).",
|
||||
es_doc = "Establece la acción cuando se encuentra una palabra prohibida (expulsar, silenciar, eliminar).",
|
||||
)
|
||||
async def bword(self, message):
|
||||
"""Sets the action when a prohibited word is found (kick, mute, delete)."""
|
||||
args = utils.get_args_raw(message)
|
||||
if args not in ["kick", "mute", "delete"]:
|
||||
await utils.answer(message, self.strings["no_action"])
|
||||
return
|
||||
self.config["BAN_ACTION"] = args
|
||||
await utils.answer(message, self.strings["action_set"].format(args))
|
||||
|
||||
@loader.command(
|
||||
ru_doc = "Выводит список запрещённых слов.",
|
||||
uz_doc = "Taqiqlangan so'zlar ro'yxatini ko'rsatadi.",
|
||||
de_doc = "Zeigt eine Liste verbotener Wörter an.",
|
||||
es_doc = "Muestra una lista de palabras prohibidas.",
|
||||
)
|
||||
async def bwlist(self, message):
|
||||
"""Displays a list of prohibited words."""
|
||||
banned_words = self.db.get("BanWord", "banned_words", [])
|
||||
if not banned_words:
|
||||
await utils.answer(message, self.strings["none_bw"])
|
||||
return
|
||||
|
||||
word_list = "\n".join(f"• {word}" for word in banned_words)
|
||||
await utils.answer(message, f"<b><emoji document_id=5870984130560266604>💬</emoji> Banned Words:</b>\n<i>{word_list}</i>")
|
||||
74
KorenbZla/HikkaModules/Deanon.py
Normal file
74
KorenbZla/HikkaModules/Deanon.py
Normal file
@@ -0,0 +1,74 @@
|
||||
# * _ __ __ _ _
|
||||
# * / \ _ _ _ __ ___ _ __ __ _| \/ | ___ __| |_ _| | ___ ___
|
||||
# * / _ \| | | | '__/ _ \| '__/ _` | |\/| |/ _ \ / _` | | | | |/ _ \/ __|
|
||||
# * / ___ \ |_| | | | (_) | | | (_| | | | | (_) | (_| | |_| | | __/\__ \
|
||||
# * /_/ \_\__,_|_| \___/|_| \__,_|_| |_|\___/ \__,_|\__,_|_|\___||___/
|
||||
# *
|
||||
# * © Copyright 2024
|
||||
# *
|
||||
# * https://t.me/AuroraModules
|
||||
# *
|
||||
# * 🔒 Code is licensed under GNU AGPLv3
|
||||
# * 🌐 https://www.gnu.org/licenses/agpl-3.0.html
|
||||
# * ⛔️ You CANNOT edit this file without direct permission from the author.
|
||||
# * ⛔️ You CANNOT distribute this file if you have modified it without the direct permission of the author.
|
||||
|
||||
# Name: Deanon
|
||||
# Author: Felix?
|
||||
# Commands:
|
||||
# .deanon
|
||||
# scope: hikka_only
|
||||
# meta developer: @AuroraModules
|
||||
|
||||
# meta pic: https://i.postimg.cc/Hx3Zm8rB/logo.png
|
||||
# meta banner: https://te.legra.ph/file/9bf5a040f3fcab0caf689.jpg
|
||||
|
||||
__version__ = (1, 0, 0)
|
||||
|
||||
from telethon.tl.types import Message # type: ignore
|
||||
from .. import loader
|
||||
|
||||
@loader.tds
|
||||
class Deanon(loader.Module):
|
||||
|
||||
strings = {
|
||||
"name": "Deanon",
|
||||
"try_d1": "<b><i>You can't do that. An Internet hero.</i></b>",
|
||||
"try_d2": "<b><i>Once again, I will delete the account for such jokes.</i></b>",
|
||||
}
|
||||
|
||||
strings_ru = {
|
||||
"try_d1": "<b><i>Нельзя таким заниматься. Интернет - герой.</i></b>",
|
||||
"try_d2": "<b><i>Еще раз и удалю аккаунт за такие приколы.</i></b>",
|
||||
}
|
||||
strings_uz = {
|
||||
"try_d1": "<b><i>Siz buni qila olmaysiz. Internet qahramoni.</i></b>",
|
||||
"try_d2": "<b><i>Bunday hazillar uchun yana bir bor o'z akkauntimni o'chirib tashlayman.</i></b>",
|
||||
}
|
||||
strings_de = {
|
||||
"try_d1": "<b><i>Das kannst du nicht machen. Internetheld.</i></b>",
|
||||
"try_d2": "<b><i>Noch einmal werde ich meinen Account für solche Witze löschen.</i></b>",
|
||||
}
|
||||
strings_es = {
|
||||
"try_d1": "<b><i>No puedes hacer eso. Héroe de Internet.</i></b>",
|
||||
"try_d2": "<b><i>Una vez más eliminaré mi cuenta por este tipo de bromas.</i></b>",
|
||||
}
|
||||
|
||||
@loader.command(
|
||||
ru_doc="Поиск по @UserName/Number/Email",
|
||||
uz_doc="Qidiruv @UserName/Number/Email",
|
||||
de_doc="Suche nach @UserName/Number/Email",
|
||||
es_doc="Buscar por @UserName/Number/Email",
|
||||
)
|
||||
async def deanon(self, message: Message):
|
||||
"""Search by @UserName/Number/Email"""
|
||||
await message.delete()
|
||||
if not hasattr(self, "flag"):
|
||||
self.flag = 1
|
||||
else:
|
||||
self.flag += 1
|
||||
|
||||
if self.flag <= 1:
|
||||
await self.client.send_message(message.peer_id, self.strings["try_d1"])
|
||||
else:
|
||||
await self.client.send_message(message.peer_id, self.strings["try_d2"])
|
||||
368
KorenbZla/HikkaModules/HerokuAuroraFeedBack.py
Normal file
368
KorenbZla/HikkaModules/HerokuAuroraFeedBack.py
Normal file
@@ -0,0 +1,368 @@
|
||||
# * _ __ __ _ _
|
||||
# * / \ _ _ _ __ ___ _ __ __ _| \/ | ___ __| |_ _| | ___ ___
|
||||
# * / _ \| | | | '__/ _ \| '__/ _` | |\/| |/ _ \ / _` | | | | |/ _ \/ __|
|
||||
# * / ___ \ |_| | | | (_) | | | (_| | | | | (_) | (_| | |_| | | __/\__ \
|
||||
# * /_/ \_\__,_|_| \___/|_| \__,_|_| |_|\___/ \__,_|\__,_|_|\___||___/
|
||||
# *
|
||||
# * © Copyright 2024
|
||||
# *
|
||||
# * https://t.me/AuroraModules
|
||||
# *
|
||||
# * 🔒 Code is licensed under GNU AGPLv3
|
||||
# * 🌐 https://www.gnu.org/licenses/agpl-3.0.html
|
||||
# * ⛔️ You CANNOT edit this file without direct permission from the author.
|
||||
# * ⛔️ You CANNOT distribute this file if you have modified it without the direct permission of the author.
|
||||
|
||||
# Name: AuroraFeedBack
|
||||
# Author: Felix? || n3rcy
|
||||
# Commands:
|
||||
# .flink | .banfeedback | .unbanfeedback
|
||||
# scope: hikka_only
|
||||
# meta developer: @AuroraModules & @nercymods
|
||||
|
||||
# meta pic: https://i.postimg.cc/Hx3Zm8rB/logo.png
|
||||
# meta banner: https://te.legra.ph/file/05a519da50f993b950260.jpg
|
||||
|
||||
__version__ = (1, 0, 2)
|
||||
|
||||
from aiogram.types import Message as AiogramMessage
|
||||
from aiogram.types import CallbackQuery as AiogramCallbackQuery
|
||||
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
|
||||
from ..inline.types import InlineCall # type: ignore
|
||||
from html import escape
|
||||
from .. import loader, utils
|
||||
|
||||
|
||||
@loader.tds
|
||||
class AuroraFeedBackMod(loader.Module):
|
||||
"""Multifunctional feedback bot."""
|
||||
|
||||
strings = {
|
||||
"name": "AuroraFeedBack",
|
||||
"new_m": "🗣 New message from",
|
||||
"not_text": "🔎 The text was not found.",
|
||||
"waiting_answer": "⏳ Waiting for answer to user",
|
||||
"flink": "Here is my link to the feedback bot",
|
||||
"owner_answer": "🗣 Owner's Response",
|
||||
"successfully_send": "💬 Message successfully sent",
|
||||
"not_arg": "❌ No UserID argument provided",
|
||||
"successfully_ban": "✅ User successfully banned",
|
||||
"successfully_unban": "✅ User successfully unbanned",
|
||||
"already_banned": "🚫 User is already banned",
|
||||
"not_in_ban": "✅ User is not in the ban list",
|
||||
"cfg_mode": "Enable/Disable feedback bot functionality",
|
||||
"cfg_custom_text": "Enter custom greeting text",
|
||||
"cfg_no_meta": "Enter custom text for /nometa",
|
||||
"cfg_no_meta_baner": "Enter custom link for meta-banner",
|
||||
}
|
||||
|
||||
strings_ru = {
|
||||
"new_m": "🗣 Новое сообщение от",
|
||||
"not_text": "🔎 Текст не найден.",
|
||||
"waiting_answer": "⏳ Ожидание ответа пользователя",
|
||||
"flink": "Вот моя ссылка на feedback бота",
|
||||
"owner_answer": "🗣 Ответ владельца",
|
||||
"successfully_send": "💬 Сообщение успешно отправлено",
|
||||
"not_arg": "❌ Не указан UserID",
|
||||
"successfully_ban": "✅ Пользователь успешно заблокирован",
|
||||
"successfully_unban": "✅ Пользователь успешно разблокирован",
|
||||
"already_banned": "🚫 Пользователь уже заблокирован",
|
||||
"not_in_ban": "✅ Пользователь не находится в списке заблокированных",
|
||||
"cfg_mode": "Включить/выключить функционал feedback бота",
|
||||
"cfg_custom_text": "Введите кастомный текст для приветствия",
|
||||
"cfg_no_meta": "Введите кастомный текст для команды /nometa",
|
||||
"cfg_no_meta_baner": "Введите кастомную ссылку на мета-баннер",
|
||||
}
|
||||
|
||||
strings_uz = {
|
||||
"new_m": "🗣 Yangi xabar",
|
||||
"not_text": "🔎 Matn topilmadi.",
|
||||
"waiting_answer": "⏳ Foydalanuvchidan javob kutilmoqda",
|
||||
"flink": "Bu mening feedback botim havolam",
|
||||
"owner_answer": "🗣 Egasi javobi",
|
||||
"successfully_send": "💬 Xabar muvaffaqiyatli yuborildi",
|
||||
"not_arg": "❌ UserID argument kiritilmagan",
|
||||
"successfully_ban": "✅ Foydalanuvchi muvaffaqiyatli bloklandi",
|
||||
"successfully_unban": "✅ Foydalanuvchi muvaffaqiyatli ochib tashlandi",
|
||||
"already_banned": "🚫 Foydalanuvchi allaqachon bloklangan",
|
||||
"not_in_ban": "✅ Foydalanuvchi blok ro'yxatida yo'q",
|
||||
"cfg_mode": "Feedback bot funktsiyasini yoqish/yopish",
|
||||
"cfg_custom_text": "Xush kelibsiz matnini kiriting",
|
||||
"cfg_no_meta": "/nometa uchun maxsus matnni kiriting",
|
||||
"cfg_no_meta_baner": "Meta-banner uchun maxsus havolani kiriting",
|
||||
}
|
||||
|
||||
strings_de = {
|
||||
"new_m": "🗣 Neue Nachricht von",
|
||||
"not_text": "🔎 Der Text wurde nicht gefunden.",
|
||||
"waiting_answer": "⏳ Warten auf die Antwort des Benutzers",
|
||||
"flink": "Hier ist mein Link zum Feedback-Bot",
|
||||
"owner_answer": "🗣 Antwort des Eigentümers",
|
||||
"successfully_send": "💬 Nachricht erfolgreich gesendet",
|
||||
"not_arg": "❌ Kein UserID-Argument angegeben",
|
||||
"successfully_ban": "✅ Benutzer erfolgreich gesperrt",
|
||||
"successfully_unban": "✅ Benutzer erfolgreich entsperrt",
|
||||
"already_banned": "🚫 Benutzer ist bereits gesperrt",
|
||||
"not_in_ban": "✅ Benutzer befindet sich nicht in der Sperrliste",
|
||||
"cfg_mode": "Feedback-Bot-Funktionalität aktivieren/deaktivieren",
|
||||
"cfg_custom_text": "Geben Sie benutzerdefinierten Begrüßungstext ein",
|
||||
"cfg_no_meta": "Geben Sie benutzerdefinierten Text für /nometa ein",
|
||||
"cfg_no_meta_baner": "Geben Sie einen benutzerdefinierten Link für den Meta-Banner ein",
|
||||
}
|
||||
|
||||
strings_es = {
|
||||
"new_m": "🗣 Nuevo mensaje de",
|
||||
"not_text": "🔎 No se encontró el texto.",
|
||||
"waiting_answer": "⏳ Esperando la respuesta del usuario",
|
||||
"flink": "Aquí está mi enlace al bot de retroalimentación",
|
||||
"owner_answer": "🗣 Respuesta del propietario",
|
||||
"successfully_send": "💬 Mensaje enviado con éxito",
|
||||
"not_arg": "❌ No se proporcionó el argumento UserID",
|
||||
"successfully_ban": "✅ Usuario bloqueado correctamente",
|
||||
"successfully_unban": "✅ Usuario desbloqueado correctamente",
|
||||
"already_banned": "🚫 El usuario ya está bloqueado",
|
||||
"not_in_ban": "✅ El usuario no está en la lista de bloqueados",
|
||||
"cfg_mode": "Activar/Desactivar la funcionalidad del bot de retroalimentación",
|
||||
"cfg_custom_text": "Ingrese texto de saludo personalizado",
|
||||
"cfg_no_meta": "Ingrese texto personalizado para /nometa",
|
||||
"cfg_no_meta_baner": "Ingrese el enlace personalizado para el meta-banner",
|
||||
}
|
||||
|
||||
def __init__(self):
|
||||
self.config = loader.ModuleConfig(
|
||||
loader.ConfigValue(
|
||||
"mode",
|
||||
True,
|
||||
lambda: self.strings["cfg_mode"],
|
||||
validator=loader.validators.Boolean(),
|
||||
),
|
||||
loader.ConfigValue(
|
||||
"start_custom_text",
|
||||
None,
|
||||
lambda: self.strings["cfg_custom_text"],
|
||||
),
|
||||
loader.ConfigValue(
|
||||
"no_meta",
|
||||
None,
|
||||
lambda: self.strings["cfg_no_meta"],
|
||||
),
|
||||
loader.ConfigValue(
|
||||
"no_meta_baner",
|
||||
"https://te.legra.ph/file/91a54dee84cf1ec5990fd.jpg",
|
||||
lambda: self.strings["cfg_no_meta_baner"],
|
||||
validator=loader.validators.Link(),
|
||||
),
|
||||
)
|
||||
|
||||
async def on_dlmod(self, client, db):
|
||||
self.db.set("AuroraFeedBackMod", "ban_list", [])
|
||||
|
||||
async def client_ready(self, client, db):
|
||||
self.forwarding_enabled = {}
|
||||
self._ban_list = self.db.get("AuroraFeedBackMod", "ban_list")
|
||||
self._name = utils.escape_html((await client.get_me()).first_name)
|
||||
self.db.set("AuroraFeedBackMod", "state", "done")
|
||||
|
||||
@loader.command(
|
||||
ru_doc="- Получить ссылку на feedback бота",
|
||||
uz_doc="- Feedback botga havolani olish",
|
||||
de_doc="- Erhalten Sie einen Link zum Feedback-Bot",
|
||||
es_doc="- Obtener un enlace al bot de retroalimentación",
|
||||
)
|
||||
async def flink(self, message):
|
||||
"""- Get a link to the feedback bot"""
|
||||
slinkbot = f"{self.strings['flink']}: https://t.me/{self.inline.bot_username}?start=AuroraFeedBack"
|
||||
await utils.answer(message, slinkbot)
|
||||
|
||||
@loader.command(
|
||||
ru_doc="[UserID] - Заблокировать пользователю feedback бота",
|
||||
uz_doc="[UserID] - Feedback botga foydalanuvchi kirishini bloklang",
|
||||
de_doc="[UserID] - Blockiere den Zugriff des Benutzers auf den Feedback-Bot",
|
||||
es_doc="[UserID] - Bloquear el acceso del usuario al bot de retroalimentación",
|
||||
)
|
||||
async def banfeedback(self, message):
|
||||
"""[UserID] - Block the feedback bot user"""
|
||||
user_id = utils.get_args_raw(message)
|
||||
if not user_id:
|
||||
await utils.answer(message, self.strings["not_arg"])
|
||||
else:
|
||||
user_id = int(user_id)
|
||||
if user_id not in self._ban_list:
|
||||
self._ban_list.append(user_id)
|
||||
self.db.set("AuroraFeedBackMod", "ban_list", self._ban_list)
|
||||
await utils.answer(message, self.strings["successfully_ban"])
|
||||
else:
|
||||
await utils.answer(message, self.strings["already_banned"])
|
||||
|
||||
@loader.command(
|
||||
ru_doc="[UserID] - Разблокировать пользователю feedback бота",
|
||||
uz_doc="[UserID] - Feedback bot foydalanuvchisini ochib tashlash",
|
||||
de_doc="[UserID] - Feedback-Bot-Benutzer entsperren",
|
||||
es_doc="[UserID] - Desbloquear al usuario del bot de retroalimentación",
|
||||
)
|
||||
async def unbanfeedback(self, message):
|
||||
"""[UserID] - Unblock the feedback bot user"""
|
||||
|
||||
user_id = utils.get_args_raw(message)
|
||||
if not user_id:
|
||||
await utils.answer(message, self.strings["not_arg"])
|
||||
else:
|
||||
user_id = int(user_id)
|
||||
if user_id in self._ban_list:
|
||||
self._ban_list.remove(user_id)
|
||||
self.db.set("AuroraFeedBackMod", "ban_list", self._ban_list)
|
||||
await utils.answer(message, self.strings["successfully_unban"])
|
||||
else:
|
||||
await utils.answer(message, self.strings["not_in_ban"])
|
||||
|
||||
async def aiogram_watcher(self, message: AiogramMessage):
|
||||
if self.config["mode"] is False:
|
||||
return
|
||||
|
||||
if message.from_user.id in list(self.db.get("AuroraFeedBackMod", "ban_list")):
|
||||
return
|
||||
|
||||
if message.text == "/start AuroraFeedBack":
|
||||
if self.config["start_custom_text"] is None:
|
||||
text = "Добро пожаловать в Aurora Feedback Bot!\nПожалуйста, ознакомтесь с /nometa"
|
||||
else:
|
||||
text = self.config["start_custom_text"]
|
||||
await message.answer(text)
|
||||
return
|
||||
|
||||
elif message.text == "/nometa":
|
||||
if self.config["no_meta"] is None:
|
||||
meta_text = "<b>🫦 Уважаемый пользователь!</b>\nПожалуйста, не задавайте мне вопросы такие, как:\n\n«Привет» , «Какие дела?» , «Что делаешь?» , «Чем занимаешься?» и т.д.\n\nЕсли вы хотите у меня что-то спросить, спрашивайте по делу, а также всю суть вопроса опишите в одном сообщении."
|
||||
else:
|
||||
meta_text = self.config["no_meta"]
|
||||
if self.config["no_meta_baner"] is None:
|
||||
await self.inline.bot.send_message(
|
||||
chat_id=message.from_user.id, text=meta_text
|
||||
)
|
||||
else:
|
||||
await self.inline.bot.send_photo(
|
||||
chat_id=message.from_user.id,
|
||||
photo=self.config["no_meta_baner"],
|
||||
caption=meta_text,
|
||||
)
|
||||
return
|
||||
|
||||
if message.from_user.id == self.tg_id:
|
||||
state = self.db.get("AuroraFeedBackMod", "state")
|
||||
if state.startswith("waiting_"):
|
||||
to_id = int(state.split("_")[1])
|
||||
waiting_message_id = int(state.split("_")[2])
|
||||
custom_text = f"{self.strings['owner_answer']}:\n\n{message.text}"
|
||||
await self.inline.bot.send_message(chat_id=to_id, text=custom_text)
|
||||
await self.inline.bot.delete_message(
|
||||
chat_id=message.chat.id, message_id=waiting_message_id
|
||||
)
|
||||
await self.inline.bot.send_message(
|
||||
chat_id=self.tg_id, text=f"{self.strings['successfully_send']}"
|
||||
)
|
||||
self.db.set("AuroraFeedBackMod", "state", "done")
|
||||
return
|
||||
|
||||
original_text = message.caption if message.caption else message.text
|
||||
user_id = message.from_user.id
|
||||
WriteInPM = f'<b><a href="tg://user?id={user_id}">✏️Write in PM</a></b>'
|
||||
custom_text = f"{self.strings['new_m']} {escape(message.from_user.first_name)}:\n\n{escape(original_text) if original_text is not None else self.strings['not_text']}\n\nUserID: {message.from_user.id}\n{WriteInPM}"
|
||||
|
||||
buttons = []
|
||||
if message.from_user.id != getattr(self, "_tg_id", None):
|
||||
buttons.append(
|
||||
[
|
||||
InlineKeyboardButton(
|
||||
text="📃 Reply", callback_data=f"reply_{user_id}"
|
||||
)
|
||||
]
|
||||
)
|
||||
buttons.append(
|
||||
[InlineKeyboardButton(text="🔐 Ban", callback_data=f"ban_{user_id}")]
|
||||
)
|
||||
buttons.append(
|
||||
[InlineKeyboardButton(text="🗑️ Delete", callback_data=f"MessageDelete")]
|
||||
)
|
||||
reply_markup = InlineKeyboardMarkup(inline_keyboard=buttons)
|
||||
|
||||
await self.inline.bot.send_message(
|
||||
chat_id=self.tg_id, text=custom_text, reply_markup=reply_markup
|
||||
)
|
||||
await self.inline.bot.send_message(
|
||||
chat_id=message.from_user.id, text=f"{self.strings['successfully_send']}"
|
||||
)
|
||||
|
||||
async def feedback_callback_handler(self, call: InlineCall):
|
||||
if call.data == "MessageDelete":
|
||||
self.inline.ss(call.from_user.id, False)
|
||||
await self.inline.bot.delete_message(
|
||||
chat_id=call.message.chat.id,
|
||||
message_id=call.message.message_id,
|
||||
)
|
||||
return
|
||||
if call.data.startswith("ban_"):
|
||||
user_id = int(call.data.split("_")[1])
|
||||
if user_id not in self._ban_list:
|
||||
self._ban_list.append(user_id)
|
||||
self.db.set("AuroraFeedBackMod", "ban_list", self._ban_list)
|
||||
reply_markup = InlineKeyboardMarkup(
|
||||
inline_keyboard=[
|
||||
[
|
||||
InlineKeyboardButton(
|
||||
text="🔓 Unban", callback_data=f"unban_{user_id}"
|
||||
)
|
||||
]
|
||||
]
|
||||
)
|
||||
await self.inline.bot.send_message(
|
||||
chat_id=self.tg_id,
|
||||
text=f"{self.strings['successfully_ban']} ({user_id})",
|
||||
reply_markup=reply_markup,
|
||||
)
|
||||
return
|
||||
if call.data.startswith("unban_"):
|
||||
user_id = int(call.data.split("_")[1])
|
||||
if user_id in self._ban_list:
|
||||
self._ban_list.remove(user_id)
|
||||
self.db.set("AuroraFeedBackMod", "ban_list", self._ban_list)
|
||||
reply_markup = InlineKeyboardMarkup(
|
||||
inline_keyboard=[
|
||||
[
|
||||
InlineKeyboardButton(
|
||||
text="🔐 Ban", callback_data=f"ban_{user_id}"
|
||||
)
|
||||
]
|
||||
]
|
||||
)
|
||||
await self.inline.bot.send_message(
|
||||
chat_id=self.tg_id,
|
||||
text=f"{self.strings['successfully_unban']} ({user_id})",
|
||||
reply_markup=reply_markup,
|
||||
)
|
||||
return
|
||||
if call.data.startswith("reply"):
|
||||
user_id = int(call.data.split("_")[1])
|
||||
self.db.set(
|
||||
"AuroraFeedBackMod",
|
||||
"state",
|
||||
f"waiting_{user_id}_{call.message.message_id}",
|
||||
)
|
||||
reply_markup = InlineKeyboardMarkup(
|
||||
inline_keyboard=[
|
||||
[
|
||||
InlineKeyboardButton(
|
||||
text="❌ Cancel", callback_data=f"cancel_reply"
|
||||
)
|
||||
]
|
||||
]
|
||||
)
|
||||
await self.inline.bot.send_message(
|
||||
chat_id=self.tg_id,
|
||||
text=f"{self.strings['waiting_answer']}",
|
||||
reply_markup=reply_markup,
|
||||
)
|
||||
if call.data == "cancel_reply":
|
||||
self.db.set("AuroraFeedBackMod", "state", "done")
|
||||
await self.inline.bot.delete_message(
|
||||
chat_id=call.message.chat.id, message_id=call.message.message_id
|
||||
)
|
||||
588
KorenbZla/HikkaModules/HistoryFacts.json
Normal file
588
KorenbZla/HikkaModules/HistoryFacts.json
Normal file
@@ -0,0 +1,588 @@
|
||||
{
|
||||
"RandomFact": [
|
||||
"Потери после войны Вермахта составили около шести миллионов человек. По статистике, соотношение общего числа погибших и умерших людей между СССР и Германией составляет 7,3:1. Из этого делаем вывод что в СССР погибло более 43 млн людей. Эти цифры учитывают потери гражданских: СССР — 16,9 млн чел., Германия — 2 млн чел.",
|
||||
"Не все знают о том, что после войны в Советском Союзе не отмечали праздник «День Победы» семнадцать лет.",
|
||||
"С сорок восьмого года праздник День Победы считался самым главным праздником, но его никто никогда не отмечал, он считался обыкновенным днем.",
|
||||
"В 1937 году на Московском авиационном заводе № 84 был разработан танк на воздушной подушке.",
|
||||
"Нижегородский завод шампанских вин в годы Великой Отечественной войны поставлял для фронта бутылки с «коктейлем Молотова».",
|
||||
"Первый раз День Победы праздновали обширно только после двух десятилетий в 1965 году. После этого День Победы стал нерабочим днем.",
|
||||
"После войны в СССР осталось только 127 миллионов жителей.",
|
||||
"На сегодняшний день Россия насчитывает сорок три миллиона советских граждан, убитых во время Великой Отечественной войны.",
|
||||
"Карельский фронт, которым командовал генерал-лейтенант Валериан Александрович Фролов, имел самую большую протяженность из всех фронтов Великой Отечественной войны - более 1600 км. Это был единственный фронт, на одном из участков которого, в районе Мурманска, немецко-фашистские войска не смогли нарушить государственную границу СССР.",
|
||||
"По официальным данным было приказано: о Великой Отечественной войне забыть и приложить все усилия на то, чтобы восстановить человеческим трудом разрушенные здания.",
|
||||
"На протяжении десятилетия после Победы СССР формально находился еще в состоянии войны с Германией. После принятия капитуляции немцами СССР решил не принимать и не подписывать мир с врагом; и получается, что остался с Германией в состоянии войны.",
|
||||
"25 января 1955 года Президиум Верховного совета СССР издает указ «О прекращении состояния войны между Советским Союзом и Германией». Этим указом формально оканчивается война с Германией.",
|
||||
"Первый парад победы состоялся в Москве 24 июня 1945 года.",
|
||||
"Блокада Ленинграда (ныне Санкт-Петербург) длилась 872 дня с 8.09.1941 по 27.01.1944 года.",
|
||||
"В это трудно поверить, но власти СССР не желали вести подсчеты погибших за время боевых действий.",
|
||||
"После окончания войны Сталин приблизительно взял цифру семь миллионов человек.",
|
||||
"Западные жители не поверили, что погибло семь миллионов жителей и стали опровергать этот факт.",
|
||||
"После смерти Сталина число погибших не пересматривалось.",
|
||||
"В 1943 году в США прекратили выпуск медных пенни и начали ковать монеты из оцинкованной стали. Медь была остро необходима для производства патронов.",
|
||||
"Как показала статистика Великой Отечественной войны, среди советских офицеров восемьдесят тысяч были женщины.",
|
||||
"Двадцать четыре воина Красной Армии в 1942 году в течение 2 месяцев держали оборону Дома Павлова во время Сталинградской битвы. По словам маршала Чуйкова, потери гитлеровцев, пытавшихся занять Дом Павлова, превысили потери при взятии Парижа.",
|
||||
"Реальные подсчеты погибшего населения начались только в конце восьмидесятого года.",
|
||||
"Во время Второй мировой войны немецкие матросы пронесли на борт линкора «Бисмарк» кота. Линкор был затоплен британской эскадрой через 9 дней после выхода в море, спаслись лишь 115 из 2200 членов экипажа. Кота подобрали английские моряки и взяли на борт эсминца «Казак», который через 5 месяцев был торпедирован немецкой подлодкой и затонул. Впоследствии кота, прозванного Непотопляемый Сэм, перевели на авианосец «Арк Ройял», который тоже затонул. Лишь после этого Сэма решили оставить на берегу, а сам он прожил до 1955 года.",
|
||||
"Официальные данные о числе погибших такие: с 1939-1945 гг. погибло сорок три миллиона четыреста сорок восемь человек.",
|
||||
"Общее число погибших составляет с 1941-1945 гг. двадцать шесть миллионов человек.",
|
||||
"Примерно 1,8 млн человек во время Великой Отечественной Войны погибли пленными или иммигрировали.",
|
||||
"По данным Бориса Соколова соотношение потерь военных Красной Армии и Восточного фронта (Верхмахта) составляет десять к одному.",
|
||||
"К большому сожалению, вопрос о числе погибших до сегодняшнего времени остается открытым, и на него никто не даст ответ.",
|
||||
"В общем, на фронте в разное время сражались от шестисот тысяч до одного миллиона женщин.",
|
||||
"Во времена Великой Отечественной войны образовывались женские формирования.",
|
||||
"На Бакинских заводах производили снаряды для «Катюш»",
|
||||
"Вообще, предприятиями Азербайджана на военные нужды во время Великой Отечественной войны было затрачено и переработано семьдесят пять тонн нефтепродуктов и нефти.",
|
||||
"В период сбора средств на создание танковых колонн и авиаэскадрилий девяностолетняя колхозница передала тридцать тысяч рублей.",
|
||||
"Среди воющих женщин было сформировано три полка, и называли их «ночные ведьмы».",
|
||||
"Утром второго мая сорок пятого года бойцы Мамедов, Бережной Ахмедзаде, Андреев под руководством лейтенанта Меджидова водрузили знамя победы над Бранденбургскими воротами.",
|
||||
"Триста тридцать четыре населенных пункта, которые находились в Украине, были полностью сожжены немцами вместе с людьми.",
|
||||
"Самый крупный город, который был захвачен уничтожителями, стал город Корюковка в Черниговской области.",
|
||||
"Всего за два дня в самом большом захваченном городе было сожжено 1290 домов, осталось только десять нетронутых и убито семь тысяч мирных жителей",
|
||||
"В период Великой Отечественной войны создавались добровольческие бригады и даже запасные стрелковые полки из женщин.",
|
||||
"Женщин снайперов подготавливала специальная центральная школа снайперов.",
|
||||
"Также была создана отдельная рота моряков.",
|
||||
"В это очень трудно поверить, но женщины иногда воевали лучше мужчин.",
|
||||
"Получили звание Герой Советского Союза восемьдесят семь женщин.",
|
||||
"На всех этапах войны провальных и победных употребляли алкоголь одинаково и в больших количествах.",
|
||||
"Больше четырехсот человек совершило подвиг, который аналогичен «матросовскому».",
|
||||
"Медалью «За взятие Берлина» было награждено порядка 1,1 млн солдат",
|
||||
"Некоторые диверсанты пустили под откос десятки эшелонов врага.",
|
||||
"Больше трехсот наименований техники врага уничтожены собаками истребителями танков.",
|
||||
"Водка полагалась не всем бойцам. С сорок первого года главный снабженец предложил установить параметры. Выдавать водку в размере ста грамм на человека в сутки красноармейцам и начальникам действующей армии.",
|
||||
"Сталин также добавил, что если хочешь пить водку, значит, надо идти на фронт, а не отсиживаться в тылу.",
|
||||
"Великая Отечественная война началась 22 июня 1941 года.",
|
||||
"Основной противник СССР в этой войне — нацистская Германия.",
|
||||
"Операция «Барбаросса» — кодовое название плана нападения Германии на СССР.",
|
||||
"СССР и Германия подписали пакт о ненападении в 1939 году, известный как Пакт Молотова-Риббентропа.",
|
||||
"В битве за Москву советские войска остановили наступление немцев в декабре 1941 года.",
|
||||
"Блокада Ленинграда длилась с 8 сентября 1941 года по 27 января 1944 года.",
|
||||
"Во время блокады Ленинграда погибло около 1 миллиона человек.",
|
||||
"Одним из самых ожесточенных сражений войны была Сталинградская битва.",
|
||||
"Сталинградская битва длилась с 17 июля 1942 года по 2 февраля 1943 года.",
|
||||
"Победа в Сталинградской битве стала переломным моментом в войне.",
|
||||
"Курская битва, произошедшая летом 1943 года, считается крупнейшей танковой битвой в истории.",
|
||||
"Операция «Цитадель» — кодовое название немецкого наступления на Курской дуге.",
|
||||
"Советские войска выиграли Курскую битву и перешли в наступление.",
|
||||
"Партизаны играли важную роль в борьбе против немецких оккупантов.",
|
||||
"Брестская крепость стала символом героического сопротивления в первые дни войны.",
|
||||
"В январе 1945 года Красная Армия начала Висло-Одерскую операцию.",
|
||||
"Висло-Одерская операция завершилась освобождением Варшавы.",
|
||||
"Операция «Багратион» летом 1944 года привела к освобождению Белоруссии.",
|
||||
"В апреле 1945 года советские войска начали Берлинскую операцию.",
|
||||
"Берлин пал 2 мая 1945 года.",
|
||||
"Адольф Гитлер покончил с собой 30 апреля 1945 года.",
|
||||
"8 мая 1945 года Германия подписала акт о капитуляции.",
|
||||
"День Победы в СССР и России отмечается 9 мая.",
|
||||
"Во время войны погибло около 27 миллионов советских граждан.",
|
||||
"В войне участвовало более 34 миллионов советских солдат.",
|
||||
"За героизм и мужество сотни тысяч солдат были награждены орденами и медалями.",
|
||||
"Знамя Победы было водружено над Рейхстагом 30 апреля 1945 года.",
|
||||
"Ленд-лиз — программа поставок США и Великобритании для поддержки СССР.",
|
||||
"На Восточном фронте СССР и Германия потеряли наибольшее количество солдат и техники.",
|
||||
"Битва за Кавказ предотвратила захват нефтяных месторождений нацистами.",
|
||||
"Освобождение Украины началось в 1943 году.",
|
||||
"Битва за Днепр осенью 1943 года стала одной из крупнейших операций на Восточном фронте.",
|
||||
"Подвиг Матросова, закрывшего своим телом амбразуру, стал символом самопожертвования.",
|
||||
"Танковая битва под Прохоровкой в июле 1943 года была частью Курской битвы.",
|
||||
"Советские партизаны часто подрывали железнодорожные пути, нарушая снабжение врага.",
|
||||
"Война разрушила более 1 700 городов и 70 000 деревень СССР.",
|
||||
"Оборона Севастополя длилась с октября 1941 по июль 1942 года.",
|
||||
"В ходе войны около 5 миллионов советских солдат попали в плен.",
|
||||
"Подвиг Зои Космодемьянской, казненной немцами в 1941 году, стал символом мужества.",
|
||||
"Подвиг Николая Гастелло, направившего свой горящий самолет на колонну врага, стал легендарным.",
|
||||
"В 1943 году началось контрнаступление советских войск под Сталинградом.",
|
||||
"Дорога жизни через Ладожское озеро обеспечивала снабжение блокадного Ленинграда.",
|
||||
"Ленинградский метрополитен во время блокады служил бомбоубежищем.",
|
||||
"Оборона Москвы включала в себя и народное ополчение.",
|
||||
"Советские женщины служили в армии в качестве медсестер, снайперов и летчиц.",
|
||||
"Ночные ведьмы — знаменитый женский авиационный полк, выполнявший ночные бомбардировки.",
|
||||
"В ходе войны были эвакуированы тысячи промышленных предприятий на восток СССР.",
|
||||
"В октябре 1941 года столица СССР временно переместилась из Москвы в Куйбышев.",
|
||||
"В августе 1942 года началась битва за Кавказ.",
|
||||
"Немецкие войска были остановлены в битве за Кавказ на подступах к Грозному.",
|
||||
"Война привела к колоссальным экономическим потерям для СССР.",
|
||||
"Операция «Уран» — советское контрнаступление под Сталинградом.",
|
||||
"Советские войска освободили Минск в июле 1944 года.",
|
||||
"В ходе войны были уничтожены многие исторические памятники и культурные объекты.",
|
||||
"Красная Армия провела стратегические наступательные операции, такие как Висло-Одерская и Берлинская.",
|
||||
"Война привела к созданию партизанских отрядов в тылу врага.",
|
||||
"Солдатам Красной Армии вручались награды за мужество, такие как орден Красной Звезды и орден Славы.",
|
||||
"Освобождение Крыма произошло в мае 1944 года.",
|
||||
"Многие города СССР были полностью разрушены и требовали послевоенного восстановления.",
|
||||
"Оборона Ленинграда включала артиллерийские дуэли и воздушные бои.",
|
||||
"Во время войны активно использовались минные поля и инженерные заграждения.",
|
||||
"Оборона Мурманска была важной для сохранения северного морского пути.",
|
||||
"Герой Советского Союза был высшим званием и наградой в СССР.",
|
||||
"Советские истребители, такие как Ла-5 и Як-9, использовались для борьбы с немецкими самолетами.",
|
||||
"Битва за Берлин была одной из самых кровопролитных в конце войны.",
|
||||
"В ходе войны советские войска освобождали концентрационные лагеря на территории Восточной Европы.",
|
||||
"Освобождение Белграда стало важным этапом в освобождении Югославии.",
|
||||
"Война привела к массовым потерям среди мирного населения на оккупированных территориях.",
|
||||
"Советские войска участвовали в освобождении Будапешта в феврале 1945 года.",
|
||||
"Оборона Севастополя длилась с октября 1941 по июль 1942 года.",
|
||||
"Советские войска активно использовали тактику глубокой обороны.",
|
||||
"В ходе войны проводились операции по форсированию рек, таких как Днепр и Висла.",
|
||||
"Освобождение Праги в мае 1945 года завершило боевые действия в Европе.",
|
||||
"Советские подводные лодки активно действовали в Балтийском и Черном морях.",
|
||||
"Оборона Сталинграда включала уличные бои и оборону зданий.",
|
||||
"Советские снайперы, такие как Людмила Павличенко, стали легендами войны.",
|
||||
"Во время войны была создана система тыла для снабжения фронта.",
|
||||
"Красная Армия проводила наступательные операции зимой, несмотря на суровые погодные условия.",
|
||||
"В ходе войны активно использовались радиостанции и шифровальные машины.",
|
||||
"Советские инженеры разрабатывали новые виды вооружений, такие как реактивные минометы «Катюша».",
|
||||
"Война привела к массовым эвакуациям мирного населения из прифронтовых зон.",
|
||||
"Операция «Багратион» привела к освобождению Белоруссии и частям Литвы и Польши.",
|
||||
"В ходе войны активно использовались бронетанковые войска и самоходная артиллерия.",
|
||||
"Советские войска участвовали в битве за Эльбу в апреле 1945 года.",
|
||||
"Освобождение Бухареста в августе 1944 года стало важным этапом в освобождении Румынии.",
|
||||
"Война привела к созданию системы военных госпиталей и санаториев.",
|
||||
"Советские войска использовали тактику глубокого обхода и окружения.",
|
||||
"Оборона Брестской крепости продолжалась несколько месяцев, несмотря на превосходство врага.",
|
||||
"Во время войны активно действовали диверсионные группы, подрывающие коммуникации врага.",
|
||||
"Война привела к значительным потерям среди советских офицеров и генералов.",
|
||||
"Красная Армия использовала десантные операции для захвата стратегических объектов.",
|
||||
"Операция «Искра» привела к прорыву блокады Ленинграда в январе 1943 года.",
|
||||
"Советские войска активно использовали артиллерию для подавления огневых точек врага.",
|
||||
"В ходе войны активно действовали санитарные поезда и эвакогоспитали.",
|
||||
"Красная Армия освободила Вильнюс в июле 1944 года.",
|
||||
"Советские войска участвовали в освобождении Дрездена в апреле 1945 года.",
|
||||
"Во время войны активно использовались воздушные десанты и парашютные войска.",
|
||||
"Операция «Суворов» в 1943 году привела к освобождению Орла и Белгорода.",
|
||||
"Советские войска участвовали в освобождении Варшавы в январе 1945 года.",
|
||||
"Во время войны были созданы учебные центры для подготовки новых солдат и офицеров."
|
||||
],
|
||||
|
||||
"AdolfFact": [
|
||||
"Во время Первой мировой войны британский солдат Генри Тэнди проявил милосердие к раненому немецкому пехотинцу, который позже оказался Адольфом Гитлером.",
|
||||
"Во время Второй мировой войны, во время операции «Мясной фарш», британская разведка успешно обманула Гитлера, заставив его думать, что союзники высаживаются в Греции, а не на Сицилии, переодев мертвого бездомного в форму капитана, снабдив его поддельными документами и высадив его у берегов Испании.",
|
||||
"После неудавшегося государственного переворота в 1923 году Гитлер отбыл только восемь месяцев из своего пятилетнего срока. Это был обычный приговор для тех, у кого, по мнению судьи, были благородные, но ошибочные мотивы.",
|
||||
"Адольф Гитлер (1938), Иосиф Сталин (1939, 1942) и Аятолла Хомени (1979) были «Человеком года» по версии TIME.",
|
||||
"Франсиско Франко поддрежал многие из тех же смертоносных ксенофобских / религиозных «решений», что и Гитлер и Муссолини (и его попросили присоединиться к Оси во время Второй мировой войны), но он сумел сохранить нейтралитет. Даже Ричард Никсон увековечил его как «верного друга и союзника Соединенных Штатов».",
|
||||
"Череп, найденный советами в 2000 году, который, как считалось, принадлежал Адольфу Гитлеру, был исследован в 2009 году и подтвердил, что он принадлежит женщине в возрасте 30 лет.",
|
||||
"На Адольфа Гитлера было совершено более 40 покушений.",
|
||||
"После того, как Джесси Оуэнс выиграл 4 золотые медали на Олимпийских играх 1936 года, проходивших в Берлине, Адольф Гитлер послал Оуэнсу памятную фотографию с надписью в кабинете. Ни президент Франклин Д. Рузвельт, ни его преемник Гарри С. Трумэн не удостаивали Джесси Оуэнса почестями во время их президентских сроков.",
|
||||
"Придя к власти в январе 1933 года, нацистская партия приняла всеобъемлющий свод законов о защите животных, и Гитлер сказал: «В новом рейхе больше не будет разрешено жестокое обращение с животными».",
|
||||
"Немецкий писатель опубликовал свой роман в 2012 году под названием Er ist Wieder da («Он снова вернулся»), в котором Гитлер просыпается в современном Берлине, ничего не помня с 1945 года, и становится комиком.",
|
||||
"Французское сопротивление перерезало лифтовые кабели, ведущие к Эйфелевой башне, чтобы помешать Гитлеру посетить ее во время его визита, когда Париж пал. Столкнувшись с перспективой подняться по 1500 ступеням, он отказался.",
|
||||
"Гитлер организовал самое мощное движение против курения в мире в 1930-х и начале 1940-х годов.",
|
||||
"Почти вся прибыль от «Майн кампф» Гитлера, от его изображений и его произведений искусства идет на благотворительность. Бавария владеет правами на прибыль и иногда испытывает трудности с поиском благотворительной организации, чтобы сделать пожертвование, поскольку такой доход считают «кровавыми деньгами».",
|
||||
"Один из личных шоферов Гитлера и его близкий друг Эмиль Морис был признан евреем, и Генрихом Гиммлером был исключен из СС. Узнав, что Морис еврейского происхождения, Гитлер сделал исключение для Мориса и его братьев, назвав их «почетными арийцами».",
|
||||
"Если бы отец Гитлера не сменил фамилию в 1877 году, Гитлера звали бы Адольф Шикльгрубер.",
|
||||
"После того, как в 1943 году была введена тотальная военная экономика, Гитлер постепенно закрыл, а не мгновенной запретил, производство женской косметики, чтобы не расстраивать Еву Браун.",
|
||||
"Гитлер планировал собрать тысячи еврейских артефактов, чтобы построить «Музей вымершей расы».",
|
||||
"Чтобы способствовать междоусобицам и максимизировать власть, Адольф Гитлер намеренно отдавал противоречивые приказы офицерам, чьи обязанности, как он знал, будут пересекаться.",
|
||||
"Гитлер случайно разбомбил дом своего племянника в Ливерпуле, поэтому племянник переехал в Соединенные Штаты, чтобы воевать с союзниками.",
|
||||
"Гитлер возненавидел футбол, потому что его нельзя было переделать так, чтобы обеспечить победу немцев над немцами.",
|
||||
"Гитлер написал вторую книгу после «Майн кампф» в 1928 году. В ней он описал, почему он пошел на войну в Европе, и как он восхищался программами евгеники в США. Она никогда не публиковалась, потому что он боялся, что это может повредить и без того низким продажам Mien Kampf.",
|
||||
"У Гитлера был еврейско-австрийский врач, который в детстве не брал с семьи Гитлера денег из-за их экономических трудностей. И за это Гитлер был ему «вечно благодарен», не приговорив его к концентрационному лагерю и называя его «благородным евреем».",
|
||||
"Планы убийства Адольфа Гитлера были отменены, потому что опасались, что его преемником будет более рациональный и эффективный лидер.",
|
||||
"Когда Сталинградская битва казалась для немцев проигранной, Гитлер ожидал, что немецкий генерал Ф. Паулюс покончит с собой. Ответ генерала был таков: «У меня нет намерения застрелиться из-за этого чешского капрала». Паулюс сдался 2 февраля 1943 года.",
|
||||
"Адольф Гитлер никогда не считал китайцев и японцев ниже арийцев. Он считал, что «их прошлая история превосходит нашу собственную».",
|
||||
"Гитлер запретил Нобелевскую премию и учредил свою собственную немецкую национальную премию в области искусства и науки и присудил ее Фердинанду Порше, который разработал первый в мире гибридный автомобиль, а также Volkswagen Beetle.",
|
||||
"Гитлер настолько восхищался греческим сопротивлением вторгшейся немецкой армии, что приказал освободить всех греческих военнопленных за «их доблестную выправку».",
|
||||
"Нацистская партия попыталась превратить Рождество в нерелигиозный праздник, посвященный пришествию Гитлера, заменив Святого Николая Одином, «Человеком Солнцестояния», и свастикой на верхушках рождественских елок.",
|
||||
"Когда высадились войска «Дня Д», Гитлер спал. Ни один из его генералов не осмелился послать подкрепление без его разрешения, и никто не осмелился разбудить его.",
|
||||
"Еврейский адвокат по имени Ханс Литтен посадил восходящего политика Адольфа Гитлера на место свидетеля и подверг его перекрестному допросу в течение 3 часов. Литтен был позже арестован, когда нацисты пришли к власти, и его жестоко пытали в течение 5 лет, пока он не покончил с собой.",
|
||||
"Сигналом руки биржевого брокера для Deutsche Bank является указательный палец горизонтально под носом. Его происхождение: усы Гитлера.",
|
||||
"Планировщики британской разведки всерьез рассматривали возможность тайного введения небольших доз эстрогена в пищу Адольфу Гитлеру, чтобы «сделать его характер менее агрессивным» и заставить его усы отпасть.",
|
||||
"Гитлер планировал сократить «негерманское население» в оккупированных странах, «убедив их в том, что вакцинация является очень опасной».",
|
||||
"Гитлера вызвали в качестве свидетеля по делу об убийстве 4 штурмовиков, прежде чем он стал канцлером. Он подвергся перекрестному допросу в течение 3 часов, вышел из себя, и его вспышка гнева записана показаниями.",
|
||||
"Адольф Гитлер испытывал смешанные чувства по поводу битвы за Сингапур, поскольку он чувствовал, что решительное поражение Британии от рук японцев плохо отразилось на белой расе.",
|
||||
"Во время Второй мировой войны немецкие офицеры, отправленные в Великобританию в качестве военнопленных, жили в роскоши в Трент-парке. Это было сделано для того, чтобы они чувствовали себя спокойно. Однако за ними следили 100 «слушателей». Пленные раскрыли секреты о Холокосте, событиях в Берлине, безумии Гитлера и ракетных базах V2.",
|
||||
"Немецкий генерал времен Второй мировой войны Эрвин Роммель отказался выполнить приказ Гитлера о казни военнопленных евреев.",
|
||||
"В 1960 году израильские агенты установили наблюдение за домом в Аргентине, подозревая, что приспешник Гитлера Адольф Эйхман и его семья переехали туда. Наблюдая за его приходами и уходами в течение нескольких недель, агенты получили необходимые доказательства, когда он вернулся домой с букетом цветов 21 марта - в 25-ю годовщину свадьбы Эйхмана и его жены.",
|
||||
"План Гитлера в отношении Москвы после ее захвата во время Второй мировой войны состоял в том, чтобы убить всех ее жителей и создать озеро вместо города.",
|
||||
"После Первой мировой войны французские железнодорожные вагоны, в которых сдалась Германия, хранились в музее. Во время Второй мировой войны, когда Франция готовилась к капитуляции, Гитлер приказал снести стены музея и вернуть железнодорожные вагоны на место перемирия 1918 года, чтобы унизить французов.",
|
||||
"Операция союзников по сокрытию вторжения в день «Д» включала фальшивое радиосообщение, двойных агентов, австралийского актера и фальшивые планы вторжения в Кале, Норвегию, Средиземноморье и на Балканы. Все это было настолько эффективно, что Гитлер считал, что настоящее вторжение началось только через семь недель после дня «Д».",
|
||||
"Зона 51 была / является экспериментальной авиабазой. Причина, по которой они так тщательно охраняли ее, заключалась не в инопланетянах, а в том, что там они испытывали очень чувствительные самолеты, которые потенциально могли изменить ход войны на фундаментальном уровне. SR-71 был разработан там и испытан много раз. Они также пытались разработать летающую тарелку (есть видео, на котором кто-то управляет плавающим круглым диском), которую Гитлер также пытался разработать.",
|
||||
"В 1931 году, после того, как Техасские рейнджеры забаррикадировали мост, перекинутый через границу между Техасом и Оклахомой, губернатор штата Оклахома «Люцерна Билл» Мюррей появился на месте, вооруженный револьвером, при поддержке Национальной гвардии Оклахомы, чтобы вновь открыть мост. Эта бескровная «война на мосту через Красную реку» привлекла внимание даже Адольфа Гитлера.",
|
||||
"Чарли Чаплин снял свой фильм, высмеивающий Гитлера, на свои собственные деньги, потому что Голливуд боялся потерять деньги, если они Гитлер победит.",
|
||||
"Пистолет, ставший популярным благодаря Джеймсу Бонду, Walther PPK, той же модели, из которой Гитлер покончил с собой.",
|
||||
"Во времена Третьего рейха арийские матери, посвятившие свою жизнь рождению детей, были награждены Крестом матери и были уважаемыми государственными служащими, которых гитлеровская молодежь приветствовала на улицах.",
|
||||
"В 1933 году в Торонто любительский бейсбольный матч перерос в массовый расовый бунт, когда группа сторонников нацистов, выступавшая против игроков-евреев, развернула грубый флаг со свастикой. Толпа, из более чем 10 000 граждан, возбужденных криками «Хайль Гитлер», внезапно превратилась в беспорядочную массу.",
|
||||
"Существует только одна запись голоса Гитлера, где он не произносит речь. Это частная беседа между ним и финским лидером Маннергеймом, секретно записанная звукорежиссером в 1942 году.",
|
||||
"Чарли Чаплин подумывал о том, чтобы не представлять общественности свой фильм «Великий диктатор», потому что он беспокоился, что его могут запретить, или что люди могут посчитать насмешки над Гитлером слишком смешными. Узнав об этом, Рузвельт отправил Чаплину сообщение, призывая его опубликовать фильм.",
|
||||
"Хотя Гитлер был в союзе с Японией, он планировал начать войну против «желтых людей» Азии в окончательном противостоянии (Третья мировая война) между нацистами и Японской империей, чтобы увидеть, кто действительно будет доминировать в мире после победы Оси.",
|
||||
"Адольф Гитлер родился 20 апреля 1889 года в Браунау-на-Инне, Австро-Венгрия.",
|
||||
"Он был четвертым из шести детей Алоиса и Клары Гитлер.",
|
||||
"В детстве Гитлер мечтал стать художником и дважды пытался поступить в Венскую академию художеств, но оба раза был отвергнут.",
|
||||
"После смерти отца в 1903 году и матери в 1907 году Гитлер переехал в Вену.",
|
||||
"В Венском периоде своей жизни Гитлер жил в приютах и питался в бесплатных столовых для бедных.",
|
||||
"В 1913 году Гитлер переехал в Мюнхен, Германия.",
|
||||
"Когда началась Первая мировая война, Гитлер добровольно поступил в германскую армию.",
|
||||
"В армии он служил связистом и участвовал в битвах на Западном фронте.",
|
||||
"Гитлер был награжден Железным крестом I и II степени за храбрость.",
|
||||
"В 1918 году он временно ослеп после газовой атаки и провел время в госпитале.",
|
||||
"Гитлер винил евреев и коммунистов в поражении Германии в Первой мировой войне.",
|
||||
"После войны он присоединился к Немецкой рабочей партии, которая позже стала Национал-социалистической немецкой рабочей партией (НСДАП).",
|
||||
"В 1923 году Гитлер возглавил неудавшуюся попытку государственного переворота, известную как Пивной путч.",
|
||||
"После путча Гитлер был арестован и провел девять месяцев в тюрьме, где написал свою автобиографическую книгу 'Майн Кампф'.",
|
||||
"'Майн Кампф' стала основой нацистской идеологии и изложила антисемитские и антикоммунистические взгляды Гитлера.",
|
||||
"В 1933 году Гитлер был назначен канцлером Германии.",
|
||||
"После смерти президента Пауля фон Гинденбурга в 1934 году Гитлер объединил должности канцлера и президента, став 'фюрером' Германии.",
|
||||
"Гитлер активно использовал пропаганду для укрепления своего режима и продвижения нацистских идей.",
|
||||
"Он инициировал масштабные проекты общественных работ, такие как строительство автобанов, для борьбы с безработицей.",
|
||||
"Гитлер стремился к расширению 'жизненного пространства' для немецкого народа, что привело к агрессивной внешней политике.",
|
||||
"В 1938 году Германия аннексировала Австрию в рамках Аншлюса.",
|
||||
"Позже в том же году Германия присоединила Судеты, часть Чехословакии.",
|
||||
"В 1939 году Германия вторглась в Польшу, что стало началом Второй мировой войны.",
|
||||
"Гитлер заключил пакт о ненападении с Советским Союзом, известный как Пакт Молотова-Риббентропа.",
|
||||
"Гитлер верил в превосходство арийской расы и стремился к уничтожению евреев и других 'нежелательных' групп.",
|
||||
"Во время его правления была организована систематическая депортация и уничтожение евреев, известное как Холокост.",
|
||||
"Гитлер был ответственен за убийство миллионов людей, включая шесть миллионов евреев.",
|
||||
"Его военные амбиции привели к оккупации значительной части Европы.",
|
||||
"Гитлер разрабатывал планы по созданию 'тысячелетнего рейха', который должен был просуществовать тысячу лет.",
|
||||
"В 1941 году Гитлер нарушил пакт с СССР и начал операцию 'Барбаросса', вторгшись в Советский Союз.",
|
||||
"В 1942 году началась битва за Сталинград, которая стала поворотным моментом в войне.",
|
||||
"Гитлер страдал от ряда заболеваний, включая болезнь Паркинсона.",
|
||||
"Он принимал многочисленные медикаменты, назначенные его личным врачом Теодором Мореллем.",
|
||||
"Гитлер был вегетарианцем и противником курения.",
|
||||
"Он имел сильную привязанность к своему собаке по имени Блонди.",
|
||||
"Гитлер был известен своими ораторскими способностями и часто выступал перед большими аудиториями.",
|
||||
"Он использовал символику и ритуалы, чтобы усилить влияние нацистской идеологии.",
|
||||
"В 1944 году на Гитлера было совершено покушение, известное как Заговор 20 июля, но он выжил.",
|
||||
"К концу войны Гитлер отказывался признать поражение и призывал к тотальной войне.",
|
||||
"В апреле 1945 года, когда советские войска окружили Берлин, Гитлер находился в своем бункере под рейхсканцелярией.",
|
||||
"30 апреля 1945 года Гитлер покончил с собой, приняв цианид и выстрелив себе в голову.",
|
||||
"Его тело было найдено и сожжено его ближайшими соратниками.",
|
||||
"Смерть Гитлера привела к окончанию нацистского режима.",
|
||||
"Гитлер никогда не был женат, но за день до своей смерти он женился на Еве Браун.",
|
||||
"Гитлер верил в астрологию и оккультные науки.",
|
||||
"Он был большим поклонником музыки Рихарда Вагнера.",
|
||||
"Гитлер не имел детей.",
|
||||
"Его личная библиотека включала книги по архитектуре, истории и искусству.",
|
||||
"Гитлер использовал титул 'фюрер', что означает 'лидер' на немецком языке.",
|
||||
"Его правление привело к разрушению множества городов и гибели миллионов людей.",
|
||||
"Гитлер верил в идею 'великой Германии', объединяющей все немецкие народы.",
|
||||
"Он пропагандировал идею социальной дарвинизма и расовой чистоты.",
|
||||
"Гитлер часто использовал антисемитскую риторику в своих речах.",
|
||||
"Он был ключевой фигурой в создании Третьего рейха.",
|
||||
"Гитлер активно поддерживал программу евгеники.",
|
||||
"Он верил в необходимость уничтожения 'неполноценных' людей, таких как инвалиды и психически больные.",
|
||||
"Гитлер часто говорил о необходимости завоевания 'жизненного пространства' на Востоке.",
|
||||
"Его агрессивная внешняя политика привела к созданию коалиции против Германии.",
|
||||
"Гитлер активно поддерживал использование пропаганды для контроля над населением.",
|
||||
"Он контролировал все аспекты жизни в нацистской Германии, включая образование, медиа и культуру.",
|
||||
"Гитлер считал себя великим стратегом и часто вмешивался в военные планы.",
|
||||
"Его решения часто основывались на интуиции и идеологии, а не на рациональных расчетах.",
|
||||
"Гитлер был ответственен за создание гестапо — тайной полиции нацистского режима.",
|
||||
"Он инициировал строительство концентрационных лагерей для политических противников и 'нежелательных' групп.",
|
||||
"Гитлер верил в необходимость создания автократического государства.",
|
||||
"Его политика привела к массовым депортациям и уничтожению целых этнических групп.",
|
||||
"Гитлер был ответственен за разрушение демократических институтов в Германии.",
|
||||
"Он активно поддерживал милитаризацию Германии и создание мощной армии.",
|
||||
"Гитлер стремился к уничтожению коммунизма и Советского Союза.",
|
||||
"Его правление привело к масштабным экономическим преобразованиям в Германии.",
|
||||
"Гитлер был противником Версальского договора и стремился к его отмене.",
|
||||
"Он активно использовал молодежные организации, такие как Гитлерюгенд, для продвижения нацистской идеологии.",
|
||||
"Гитлер контролировал все аспекты пропаганды, включая кинематограф и искусство.",
|
||||
"Его правление привело к созданию тоталитарного режима в Германии.",
|
||||
"Гитлер активно использовал секретные службы для подавления оппозиции.",
|
||||
"Его агрессивная политика привела к началу Второй мировой войны.",
|
||||
"Гитлер верил в необходимость создания 'нового порядка' в Европе.",
|
||||
"Он активно поддерживал развитие тяжелой промышленности и военной техники.",
|
||||
"Гитлер был ответственен за разрушение и оккупацию многих европейских стран.",
|
||||
"Его правление привело к созданию многочисленных союзов и коалиций против Германии.",
|
||||
"Гитлер активно поддерживал использование научных достижений для военных целей.",
|
||||
"Его политика привела к массовым разрушениям и гибели миллионов людей.",
|
||||
"Гитлер был ответственен за создание системы концентрационных и трудовых лагерей.",
|
||||
"Его агрессивная внешняя политика привела к созданию многочисленных фронтов во время Второй мировой войны.",
|
||||
"Гитлер был ответственен за массовые убийства и геноцид.",
|
||||
"Его правление привело к созданию системы тоталитарного контроля и подавления свободы слова.",
|
||||
"Гитлер активно поддерживал использование пропаганды для создания культа личности.",
|
||||
"Его правление привело к массовым потерям среди гражданского населения и военных.",
|
||||
"Гитлер верил в необходимость создания 'великой Германии' путем завоеваний и аннексий.",
|
||||
"Его агрессивная политика привела к разрушению международного порядка и началу глобального конфликта."
|
||||
],
|
||||
|
||||
"MussoliniFact": [
|
||||
"Ещё в годы учёбы Муссолини пристрастился к публичным выступлениям, полюбил аплодисменты и внимание толпы. Он пробовал себя в роли оратора уже с 18 лет, выступая перед небольшими аудиториями.",
|
||||
"В 1903 году Муссолини по запросу Италии был арестован швейцарской полицией за уклонение от призыва, но уже в ноябре 1904 года, после погашения судимости в результате амнистии по случаю дня рождения принца Умберто, он был депортирован в Италию и впоследствии добровольцем записался в итальянскую армию.",
|
||||
"Муссолини редко мылся. Его скособоченный воротник был почти всегда грязным, шнурки на ботинках часто болтались, волосы были длинными и нечесаными.",
|
||||
"Он был нервным, легко возбудимым, жалким, склонным к богохульству человеком, мстительным, нарочито плохо одевавшимся лентяем, ненавидевшим физический труд и возомнившим себя интеллектуалом.",
|
||||
"В возрасте 22 лет он регулярно напивался, и часто после того, как его собутыльники ложились спать, продолжал болтаться в одиночку по темным улицам города, выкрикивая что-то, декламируя стихи Кардуччи или выступая с речью на площади перед фонтаном.",
|
||||
"Благословения родителей жены на первый брак получил интересным способом, после 3 неудачных просьб он достал пистолет и сказал «4 пули. 3 для вас. 1 для меня». Родители дали своё согласие в тот же час.",
|
||||
"Один раз снаряд попал в окоп, где сидели 7 итальянских солдат. Выжил один единственный — Бенито Муссолини. В тот момент он был на фронте полтора месяца, всё оставшееся время он пролежал в больнице, так что легенды про его фронтовой героизм являются мифом. Не смотря на родственные идеологии с Германией во главе с Гитлером, Муссолини готовился к войне против Германии, а союзниками должны были стать Франция и Англия, позже всё произошло наоборот.",
|
||||
"Так как отец Муссолини увлекался историей и политикой, он был назван в честь мексиканского реформатора Бенито Хуарес, другие дети в семье были названы по такому же признаку.",
|
||||
"Отец Муссолини был ярым социалистом, часто принимал участие в митингах и выступал на них с речью, так под влиянием отца, Бенито тоже стал социалистом.",
|
||||
"В школе маленький Муссолини был не управляем, уже в первый год обучения он отличился в школе тем, что пырнул ножом мальчика, после этого был переведен в другую школу, но и там Бенито часто вступал в драки и проявлял свою жестокость.",
|
||||
"Муссолини чтобы избежать службу в армии сбежал в Швейцарию, где посещает социалистические мероприятия, на одном из которых познакомился с Лениным.",
|
||||
"До такого как Муссолини стал правителем Италии, он успел поработать преподавателем в университете, а также был журналистом.",
|
||||
"В молодости Бенито придерживался идей социализма, атеизма и пацифизма, он даже устраивал митинг против войны в Ливии, но с годами его взгляды радикально изменились.",
|
||||
"Во время Первой Мировой войны Муссолини писал, что победа Германии означала бы конец свободы в Европе и Италии необходимо занят позицию выгодную Франции. После этого заявления он был уволен со своей должности главного редактора газеты 'Аванти!'",
|
||||
"В феврале 1922 г. во время визита города Пулу, Муссолини назвал славян низшими и варварскими и заявил, что легко пожертвовать 500 тысяч славян, ради спасения 50 тысяч итальянцев, также тогда он издал закон о запрете смешении рас.",
|
||||
"Бенито Муссолини родился 29 июля 1883 года в городе Предаппио, Италия.",
|
||||
"Его полное имя — Бенито Амилькаре Андреа Муссолини.",
|
||||
"Отец Муссолини был кузнецом и активным социалистом, а мать — школьной учительницей.",
|
||||
"Муссолини был назван в честь мексиканского революционера Бенито Хуареса.",
|
||||
"В молодости Муссолини был ярым социалистом и даже редактором социалистической газеты.",
|
||||
"В 1914 году он изменил свои взгляды и стал сторонником итальянского национализма и милитаризма.",
|
||||
"Муссолини участвовал в Первой мировой войне и был ранен на фронте.",
|
||||
"После войны он основал Национальную фашистскую партию 'PNF' в 1919 году.",
|
||||
"В 1922 году Муссолини и его последователи организовали Марш на Рим, что привело к захвату власти.",
|
||||
"В октябре 1922 года король Виктор Эммануил III назначил Муссолини премьер-министром Италии.",
|
||||
"Муссолини стремился создать «новую Римскую империю» и расширить итальянское влияние в Средиземноморье.",
|
||||
"В 1925 году он провозгласил себя «дуче», что означает «лидер» на итальянском языке.",
|
||||
"Муссолини инициировал масштабные общественные работы, такие как строительство дорог и инфраструктуры.",
|
||||
"Он стремился к созданию корпоративного государства, где государство контролировало бы экономику и профсоюзы.",
|
||||
"Муссолини активно использовал пропаганду для укрепления своего режима.",
|
||||
"Он заключил Латеранские соглашения с Ватиканом в 1929 году, что привело к созданию независимого государства Ватикан.",
|
||||
"Муссолини стремился к усилению итальянской армии и увеличению военного бюджета.",
|
||||
"В 1935 году Италия вторглась в Эфиопию, что привело к созданию Итальянской Восточной Африки.",
|
||||
"Италия вышла из Лиги Наций в 1937 году после международного осуждения за агрессию в Эфиопии.",
|
||||
"Муссолини поддерживал Франсиско Франко в гражданской войне в Испании.",
|
||||
"В 1939 году Муссолини заключил с Гитлером Пакт стали, формализовав союз между Италией и Германией.",
|
||||
"Италия вступила во Вторую мировую войну на стороне оси в 1940 году.",
|
||||
"Муссолини стремился расширить итальянское влияние на Балканах и в Северной Африке.",
|
||||
"Итальянская армия потерпела серию поражений в Северной Африке и на Балканах.",
|
||||
"В 1943 году союзники высадились на Сицилии, что привело к падению режима Муссолини.",
|
||||
"В июле 1943 года Муссолини был свергнут и арестован по приказу короля Виктора Эммануила III.",
|
||||
"Гитлер организовал операцию по освобождению Муссолини, и он был спасен немецкими парашютистами.",
|
||||
"После освобождения Муссолини возглавил марионеточное государство Сало на севере Италии.",
|
||||
"Муссолини продолжал сотрудничать с нацистской Германией до конца войны.",
|
||||
"В апреле 1945 года он попытался бежать в Швейцарию, но был захвачен итальянскими партизанами.",
|
||||
"Муссолини и его любовница Клара Петаччи были казнены 28 апреля 1945 года.",
|
||||
"Их тела были выставлены на публичное обозрение в Милане.",
|
||||
"Муссолини был женат на Ракеле Гиди, у них было пятеро детей.",
|
||||
"Дочь Муссолини, Эдда, была замужем за Галеаццо Чиано, министром иностранных дел Италии.",
|
||||
"Муссолини был противником демократии и считал её слабой формой правления.",
|
||||
"Он активно использовал массовые митинги и парады для демонстрации силы фашистского режима.",
|
||||
"Муссолини был вдохновлён Древним Римом и часто использовал римскую символику и риторику.",
|
||||
"В юности Муссолини преподавал в школе и работал журналистом.",
|
||||
"Он писал множество статей и книг, продвигая свои политические идеи.",
|
||||
"Муссолини был известен своей харизмой и ораторским мастерством.",
|
||||
"Он стремился к созданию автократического государства, контролирующего все аспекты жизни.",
|
||||
"Муссолини поддерживал агрессивную внешнюю политику и экспансионизм.",
|
||||
"Его правление привело к значительным экономическим и социальным изменениям в Италии.",
|
||||
"Муссолини активно поддерживал развитие авиации и создал итальянские военно-воздушные силы.",
|
||||
"Он был противником коммунизма и социализма.",
|
||||
"Муссолини пропагандировал идею о превосходстве итальянской нации.",
|
||||
"Он стремился к восстановлению «величия Италии» на мировой арене.",
|
||||
"После смерти Муссолини фашистская идеология была осуждена и запрещена в Италии.",
|
||||
"Муссолини оставил значительное наследие, которое до сих пор вызывает споры и дискуссии.",
|
||||
"Муссолини был крещен в католической церкви, но в молодости отошел от религии, называя себя атеистом.",
|
||||
"Его прозвище «дуче» стало символом фашистской диктатуры в Италии.",
|
||||
"Муссолини считал, что для создания сильного государства необходимо подавление всех форм оппозиции.",
|
||||
"Его правление характеризовалось жестокой политической репрессией и ликвидацией демократических институтов.",
|
||||
"Муссолини любил спорт и активно поддерживал развитие футбола в Италии.",
|
||||
"Он выступал за расширение колониальной империи Италии в Африке.",
|
||||
"Муссолини основал фашистскую молодежную организацию «Балилла» для воспитания подрастающего поколения в духе фашизма.",
|
||||
"В 1936 году Италия и Германия поддержали Франко в испанской гражданской войне, что сблизило их режимы.",
|
||||
"Муссолини использовал итальянское кино и радио для пропаганды фашистских идей.",
|
||||
"Его политическая карьера началась с избрания в парламент Италии в 1921 году.",
|
||||
"Муссолини поддерживал программу принудительной коллективизации сельского хозяйства.",
|
||||
"Он стремился к индустриализации и модернизации экономики Италии.",
|
||||
"Муссолини инициировал масштабные проекты по мелиорации и ирригации в сельских районах.",
|
||||
"Его режим активно боролся с мафией в Италии.",
|
||||
"Муссолини проводил политику итальянизации на завоеванных территориях.",
|
||||
"Он поддерживал развитие автопромышленности, что привело к созданию знаменитого итальянского автоконцерна Fiat.",
|
||||
"Муссолини инициировал строительство новых городов и инфраструктуры, таких как город Эур в Риме.",
|
||||
"Его режим использовал архитектуру для демонстрации мощи фашистского государства.",
|
||||
"Муссолини был большим поклонником древнеримской истории и культуры.",
|
||||
"Он часто проводил время на своей вилле в Рокка-де-Папа, недалеко от Рима.",
|
||||
"Муссолини верил в необходимость сильной центральной власти для обеспечения стабильности.",
|
||||
"Его правление сопровождалось культом личности, сравнимым с культами других диктаторов того времени.",
|
||||
"Муссолини был известен своей любовью к роскоши и часто окружал себя богатством.",
|
||||
"Он часто выступал с речами с балкона Палаццо Венеция в Риме, собирая большие толпы.",
|
||||
"Муссолини имел большое влияние на развитие итальянской моды и стиля.",
|
||||
"Он активно поддерживал развитие железнодорожного транспорта в Италии.",
|
||||
"Муссолини стремился к созданию самодостаточной экономики, независимой от внешних поставок.",
|
||||
"Его режим проводил политику культурной цензуры, контролируя литературу, искусство и науку.",
|
||||
"Муссолини был противником профсоюзов и рабочих движений, считая их угрозой стабильности.",
|
||||
"Он был известен своими антисемитскими взглядами, особенно в конце своего правления.",
|
||||
"Муссолини инициировал программы массового строительства жилья для рабочих и малоимущих.",
|
||||
"Его режим активно развивал спорт и физическую культуру среди молодежи.",
|
||||
"Муссолини был сторонником теории расовой чистоты и поддерживал соответствующую политику.",
|
||||
"Его правление характеризовалось политической нестабильностью и частыми переворотами.",
|
||||
"Муссолини стремился к укреплению роли государства в экономике и социальной жизни.",
|
||||
"Его режим активно использовал символику и ритуалы для создания чувства национального единства.",
|
||||
"Муссолини инициировал программу по созданию итальянской атомной бомбы, но она не была завершена.",
|
||||
"Его правление привело к значительным изменениям в системе образования и воспитания.",
|
||||
"Муссолини был известен своей жестокостью и бескомпромиссностью в отношении политических оппонентов.",
|
||||
"Его режим активно поддерживал развитие авиации и космических исследований.",
|
||||
"Муссолини стремился к созданию независимой итальянской культуры и науки.",
|
||||
"Его правление привело к значительным изменениям в системе здравоохранения и социальной защиты.",
|
||||
"Муссолини был противником либеральной демократии и считал её слабой формой правления.",
|
||||
"Его режим активно боролся с коррупцией и организованной преступностью.",
|
||||
"Муссолини поддерживал развитие туризма и индустрии развлечений в Италии.",
|
||||
"Его правление привело к значительным изменениям в системе налогов и финансовой политики.",
|
||||
"Муссолини был сторонником теории 'мирового заговора' и часто использовал её в своей пропаганде."
|
||||
],
|
||||
|
||||
"StalinFact": [
|
||||
"До 8 лет Иосиф Джугашвили не знал русского языка. Русскому языку его обучали дети священника Чарквиани. Кстати, Михаил Калинин в одном интервью сказал: «Вот если бы спросили меня, кто лучше всех знает русский язык, я бы ответил — Сталин».",
|
||||
"Сталин с детства мечтал о работе священника. Его, как одного из лучших выпускников Горийского православного училища, зачислили в Тифлисскую (ныне Тбилиси) духовную семинарию, но так и не закончил её. Его отчислили «за неявку на экзамены по неизвестной причине». Без образования Сталин не остался: ему выдали справку об успешном окончании 4-х классов (курсов) с правом преподавания в начальных народных училищах.",
|
||||
"Работал в газете. С 1900 по 1905 год в газете «Борьба» (Брзола) Сталин опубликовал ряд полемических статей и теоретических работ.",
|
||||
"Вопреки всеобщему мнению, Иосиф Виссарионович практически не пил алкоголь. А вот покурить был любителем.",
|
||||
"Любимыми занятиями Сталина было чтение и выращивание растений.",
|
||||
"Читал Сталин очень быстро. Мог запросто прочитать более трёхсот страниц в день. И не просто прочитать, а проанализировать прочитанное и сделать необходимые пометки.",
|
||||
"Сталин был освобождён от воинской повинности. В детстве его сбила машина. После этого у него на всю жизнь осталось повреждение руки. Со временем он научился мастерски скрывать этот факт, держа на весу трубку или просто засовывая руку в карман.",
|
||||
"Вождь родился со сросшимися пальцами на ногах.",
|
||||
"Лицо Иосифа Виссарионовича было в небольших отметинах. Это «подарок» ветряной оспы, которой он переболел в детстве.",
|
||||
"Генсек очень хорошо относился к обслуживающему персоналу и даже приглашал прислугу за общий стол.",
|
||||
"Отличался бережливостью. Можно даже сказать — скупостью. Одежду носил до тех пор, пока она не приходила в полную негодность.",
|
||||
"На отдых неизменно брал с собой любимые домашние тапочки.",
|
||||
"Оружие, причем в заряженном состоянии, Сталин всегда брал с собой, когда покидал так называемую Ближнюю дачу.",
|
||||
"В течение первых 10 лет нахождения в первых эшелонах власти СССР Сталин трижды подавал прошение об отставке, но коллеги по партии дружно голосовали против.",
|
||||
"Иосиф Виссарионович был «совой». Работал до поздней ночи и засыпал под утро. Соответственно, встать раньше 10 утра для него было проблемой.",
|
||||
"Любил петь и обладал прекрасным голосом. Особенно любил русские народные песни.",
|
||||
"Любил смотреть американские вестерны, однако постельные сцены в кино вызывали его негодование.",
|
||||
"В предвоенное и послевоенное время не отказывал себе в отдыхе. Отдыхал и на море, и на даче. На дачном участке выращивал плодово-ягодные деревья и самостоятельно за ними ухаживал.",
|
||||
"В мире мало людей, которым приписывают такое количество липовых цитат, главным образом, кровожадного характера. Например,\n«Одна смерть — это трагедия; миллион смертей — это статистика» (слова Э.М. Ремарка);\n«Есть человек — есть проблема, нет человека — нет проблемы» (появляется в книге «Дети Арбата» А. Рыбакова);\n«Я солдата на фельдмаршала не меняю!» — (из кинофильма «Освобождение»).",
|
||||
"У Сталина было несколько детей. Один из сыновей погиб в плену у немецко-фашистских захватчиков.",
|
||||
"Василий Сталин показал себя как талантливый лётчик. За время войны он двенадцать раз был представлен к званию генерала, но каждый раз отец отменял это. Приёмный сын Артём Сергеев командовал артбатареей, попал в плен, успешно бежал и воевал с партизанским отрядом.",
|
||||
"У Сталина было несколько любимых женщин с нелегкими судьбами.",
|
||||
"Скончался Иосиф Виссарионович на даче. Предположительно из-за инсульта.",
|
||||
"После смерти Сталина бальзамировали и положили в мавзолей к Ленину. 31 октября 1961 года — тело Иосифа Виссарионовича Сталина было убрано из Мавзолея на Красной площади.",
|
||||
"Многое из личного архива вождя было уничтожено. Известно поручение президиума ЦК Г. Маленкову, Л. Берии и Н. Хрущеву: «Поручить принять меры к тому, чтобы документы и бумаги товарища Сталина были приведены в должный порядок». И это предполагало не только опечатывание сейфов и шкафов.",
|
||||
"Иосиф Сталин родился 18 декабря 1878 года в городе Гори, Грузия.",
|
||||
"Его настоящее имя — Иосиф Виссарионович Джугашвили.",
|
||||
"Сталин присоединился к большевистскому движению в начале 1900-х годов.",
|
||||
"Он был одним из ближайших соратников Ленина.",
|
||||
"В 1922 году Сталин стал генеральным секретарем Коммунистической партии.",
|
||||
"После смерти Ленина в 1924 году Сталин начал борьбу за власть с другими партийными лидерами.",
|
||||
"Он постепенно устранил своих политических противников, включая Троцкого.",
|
||||
"Сталин провел масштабную индустриализацию Советского Союза в 1930-х годах.",
|
||||
"Он также инициировал коллективизацию сельского хозяйства, что привело к голоду и массовым репрессиям.",
|
||||
"Сталин провел серию чисток в партии, армии и государственных учреждениях, известную как Большой террор.",
|
||||
"В годы Второй мировой войны Сталин был верховным главнокомандующим Красной армии.",
|
||||
"Он сыграл ключевую роль в победе над нацистской Германией.",
|
||||
"Сталин участвовал в Ялтинской и Потсдамской конференциях вместе с Черчиллем и Рузвельтом.",
|
||||
"Он создал культ личности вокруг своей фигуры.",
|
||||
"Сталин активно использовал пропаганду для укрепления своего режима.",
|
||||
"Его правление сопровождалось массовыми репрессиями и депортациями.",
|
||||
"Сталин установил жесткий контроль над культурой, наукой и образованием.",
|
||||
"В 1949 году Советский Союз провел успешное испытание атомной бомбы.",
|
||||
"Сталин активно поддерживал создание социалистического блока в Восточной Европе.",
|
||||
"В 1950 году началась Корейская война, в которой СССР поддерживал Северную Корею.",
|
||||
"Сталин верил в необходимость жесткой дисциплины и центрального контроля.",
|
||||
"Он был известен своей паранойей и недоверием к окружающим.",
|
||||
"Сталин имел два брака и троих детей.",
|
||||
"Его старший сын Яков попал в плен во время Второй мировой войны и погиб.",
|
||||
"Сталин редко показывался на публике и предпочитал работать за кулисами.",
|
||||
"Он часто перемещался по своей даче в Кунцево, недалеко от Москвы.",
|
||||
"Сталин любил кино и часто смотрел фильмы в личном кинозале.",
|
||||
"Он был противником религии и активно боролся с церковью.",
|
||||
"Сталин поддерживал развитие тяжелой промышленности и оборонного комплекса.",
|
||||
"Его правление привело к созданию системы ГУЛАГа — сети трудовых лагерей.",
|
||||
"Сталин участвовал в создании Коминформа — организации, объединяющей коммунистические партии разных стран.",
|
||||
"Он был одним из основателей Организации Варшавского договора.",
|
||||
"Сталин активно поддерживал коммунистические движения в Китае и других странах.",
|
||||
"Его имя носили многие города, улицы и предприятия в СССР.",
|
||||
"Сталин проводил политику изоляции от Запада и укрепления внутренней безопасности.",
|
||||
"Он активно использовал разведку и контрразведку для подавления оппозиции.",
|
||||
"Сталин верил в теорию 'врагов народа' и часто использовал её для оправдания репрессий.",
|
||||
"Его правление сопровождалось массовыми депортациями народов, обвиненных в коллаборационизме.",
|
||||
"Сталин стремился к созданию мощной армии и военно-промышленного комплекса.",
|
||||
"Его правление привело к значительным изменениям в системе образования и науки.",
|
||||
"Сталин активно поддерживал развитие атомной энергетики и космических исследований.",
|
||||
"Его правление сопровождалось жесткой цензурой и контролем над средствами массовой информации.",
|
||||
"Сталин был противником либеральной демократии и считал её слабой формой правления.",
|
||||
"Его правление сопровождалось масштабными проектами по строительству новых городов и инфраструктуры.",
|
||||
"Сталин поддерживал развитие спорта и физической культуры.",
|
||||
"Его правление привело к значительным изменениям в социальной и экономической политике СССР.",
|
||||
"Сталин скончался 5 марта 1953 года в своей резиденции.",
|
||||
"Его смерть привела к значительным изменениям в политике СССР и началу процесса десталинизации.",
|
||||
"Сталин активно поддерживал научные исследования и технологические разработки.",
|
||||
"Его правление сопровождалось развитием транспортной инфраструктуры, включая железные дороги.",
|
||||
"Сталин стремился к созданию мощного военно-промышленного комплекса.",
|
||||
"Сталин родился в семье бедного сапожника и прачки. ",
|
||||
"Его мать хотела, чтобы он стал священником, и отправила его учиться в духовную семинарию. ",
|
||||
"Сталин бросил семинарию и стал революционером. ",
|
||||
"В юности он участвовал в ограблениях банков для финансирования революционной деятельности. ",
|
||||
"Сталин неоднократно арестовывался и ссылался в Сибирь, но всегда бежал. ",
|
||||
"Он изменил свою фамилию на Сталин, что означает «человек из стали». ",
|
||||
"Сталин был редактором большевистской газеты «Правда». ",
|
||||
"Его первое выдвижение на высокий партийный пост произошло в 1917 году. ",
|
||||
"Сталин был одним из организаторов Октябрьской революции. ",
|
||||
"Он активно участвовал в Гражданской войне в России. ",
|
||||
"Сталин поддерживал жестокие меры подавления восстаний и мятежей. ",
|
||||
"Он сыграл ключевую роль в ликвидации крестьянского восстания в Тамбове. ",
|
||||
"Сталин организовал депортацию целых народов, таких как чеченцы и ингуши. ",
|
||||
"Его режим инициировал массовые аресты, допросы и пытки. ",
|
||||
"Сталин лично утверждал списки на расстрелы. ",
|
||||
"Он часто использовал политические убийства для устранения оппонентов. ",
|
||||
"Сталин поддерживал развитие шпионской сети за рубежом. ",
|
||||
"Его режим установил жесткий контроль над культурой и искусством. ",
|
||||
"Сталин активно использовал театры, кино и литературу для пропаганды. ",
|
||||
"Он организовал множество показательных процессов над «врагами народа». ",
|
||||
"Сталин возглавил Коминтерн — международную организацию коммунистических партий. ",
|
||||
"Его режим активно поддерживал антиколониальные движения в Африке и Азии. ",
|
||||
"Сталин инициировал массовое переселение народов внутри СССР. ",
|
||||
"Он стремился к созданию самодостаточной экономики, независимой от Запада. ",
|
||||
"Сталин активно развивал тяжелую промышленность и энергетический сектор. ",
|
||||
"Его режим проводил масштабные строительные проекты, такие как Днепрогэс. ",
|
||||
"Сталин часто использовал запугивание и террора для поддержания дисциплины. ",
|
||||
"Он был инициатором создания системы закрытых городов и секретных объектов. ",
|
||||
"Сталин поддерживал развитие авиации и космических технологий. ",
|
||||
"Его правление привело к созданию системы массового образования. ",
|
||||
"Сталин активно поддерживал развитие науки, включая физику и химию. ",
|
||||
"Его режим уделял большое внимание развитию спорта и физической культуры. ",
|
||||
"Сталин инициировал создание научно-исследовательских институтов. ",
|
||||
"Его правление сопровождалось развитием транспортной инфраструктуры. ",
|
||||
"Сталин был сторонником плановой экономики и централизованного управления. ",
|
||||
"Он активно поддерживал развитие атомной энергетики. ",
|
||||
"Сталин инициировал создание системы массового здравоохранения. ",
|
||||
"Его режим ввел обязательное бесплатное образование. ",
|
||||
"Сталин поддерживал развитие сельского хозяйства и механизацию. ",
|
||||
"Его правление привело к созданию сети домов культуры и библиотек. ",
|
||||
"Сталин активно поддерживал развитие кинематографа и театра. ",
|
||||
"Его режим внедрил систему трудовых лагерей для заключенных. ",
|
||||
"Сталин инициировал создание новых городов и промышленных центров. ",
|
||||
"Его правление сопровождалось масштабной милитаризацией страны. ",
|
||||
"Сталин уделял большое внимание развитию оборонной промышленности. ",
|
||||
"Его режим внедрил систему массовых спортивных мероприятий. ",
|
||||
"Сталин активно поддерживал развитие радио и телевидения. ",
|
||||
"Его правление привело к созданию системы массовой пропаганды.",
|
||||
"Сталин считал себя марксистом-ленинцем и стремился развить теорию социализма. ",
|
||||
"Он был известен своим суровым и жестоким характером. ",
|
||||
"Сталин сыграл ключевую роль в создании советской системы концентрационных лагерей.",
|
||||
"Его политика коллективизации привела к массовому голоду на Украине и в других регионах СССР. ",
|
||||
"Сталин инициировал серию репрессий против интеллигенции и творческой элиты. ",
|
||||
"Он создал Комитет государственной безопасности (КГБ), ставший основным органом внутренней безопасности. ",
|
||||
"Сталин активно поддерживал коммунистические движения по всему миру. ",
|
||||
"Его режим установил систему государственного контроля над религиозными учреждениями. ",
|
||||
"Сталин инициировал масштабные депортации немцев Поволжья, крымских татар и других народов. ",
|
||||
"Он активно использовал агентов и осведомителей для наблюдения за гражданами. ",
|
||||
"Сталин возглавлял множество совещаний и комитетов, контролируя все аспекты жизни страны. ",
|
||||
"Его правление сопровождалось масштабными инфраструктурными проектами, такими как строительство метро в Москве. ",
|
||||
"Сталин активно поддерживал развитие науки и техники, особенно в области ядерных исследований. ",
|
||||
"Его режим ввел систему пятилетних планов для управления экономикой. ",
|
||||
"Сталин инициировал создание академий наук и исследовательских институтов. ",
|
||||
"Он активно поддерживал развитие медицины и здравоохранения, включая массовую вакцинацию. ",
|
||||
"Сталин был инициатором создания системы военных училищ и академий. ",
|
||||
"Его режим ввел обязательное военное обучение для молодежи. ",
|
||||
"Сталин поддерживал развитие авиации и создание гражданской авиации. ",
|
||||
"Его политика привела к значительному росту промышленного производства. ",
|
||||
"Сталин инициировал создание сети научно-исследовательских институтов в области энергетики. ",
|
||||
"Его режим активно поддерживал развитие тяжелой промышленности и металлургии. ",
|
||||
"Сталин был инициатором создания системы массового образования и профессиональной подготовки. ",
|
||||
"Его правление привело к созданию сети спортивных учреждений и стадионов. ",
|
||||
"Сталин активно поддерживал развитие транспорта, включая железные дороги и автодороги. ",
|
||||
"Его режим внедрил систему государственной цензуры и контроля над СМИ. ",
|
||||
"Сталин активно поддерживал развитие театра и музыкального искусства. ",
|
||||
"Его политика привела к значительному росту производства электроэнергии. ",
|
||||
"Сталин инициировал создание системы массового досуга и культурных мероприятий. ",
|
||||
"Его режим активно развивал сеть библиотек и домов культуры. ",
|
||||
"Сталин поддерживал развитие радио и телевидения, создавая массовую аудиторию. ",
|
||||
"Его правление привело к созданию системы государственных издательств и полиграфии. ",
|
||||
"Сталин активно поддерживал развитие науки и техники, особенно в области химии и физики. ",
|
||||
"Его режим ввел систему обязательного образования для всех граждан. ",
|
||||
"Сталин инициировал создание системы массового здравоохранения и медицинского обслуживания. ",
|
||||
"Его политика привела к значительному росту численности населения СССР. ",
|
||||
"Сталин активно поддерживал развитие атомной энергетики и ядерных исследований. ",
|
||||
"Его режим внедрил систему массового спортивного воспитания и физической подготовки. ",
|
||||
"Сталин инициировал создание сети научно-исследовательских институтов в области обороны. ",
|
||||
"Его политика привела к значительному росту производства военной техники и вооружений. ",
|
||||
"Сталин активно поддерживал развитие промышленного производства и строительной индустрии. ",
|
||||
"Его режим ввел систему государственной пропаганды и агитации. ",
|
||||
"Сталин инициировал создание системы массового культурного воспитания. ",
|
||||
"Его правление привело к значительному росту численности рабочей силы и квалифицированных кадров. ",
|
||||
"Сталин активно поддерживал развитие науки и техники, особенно в области материаловедения. ",
|
||||
"Его политика привела к созданию системы массового образования и научных исследований. ",
|
||||
"Сталин инициировал создание системы массового здравоохранения и медицинского обслуживания. ",
|
||||
"Его правление сопровождалось массовыми репрессиями и арестами. ",
|
||||
"Сталин активно поддерживал развитие транспорта и инфраструктуры."
|
||||
]
|
||||
}
|
||||
|
||||
198
KorenbZla/HikkaModules/HistoryFacts.py
Normal file
198
KorenbZla/HikkaModules/HistoryFacts.py
Normal file
@@ -0,0 +1,198 @@
|
||||
# * _ __ __ _ _
|
||||
# * / \ _ _ _ __ ___ _ __ __ _| \/ | ___ __| |_ _| | ___ ___
|
||||
# * / _ \| | | | '__/ _ \| '__/ _` | |\/| |/ _ \ / _` | | | | |/ _ \/ __|
|
||||
# * / ___ \ |_| | | | (_) | | | (_| | | | | (_) | (_| | |_| | | __/\__ \
|
||||
# * /_/ \_\__,_|_| \___/|_| \__,_|_| |_|\___/ \__,_|\__,_|_|\___||___/
|
||||
# *
|
||||
# * © Copyright 2024
|
||||
# *
|
||||
# * https://t.me/AuroraModules
|
||||
# *
|
||||
# * 🔒 Code is licensed under GNU AGPLv3
|
||||
# * 🌐 https://www.gnu.org/licenses/agpl-3.0.html
|
||||
# * ⛔️ You CANNOT edit this file without direct permission from the author.
|
||||
# * ⛔️ You CANNOT distribute this file if you have modified it without the direct permission of the author.
|
||||
|
||||
# Name: HistoryFacts
|
||||
# Author: dend1yya
|
||||
# Commands:
|
||||
# .rfact | .hfact | .mfact | .sfact
|
||||
# scope: hikka_only
|
||||
# meta developer: @AuroraModules
|
||||
|
||||
# meta pic: https://i.postimg.cc/Hx3Zm8rB/logo.png
|
||||
# meta banner: https://te.legra.ph/file/388d6138470f2036d08ed.jpg
|
||||
|
||||
__version__ = (1, 1, 0)
|
||||
|
||||
import json
|
||||
import aiohttp
|
||||
import asyncio
|
||||
import random
|
||||
from random import choice
|
||||
from .. import loader, utils
|
||||
from telethon.tl.types import Message # type: ignore
|
||||
|
||||
@loader.tds
|
||||
class HistoryFactMod(loader.Module):
|
||||
"""Get a random historical fact"""
|
||||
|
||||
strings = {
|
||||
"name": "HistoryFact",
|
||||
"fact": "<b><emoji document_id=5386596911463541476>📚</emoji> Random interesting fact about the Great Patriotic War:\n {}</b>",
|
||||
"adolf_fact": "<b><emoji document_id=5386596911463541476>📚</emoji> Random fact about Adolf Hitler:\n{}</b>",
|
||||
"mussolini_fact": "<b><emoji document_id=5386596911463541476>📚</emoji> Random fact about Benito Mussolini:\n{}</b>",
|
||||
"stalin_fact": "<b><emoji document_id=5386596911463541476>📚</emoji> Random fact about Iosif Stalin:\n{}</b>",
|
||||
"error_key": "<b><i>Error: Key not found.</i></b>",
|
||||
"error_decoding": "<b><i>Error: The JSON could not be decoded.</i></b>",
|
||||
"error_uploading_data": "<b><i>Error loading data</i></b>",
|
||||
"error_valid_args": "<b><i>Please enter valid arguments!</i></b>",
|
||||
}
|
||||
|
||||
strings_ru = {
|
||||
"fact": "<b><emoji document_id=5386596911463541476>📚</emoji> Случайный интересный факт о Великой Отечественной войне:\n{}</b>",
|
||||
"adolf_fact": "<b><emoji document_id=5386596911463541476>📚</emoji> Случайный факт об Адольфе Гитлере:\n{}</b>",
|
||||
"mussolini_fact": "<b><emoji document_id=5386596911463541476>📚</emoji> Случайный факт о Бенито Муссолини:\n{}</b>",
|
||||
"stalin_fact": "<b><emoji document_id=5386596911463541476>📚</emoji> Случайный факт об Иосифе Сталине:\n{}</b>",
|
||||
"error_key": "<b><i>Error: ключ не найден.</i></b>",
|
||||
"error_decoding": "<b><i>Error: не удалось декодировать JSON.</i></b>",
|
||||
"error_uploading_data": "<b><i>Ошибка при загрузке данных</i></b>",
|
||||
"error_valid_args": "<b><i>Введите корректные аргументы!</i></b>",
|
||||
}
|
||||
|
||||
strings_uz = {
|
||||
"fact": "<b><emoji document_id=5386596911463541476>📚</emoji> Buyuk Vatan jangiga oid qiziq fikr:\n{}</b>",
|
||||
"adolf_fact": "<b><emoji document_id=5386596911463541476>📚</emoji> Adolf Gitler haqida tasodifiy fakt:\n{}</b>",
|
||||
"mussolini_fact": "<b><emoji document_id=5386596911463541476>📚</emoji> Benito Mussolini haqida tasodifiy fakt:\n{}</b>",
|
||||
"stalin_fact": "<b><emoji document_id=5386596911463541476>📚</emoji> Iosif Stalin haqida tasodifiy fakt:\n{}</b>",
|
||||
"error_key": "<b><i>Error: калити топилмади.</i></b>",
|
||||
"error_decoding": "<b><i>Error: JSON декодлаш муваффақиятли амалга ошмади.</i></b>",
|
||||
"error_uploading_data": "<b><i>Маълумотлар юклаб олинмади</i></b>",
|
||||
"error_valid_args": "<b><i>Iltimos, to'g'ri dalillarni kiriting!</i></b>",
|
||||
}
|
||||
|
||||
strings_de = {
|
||||
"fact": "<b><emoji document_id=5386596911463541476>📚</emoji> Zufällige interessante Tatsache über den Großen Vaterländischen Krieg:\n{}</b>",
|
||||
"adolf_fact": "<b><emoji document_id=5386596911463541476>📚</emoji> Zufällige Tatsache über Adolf Hitler:\n{}</b>",
|
||||
"mussolini_fact": "<b><emoji document_id=5386596911463541476>📚</emoji> Zufällige Tatsache über Benito Mussolini:\n{}</b>",
|
||||
"stalin_fact": "<b><emoji document_id=5386596911463541476>📚</emoji> Zufällige Tatsache über Iosif Stalin:\n{}</b>",
|
||||
"error_key": "<b><i>Error: Der Schlüssel wurde nicht gefunden.</i></b>",
|
||||
"error_decoding": "<b><i>Error: JSON konnte nicht decodiert werden.</i></b>",
|
||||
"error_uploading_data": "<b><i>Fehler beim Hochladen der Daten</i></b>",
|
||||
"error_valid_args": "<b><i>Bitte geben Sie gültige Argumente ein!</i></b>",
|
||||
}
|
||||
|
||||
strings_es = {
|
||||
"fact": "<b><emoji document_id=5386596911463541476>📚</emoji> Hecho interesante aleatorio sobre la Gran Guerra Patria:\n{}</b>",
|
||||
"adolf_fact": "<b><emoji document_id=5386596911463541476>📚</emoji> Hecho aleatorio sobre Adolf Hitler:\n{}</b>",
|
||||
"mussolini_fact": "<b><emoji document_id=5386596911463541476>📚</emoji> Hecho aleatorio sobre Benito Mussolini:\n{}</b>",
|
||||
"stalin_fact": "<b><emoji document_id=5386596911463541476>📚</emoji> Hecho aleatorio sobre Iosif Stalin:\n{}</b>",
|
||||
"error_key": "<b><i>Error: No se encontró la clave.</i></b>",
|
||||
"error_decoding": "<b><i>Error: No se pudo decodificar JSON.</i></b>",
|
||||
"error_uploading_data": "<b><i>Error al cargar los datos</i></b>",
|
||||
"error_valid_args": "<b><i>¡Por favor ingrese argumentos válidos!</i></b>",
|
||||
}
|
||||
|
||||
@loader.command(
|
||||
ru_doc="Вывод случайного исторического факта",
|
||||
uz_doc="tasodifiy tarixiy faktlar chiqarish",
|
||||
de_doc="Gibt eine zufällige historische Tatsache aus",
|
||||
es_doc="Muestra un hecho histórico aleatorio",
|
||||
)
|
||||
async def rfact(self, message):
|
||||
"""Output a random historical fact"""
|
||||
url = "https://raw.githubusercontent.com/KorenbZla/HikkaModules/main/HistoryFacts.json"
|
||||
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.get(url) as response:
|
||||
if response.status == 200:
|
||||
response_text = await response.text()
|
||||
try:
|
||||
data = json.loads(response_text)
|
||||
if "RandomFact" in data and isinstance(data["RandomFact"], list) and data["RandomFact"]:
|
||||
text = choice(data["RandomFact"])
|
||||
await utils.answer(message, self.strings['fact'].format(text))
|
||||
else:
|
||||
await utils.answer(message, self.strings["error_key"])
|
||||
except json.JSONDecodeError:
|
||||
await utils.answer(message, self.strings["error_decoding"])
|
||||
else:
|
||||
await utils.answer(message, f"{self.strings('error_uploading_data')}: {response.status}")
|
||||
|
||||
@loader.command(
|
||||
ru_doc="Вывод случайного факта об Адольфе Гитлере",
|
||||
uz_doc="Adolf Gitler haqida tasodifiy faktlar chiqarish",
|
||||
de_doc="Gibt eine zufällige Tatsache über Adolf Hitler aus",
|
||||
es_doc="Muestra un hecho aleatorio sobre Adolf Hitler",
|
||||
)
|
||||
async def hfact(self, message):
|
||||
"""To deduce a random fact about Adolf Hitler"""
|
||||
url = "https://raw.githubusercontent.com/KorenbZla/HikkaModules/main/HistoryFacts.json"
|
||||
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.get(url) as response:
|
||||
if response.status == 200:
|
||||
response_text = await response.text()
|
||||
try:
|
||||
data = json.loads(response_text)
|
||||
if "AdolfFact" in data and isinstance(data["AdolfFact"], list) and data["AdolfFact"]:
|
||||
text = choice(data["AdolfFact"])
|
||||
await utils.answer(message, self.strings['adolf_fact'].format(text))
|
||||
else:
|
||||
await utils.answer(message, self.strings["error_key"])
|
||||
except json.JSONDecodeError:
|
||||
await utils.answer(message, self.strings["error_decoding"])
|
||||
else:
|
||||
await utils.answer(message, f"{self.strings('error_uploading_data')}: {response.status}")
|
||||
|
||||
@loader.command(
|
||||
ru_doc="Вывести случайный факт о Бенито Муссолини",
|
||||
uz_doc="Benito Mussolini haqida tasodifiy faktlar chiqarish",
|
||||
de_doc="Gibt eine zufällige Tatsache über Benito Mussolini aus",
|
||||
es_doc="Muestra un hecho aleatorio sobre Benito Mussolini",
|
||||
)
|
||||
async def mfact(self, message):
|
||||
"""To deduce a random fact about Benito Mussolini"""
|
||||
url = "https://raw.githubusercontent.com/KorenbZla/HikkaModules/main/HistoryFacts.json"
|
||||
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.get(url) as response:
|
||||
if response.status == 200:
|
||||
response_text = await response.text()
|
||||
try:
|
||||
data = json.loads(response_text)
|
||||
if "MussoliniFact" in data and isinstance(data["MussoliniFact"], list) and data["MussoliniFact"]:
|
||||
text = choice(data["MussoliniFact"])
|
||||
await utils.answer(message, self.strings['mussolini_fact'].format(text))
|
||||
else:
|
||||
await utils.answer(message, self.strings["error_key"])
|
||||
except json.JSONDecodeError:
|
||||
await utils.answer(message, self.strings["error_decoding"])
|
||||
else:
|
||||
await utils.answer(message, f"{self.strings('error_uploading_data')}: {response.status}")
|
||||
|
||||
@loader.command(
|
||||
ru_doc="Вывести случайный факт о Иосифе Сталине",
|
||||
uz_doc="Iosif Stalin haqida tasodifiy faktlar chiqarish",
|
||||
de_doc="Gibt eine zufällige Tatsache über Joseph Stalin aus",
|
||||
es_doc="Muestra un hecho aleatorio sobre Joseph Stalin",
|
||||
)
|
||||
async def sfact(self, message):
|
||||
"""To deduce a random fact about Joseph Stalin"""
|
||||
url = "https://raw.githubusercontent.com/KorenbZla/HikkaModules/main/HistoryFacts.json"
|
||||
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.get(url) as response:
|
||||
if response.status == 200:
|
||||
response_text = await response.text()
|
||||
try:
|
||||
data = json.loads(response_text)
|
||||
if "StalinFact" in data and isinstance(data["StalinFact"], list) and data["StalinFact"]:
|
||||
text = choice(data["StalinFact"])
|
||||
await utils.answer(message, self.strings['stalin_fact'].format(text))
|
||||
else:
|
||||
await utils.answer(message, self.strings["error_key"])
|
||||
except json.JSONDecodeError:
|
||||
await utils.answer(message, self.strings["error_decoding"])
|
||||
else:
|
||||
await utils.answer(message, f"{self.strings('error_uploading_data')}: {response.status}")
|
||||
166
KorenbZla/HikkaModules/IrisFarm.py
Normal file
166
KorenbZla/HikkaModules/IrisFarm.py
Normal file
@@ -0,0 +1,166 @@
|
||||
# * _ __ __ _ _
|
||||
# * / \ _ _ _ __ ___ _ __ __ _| \/ | ___ __| |_ _| | ___ ___
|
||||
# * / _ \| | | | '__/ _ \| '__/ _` | |\/| |/ _ \ / _` | | | | |/ _ \/ __|
|
||||
# * / ___ \ |_| | | | (_) | | | (_| | | | | (_) | (_| | |_| | | __/\__ \
|
||||
# * /_/ \_\__,_|_| \___/|_| \__,_|_| |_|\___/ \__,_|\__,_|_|\___||___/
|
||||
# *
|
||||
# * © Copyright 2024
|
||||
# *
|
||||
# * https://t.me/AuroraModules
|
||||
# *
|
||||
# * 🔒 Code is licensed under GNU AGPLv3
|
||||
# * 🌐 https://www.gnu.org/licenses/agpl-3.0.html
|
||||
# * ⛔️ You CANNOT edit this file without direct permission from the author.
|
||||
# * ⛔️ You CANNOT distribute this file if you have modified it without the direct permission of the author.
|
||||
|
||||
# Name: IrisFarm
|
||||
# Author: Felix?
|
||||
# Commands:
|
||||
# .irfarm | .bag
|
||||
# scope: hikka_only
|
||||
# meta developer: @AuroraModules
|
||||
|
||||
# meta pic: https://i.postimg.cc/Hx3Zm8rB/logo.png
|
||||
# meta banner: https://te.legra.ph/file/1d547b05f967c9681b90a.jpg
|
||||
|
||||
__version__ = (3, 1, 1)
|
||||
|
||||
import asyncio
|
||||
import random
|
||||
from .. import loader, utils
|
||||
|
||||
class IrisFarmMod(loader.Module):
|
||||
"""Auto farm in iris bot"""
|
||||
|
||||
strings = {
|
||||
"name": "IrisFarm",
|
||||
"status": "<emoji document_id=6028435952299413210>ℹ️</emoji> Module operation status",
|
||||
"s_1": "Active.",
|
||||
"s_0": "Inactive.",
|
||||
"on": "Activated.",
|
||||
"off": "Deactivated.",
|
||||
"n_args": "<emoji document_id=5285372392086976148>🚫</emoji> Specify the arguments",
|
||||
"cfg_chat_id": "Enter the chat identifier.",
|
||||
"cfg_random_interval": "WARNING! Disabling this feature increases the risk of being banned in the bot!",
|
||||
}
|
||||
|
||||
strings_ru = {
|
||||
"status": "<emoji document_id=6028435952299413210>ℹ️</emoji> Статус работы модуля",
|
||||
"s_1": "Активно.",
|
||||
"s_0": "Неактивно.",
|
||||
"on": "Активировано.",
|
||||
"off": "Деактивировано.",
|
||||
"n_args": "<emoji document_id=5285372392086976148>🚫</emoji> Укажите аргументы",
|
||||
"cfg_chat_id": "Введите идентификатор чата.",
|
||||
"cfg_random_interval": "ВНИМАНИЕ! При выключении данной функции повышается риск бана в боте!",
|
||||
}
|
||||
|
||||
strings_uz = {
|
||||
"status": "<emoji document_id=6028435952299413210>ℹ️</emoji> Modul ishlash holati",
|
||||
"s_1": "Faol.",
|
||||
"s_0": "Faol emas.",
|
||||
"on": "Faollashtirildi.",
|
||||
"off": "O'chirildi.",
|
||||
"n_args": "<emoji document_id=5285372392086976148>🚫</emoji> Argumentlarni kiriting",
|
||||
"cfg_chat_id": "Chat identifikatorini kiriting.",
|
||||
"cfg_random_interval": "DIQQAT! Ushbu xususiyatni o'chirib qo'yish botda ban olish xavfini oshiradi!",
|
||||
}
|
||||
|
||||
strings_de = {
|
||||
"status": "<emoji document_id=6028435952299413210>ℹ️</emoji> Modulbetriebsstatus",
|
||||
"s_1": "Aktiv.",
|
||||
"s_0": "Inaktiv.",
|
||||
"on": "Aktiviert.",
|
||||
"off": "Deaktiviert.",
|
||||
"n_args": "<emoji document_id=5285372392086976148>🚫</emoji> Geben Sie die Argumente an",
|
||||
"cfg_chat_id": "Geben Sie die Chat-ID ein.",
|
||||
"cfg_random_interval": "WARNUNG! Das Deaktivieren dieser Funktion erhöht das Risiko, im Bot gebannt zu werden!",
|
||||
}
|
||||
|
||||
strings_es = {
|
||||
"status": "<emoji document_id=6028435952299413210>ℹ️</emoji> Estado de operación del módulo",
|
||||
"s_1": "Activo.",
|
||||
"s_0": "Inactivo.",
|
||||
"on": "Activado.",
|
||||
"off": "Desactivado.",
|
||||
"n_args": "<emoji document_id=5285372392086976148>🚫</emoji> Especifica los argumentos",
|
||||
"cfg_chat_id": "Introduce el identificador del chat.",
|
||||
"cfg_random_interval": "¡ADVERTENCIA! Desactivar esta función aumenta el riesgo de ser baneado en el bot.",
|
||||
}
|
||||
|
||||
def __init__(self):
|
||||
self.config = loader.ModuleConfig(
|
||||
loader.ConfigValue(
|
||||
"chat_id",
|
||||
None,
|
||||
lambda: self.strings["cfg_chat_id"]
|
||||
),
|
||||
loader.ConfigValue(
|
||||
"random_interval",
|
||||
False,
|
||||
lambda: self.strings["cfg_random_interval"],
|
||||
validator=loader.validators.Boolean()
|
||||
)
|
||||
)
|
||||
|
||||
async def client_ready(self, client, db):
|
||||
self.db = db
|
||||
self.client = client
|
||||
|
||||
@loader.command()
|
||||
async def irfarm(self, message):
|
||||
"""{on/off} - turn auto farm on or off"""
|
||||
args = utils.get_args_raw(message).lower()
|
||||
|
||||
status_result_True = self.db.get("AuroraIrisFarm", "status", True)
|
||||
if status_result_True:
|
||||
status_result = self.strings("s_1")
|
||||
else:
|
||||
status_result = self.strings("s_0")
|
||||
|
||||
if not args:
|
||||
status = self.strings("status")
|
||||
await utils.answer(message, f"<b>{status}: <i>{status_result}</i></b>")
|
||||
return
|
||||
|
||||
if args == "on":
|
||||
args_s = self.strings("on")
|
||||
self.db.set("AuroraIrisFarm", "status", True)
|
||||
await utils.answer(message, f"<emoji document_id=5287692511945437157>✅</emoji> <b>IrisFarm: <i>{args_s}</i></b>")
|
||||
elif args == "off":
|
||||
args_s = self.strings("off")
|
||||
self.db.set("AuroraIrisFarm", "status", False)
|
||||
await utils.answer(message, f"<emoji document_id=5287692511945437157>✅</emoji> <b>IrisFarm: <i>{args_s}</i></b>")
|
||||
else:
|
||||
n_args = self.strings("n_args")
|
||||
await utils.answer(message, f"<b>{n_args}</b>")
|
||||
return
|
||||
|
||||
if self.config["chat_id"] is None:
|
||||
chat_id = 5443619563
|
||||
else:
|
||||
chat_id = self.config["chat_id"]
|
||||
|
||||
if self.config["random_interval"] == True:
|
||||
delay = random.randint(14410, 28800)
|
||||
else:
|
||||
delay = 4 * 3630
|
||||
|
||||
while self.db.get("AuroraIrisFarm", "status"):
|
||||
text = "фармить"
|
||||
await message.client.send_message(chat_id, text)
|
||||
await asyncio.sleep(delay)
|
||||
|
||||
@loader.command(
|
||||
ru_doc = "Заглянуть в мешок.",
|
||||
uz_doc = "Sumkaga qarang.",
|
||||
de_doc = "Schau in die Tasche.",
|
||||
es_doc = "Mira en la bolsa.",
|
||||
)
|
||||
async def bag(self, message):
|
||||
"""Look into the bag"""
|
||||
bot_dialog = await message.client.get_entity("@iris_black_bot")
|
||||
async with message.client.conversation(bot_dialog) as conv:
|
||||
await conv.send_message("Мешок")
|
||||
response = await conv.get_response()
|
||||
await utils.answer(message, f"<b>{(response.text)}</b>")
|
||||
674
KorenbZla/HikkaModules/LICENSE
Normal file
674
KorenbZla/HikkaModules/LICENSE
Normal file
@@ -0,0 +1,674 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<https://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
||||
161
KorenbZla/HikkaModules/Melody.py
Normal file
161
KorenbZla/HikkaModules/Melody.py
Normal file
@@ -0,0 +1,161 @@
|
||||
# * _ __ __ _ _
|
||||
# * / \ _ _ _ __ ___ _ __ __ _| \/ | ___ __| |_ _| | ___ ___
|
||||
# * / _ \| | | | '__/ _ \| '__/ _` | |\/| |/ _ \ / _` | | | | |/ _ \/ __|
|
||||
# * / ___ \ |_| | | | (_) | | | (_| | | | | (_) | (_| | |_| | | __/\__ \
|
||||
# * /_/ \_\__,_|_| \___/|_| \__,_|_| |_|\___/ \__,_|\__,_|_|\___||___/
|
||||
# *
|
||||
# * © Copyright 2024
|
||||
# *
|
||||
# * https://t.me/AuroraModules
|
||||
# *
|
||||
# * 🔒 Code is licensed under GNU AGPLv3
|
||||
# * 🌐 https://www.gnu.org/licenses/agpl-3.0.html
|
||||
# * ⛔️ You CANNOT edit this file without direct permission from the author.
|
||||
# * ⛔️ You CANNOT distribute this file if you have modified it without the direct permission of the author.
|
||||
|
||||
# Name: Melody
|
||||
# Author: Felix? | dend1y
|
||||
# Commands:
|
||||
# .заденьгида | .LIPSIHA | .stopplay
|
||||
# scope: hikka_only
|
||||
# meta developer: @AuroraModules
|
||||
|
||||
# meta pic: https://i.postimg.cc/Hx3Zm8rB/logo.png
|
||||
# meta banner: https://te.legra.ph/file/787faf75b8a094553336f.jpg
|
||||
|
||||
version = (1, 2, 2)
|
||||
|
||||
from .. import loader, utils
|
||||
import asyncio
|
||||
|
||||
@loader.tds
|
||||
class MelodyMod(loader.Module):
|
||||
"""Module for playing various songs in a chat"""
|
||||
|
||||
strings = {
|
||||
"name": "Melody",
|
||||
"playing_music_off": "<emoji document_id=5172447776205702031>🎵</emoji><b>Music playback has been stopped.</b>",
|
||||
"not_play": "<emoji document_id=4918014360267260850>⛔️</emoji><b>The music is not playing at the moment.</b>",
|
||||
}
|
||||
|
||||
strings_ru = {
|
||||
"playing_music_off": "<emoji document_id=5172447776205702031>🎵</emoji><b>Воспроизведение музыки остановлено.</b>",
|
||||
"not_play": "<emoji document_id=4918014360267260850>⛔️</emoji><b>В данный момент музыка не воспроизводится.</b>",
|
||||
}
|
||||
|
||||
strings_uz = {
|
||||
"playing_music_off": "<emoji document_id=5172447776205702031>🎵</emoji><b>Musiqani to'xtatish.</b>",
|
||||
"not_play": "<emoji document_id=4918014360267260850>⛔️</emoji><b>Hozircha musiqa ijro etilmayapti.</b>",
|
||||
}
|
||||
|
||||
strings_de = {
|
||||
"playing_music_off": "<emoji document_id=5172447776205702031>🎵</emoji><b>Die Musikwiedergabe wurde gestoppt.</b>",
|
||||
"not_play": "<emoji document_id=4918014360267260850>⛔️</emoji><b>Die Musik wird derzeit nicht abgespielt.</b>",
|
||||
}
|
||||
|
||||
strings_es = {
|
||||
"playing_music_off": "<emoji document_id=5172447776205702031>🎵</emoji><b>La reproducción de música ha sido detenida.</b>",
|
||||
"not_play": "<emoji document_id=4918014360267260850>⛔️</emoji><b>En este momento no se está reproduciendo música.</b>",
|
||||
}
|
||||
|
||||
|
||||
@loader.command(
|
||||
ru_doc="Включить песню «За деньги да»",
|
||||
uz_doc="Qo'shiq ijro eting «За деньги да»",
|
||||
de_doc="Lied abspielen «За деньги да»",
|
||||
es_doc="Reproducir canción «За деньги да»",
|
||||
)
|
||||
async def заденьгида(self, message):
|
||||
"""Play song «За деньги да»"""
|
||||
lyrics = [
|
||||
"Я вообще делаю что хочу",
|
||||
"Хочу импланты — звоню врачу",
|
||||
"Кто меня не любит — я вас не слышу",
|
||||
"Вы просто мне завидуете, я молчу",
|
||||
"Я не продаюсь, но за деньги — да",
|
||||
"Мой продюссер говорит я поп-звезда",
|
||||
"И кстати, мой продюссер — это мой муж, да",
|
||||
"Я не скажу в ответ ничего на вид",
|
||||
"И не скажу «привет» если бабок нет",
|
||||
"Слышу любимый звук — это звон монет",
|
||||
"Они тянут все мне руку, это мой концерт",
|
||||
"Не завожу подруг, но за деньги — да",
|
||||
"Я подумаю потом, но скажу сразу «да»",
|
||||
"За деньги, да, за деньги, да",
|
||||
"За деньги, да",
|
||||
"Деньги— Деньги— Деньги— Деньги— Да— Да— Да— Да—",
|
||||
"Играла песня «За деньги да»",
|
||||
]
|
||||
self.playing_music = True
|
||||
for line in lyrics:
|
||||
await asyncio.sleep(3)
|
||||
await utils.answer(message, line)
|
||||
if not self.playing_music:
|
||||
break
|
||||
self.playing_music = False
|
||||
|
||||
@loader.command(
|
||||
ru_doc="Включить песню «LIPSI HA»",
|
||||
uz_doc="Qo'shiq ijro eting «LIPSI HA»",
|
||||
de_doc="Lied abspielen «LIPSI HA»",
|
||||
es_doc="Reproducir canción «LIPSI HA»",
|
||||
)
|
||||
async def LIPSIHA(self, message):
|
||||
"""Play song «LIPSI HA»"""
|
||||
lyrics = [
|
||||
"Деньги пахнут pussy, а",
|
||||
"Сумка Birkin, только нал",
|
||||
"Стринги, а, стринги, а",
|
||||
"В стрингах ношу капитал",
|
||||
"Juicy пахнет money, ха",
|
||||
"Сучки в Juicy мои, ха",
|
||||
"Lipsi, ха, lipsi, ха",
|
||||
"Lipsi give me money, ха",
|
||||
"Mommy на dollar",
|
||||
"Жопа на сайте, cash",
|
||||
"Я на работе",
|
||||
"Трясу огромной ass",
|
||||
"Дайте мне money",
|
||||
"Money на money, мой Ken",
|
||||
"Пахну деньгами",
|
||||
"Пахну деньгами",
|
||||
"AMA bad bitch",
|
||||
"Lipsi give me money, ха",
|
||||
"AMA hot bitch",
|
||||
"В стрингах ношу капитал",
|
||||
"Bad, bad bitch",
|
||||
"Juicy пахнет money, ха",
|
||||
"Где мои money, bitch?",
|
||||
"Где мои money?",
|
||||
"AMA bad bitch",
|
||||
"Lipsi give me money, ха",
|
||||
"AMA hot bitch",
|
||||
"В стрингах ношу капитал",
|
||||
"Bad, bad bitch"
|
||||
"Juicy пахнет money, ха",
|
||||
"Где мои money, bitch?",
|
||||
"Где мои money?",
|
||||
"Песня «LIPSI HA»"
|
||||
]
|
||||
self.playing_music = True
|
||||
for line in lyrics:
|
||||
await asyncio.sleep(3)
|
||||
await utils.answer(message, line)
|
||||
if not self.playing_music:
|
||||
break
|
||||
self.playing_music = False
|
||||
|
||||
@loader.command(
|
||||
ru_doc="Остановить проигрывание музыки",
|
||||
uz_doc="Musiqani to'xtatish",
|
||||
de_doc="Wiedergabe von Musik stoppen",
|
||||
es_doc="Detener la reproducción de música",
|
||||
)
|
||||
async def stopplay(self, message):
|
||||
"""Stop playing music"""
|
||||
if self.playing_music:
|
||||
self.playing_music = False
|
||||
await utils.answer(message, self.strings["playing_music_off"])
|
||||
else:
|
||||
await utils.answer(message, self.strings["not_play"])
|
||||
|
||||
131
KorenbZla/HikkaModules/Meow.py
Normal file
131
KorenbZla/HikkaModules/Meow.py
Normal file
@@ -0,0 +1,131 @@
|
||||
# * _ __ __ _ _
|
||||
# * / \ _ _ _ __ ___ _ __ __ _| \/ | ___ __| |_ _| | ___ ___
|
||||
# * / _ \| | | | '__/ _ \| '__/ _` | |\/| |/ _ \ / _` | | | | |/ _ \/ __|
|
||||
# * / ___ \ |_| | | | (_) | | | (_| | | | | (_) | (_| | |_| | | __/\__ \
|
||||
# * /_/ \_\__,_|_| \___/|_| \__,_|_| |_|\___/ \__,_|\__,_|_|\___||___/
|
||||
# *
|
||||
# * © Copyright 2024
|
||||
# *
|
||||
# * https://t.me/AuroraModules
|
||||
# *
|
||||
# * 🔒 Code is licensed under GNU AGPLv3
|
||||
# * 🌐 https://www.gnu.org/licenses/agpl-3.0.html
|
||||
# * ⛔️ You CANNOT edit this file without direct permission from the author.
|
||||
# * ⛔️ You CANNOT distribute this file if you have modified it without the direct permission of the author.
|
||||
|
||||
# Name: Meow
|
||||
# Author: Felix?
|
||||
# Commands:
|
||||
# .meow | .stopmeow
|
||||
# scope: hikka_only
|
||||
# meta developer: @AuroraModules
|
||||
|
||||
# meta pic: https://i.postimg.cc/Hx3Zm8rB/logo.png
|
||||
# meta banner: https://te.legra.ph/file/21c1c48baffc8c6236c0f.jpg
|
||||
|
||||
version = (1, 0, 1)
|
||||
|
||||
from .. import loader, utils
|
||||
import asyncio
|
||||
|
||||
@loader.tds
|
||||
class MeowMod(loader.Module):
|
||||
"""Start meowing in different languages"""
|
||||
|
||||
strings = {
|
||||
"name": "Meow",
|
||||
"stopmeow": "<emoji document_id=5172447776205702031>🎵</emoji><b>You've stopped meowing.</b>",
|
||||
"not_meow": "<emoji document_id=5084923566848213749>🐾</emoji><b>You are not meowing at the moment.</b>",
|
||||
}
|
||||
|
||||
strings_ru = {
|
||||
"stopmeow": "<emoji document_id=5172447776205702031>🎵</emoji><b>Ты перестал мяукать.</b>",
|
||||
"not_meow": "<emoji document_id=5084923566848213749>🐾</emoji><b>Ты сейчас не мяукаешь.</b>",
|
||||
}
|
||||
|
||||
strings_uz = {
|
||||
"stopmeow": "<emoji document_id=5172447776205702031>🎵</emoji><b>Sen miyolishni to'xtadingiz.</b>",
|
||||
"not_meow": "<emoji document_id=5084923566848213749>🐾</emoji><b>Siz hozir miyolmaysiz.</b>",
|
||||
}
|
||||
|
||||
strings_de = {
|
||||
"stopmeow": "<emoji document_id=5172447776205702031>🎵</emoji><b>Du hast aufgehört zu miauen.</b>",
|
||||
"not_meow": "<emoji document_id=5084923566848213749>🐾</emoji><b>Du miaust gerade nicht.</b>",
|
||||
}
|
||||
|
||||
strings_es = {
|
||||
"stopmeow": "<emoji document_id=5172447776205702031>🎵</emoji><b>Has dejado de maullar.</b>",
|
||||
"not_meow": "<emoji document_id=5084923566848213749>🐾</emoji><b>No estás maullando en este momento.</b>",
|
||||
}
|
||||
|
||||
@loader.command(
|
||||
ru_doc="Начать мяукать на разных языках",
|
||||
uz_doc="Turli tillarda miyovlashni boshlang",
|
||||
de_doc="Fangen Sie an, auf verschiedenen Sprachen zu miauen",
|
||||
es_doc="Comience a maullar en diferentes idiomas",
|
||||
)
|
||||
async def meow(self, message):
|
||||
"""Start meowing in different languages"""
|
||||
lyrics = [
|
||||
"Мяу",
|
||||
"Meow",
|
||||
"Miaou",
|
||||
"Miau",
|
||||
"Miao",
|
||||
"야옹",
|
||||
"Miauczeć",
|
||||
"miyav",
|
||||
"Мяу",
|
||||
"maullar",
|
||||
"Мјау",
|
||||
"مواء",
|
||||
"myau",
|
||||
"Мияу",
|
||||
"Мөө",
|
||||
"喵喵",
|
||||
"Niau",
|
||||
"म्याऊं",
|
||||
"မကွာ",
|
||||
"নিঃ",
|
||||
"กิน",
|
||||
"მაიო",
|
||||
"म्याँऊँ",
|
||||
"ມີອູດ",
|
||||
"မြှောက်",
|
||||
"මීයා",
|
||||
"מיאו",
|
||||
"մյուռ",
|
||||
"میاو",
|
||||
"म्याऊं",
|
||||
"ಮ್ಯಾವ್",
|
||||
"មែយវ៉េ",
|
||||
"മിയാവ്",
|
||||
"мйаоу",
|
||||
"მიაუ",
|
||||
"میاو",
|
||||
"میائو",
|
||||
"เหมียว",
|
||||
"မြကွေး",
|
||||
]
|
||||
self.playing_meow = True
|
||||
for line in lyrics:
|
||||
await asyncio.sleep(2)
|
||||
await utils.answer(message, line)
|
||||
if not self.playing_meow:
|
||||
break
|
||||
self.playing_meow = False
|
||||
|
||||
@loader.command(
|
||||
ru_doc="Остановить мяуканье на разных языках",
|
||||
uz_doc="Turli tillarda miyovlashni to'xtatish",
|
||||
de_doc="Hören Sie auf, auf verschiedenen Sprachen zu miauen",
|
||||
es_doc="Detener el maullido en diferentes idiomas",
|
||||
)
|
||||
async def stopmeow(self, message):
|
||||
"""Stop meowing in different languages"""
|
||||
if self.playing_meow:
|
||||
self.playing_meow = False
|
||||
await utils.answer(message, self.strings["stopmeow"])
|
||||
else:
|
||||
await utils.answer(message, self.strings["not_meow"])
|
||||
|
||||
239
KorenbZla/HikkaModules/MyDebtors.py
Normal file
239
KorenbZla/HikkaModules/MyDebtors.py
Normal file
@@ -0,0 +1,239 @@
|
||||
# * _ __ __ _ _
|
||||
# * / \ _ _ _ __ ___ _ __ __ _| \/ | ___ __| |_ _| | ___ ___
|
||||
# * / _ \| | | | '__/ _ \| '__/ _` | |\/| |/ _ \ / _` | | | | |/ _ \/ __|
|
||||
# * / ___ \ |_| | | | (_) | | | (_| | | | | (_) | (_| | |_| | | __/\__ \
|
||||
# * /_/ \_\__,_|_| \___/|_| \__,_|_| |_|\___/ \__,_|\__,_|_|\___||___/
|
||||
# *
|
||||
# * © Copyright 2024
|
||||
# *
|
||||
# * https://t.me/AuroraModules
|
||||
# *
|
||||
# * 🔒 Code is licensed under GNU AGPLv3
|
||||
# * 🌐 https://www.gnu.org/licenses/agpl-3.0.html
|
||||
# * ⛔️ You CANNOT edit this file without direct permission from the author.
|
||||
# * ⛔️ You CANNOT distribute this file if you have modified it without the direct permission of the author.
|
||||
|
||||
# Name: MyDebtors
|
||||
# Author: dend1yya | Felix?
|
||||
# Commands:
|
||||
# .dadd | .dinfo | .ddel | .dlist | .ddelall
|
||||
# scope: hikka_only
|
||||
# meta developer: @AuroraModules
|
||||
|
||||
# meta pic: https://i.postimg.cc/Hx3Zm8rB/logo.png
|
||||
# meta banner: https://te.legra.ph/file/7d7a4c3ff3711e0e1ee88.jpg
|
||||
|
||||
__version__ = (1, 1, 0)
|
||||
|
||||
from telethon.tl.types import Message # type: ignore
|
||||
from .. import loader, utils
|
||||
|
||||
@loader.tds
|
||||
class MyDebtorsMod(loader.Module):
|
||||
"""Module for managing, adding, and deleting your debtors."""
|
||||
|
||||
strings = {
|
||||
"name": "MyDebtors",
|
||||
"saved": "💾 <b>Debtor added:</b>\n<code>{}</code> - <b>Amount:</b> {}",
|
||||
"no_reply": "🚫 <b>Reply with debtor name and amount.</b>",
|
||||
"no_name": "🚫 <b>Specify debtor's name and amount.</b>",
|
||||
"no_debtor": "🚫 <b>Debtor not found.</b>",
|
||||
"available_debtors": "💾 <b>Current debtors:</b>\n",
|
||||
"no_debtors": "😔 <b>You have no debtors yet.</b>",
|
||||
"deleted": "🙂 <b>Debtor removed:</b> <code>{}</code>",
|
||||
"all_deleted": "🙂 <b>All debtors have been removed.</b>",
|
||||
"changed": "🔄 <b>Debtor's debt changed:</b> <code>{}</code> - <b>New amount:</b> {}",
|
||||
}
|
||||
|
||||
strings_ru = {
|
||||
"saved":"💾 <b>Должник добавлен: </b>\n<code>{}</code> - <b>Сумма: </b> {}",
|
||||
"no_reply": "🚫 <b>Требуется реплай на контент должника, и суммы.</b>",
|
||||
"no_name": "🚫 <b>Укажите имя должника, и сумму.</b>",
|
||||
"no_debtor": "🚫 <b>Должник не найден.</b>",
|
||||
"available_debtors": "💾 <b>Текущие должники:</b>\n",
|
||||
"no_debtors": "😔 <b>У вас нету должников.</b>",
|
||||
"deleted": "🙂 <b>Должник удален:</b> <code>{}</code>",
|
||||
"all_deleted": "🙂 <b>Все ваши должники были удалены.</b>",
|
||||
"changed": "🔄 <b>Долг должника изменен:</b> <code>{}</code> - <b>Новая сумма:</b> {}",
|
||||
}
|
||||
|
||||
strings_uz = {
|
||||
"saved":"💾 <b>Qarzdor qo'shildi:</b>\n<code>{}</code> - <b>Summa:</b> {}",
|
||||
"no_reply": "🚫 <b>Qarzdor nomi va miqdorini javob bering.</b>",
|
||||
"no_name": "🚫 <b>Qarzdor nomini va miqdorini kiriting.</b>",
|
||||
"no_debtor": "🚫 <b>Qarzdor topilmadi.</b>",
|
||||
"available_debtors": "💾 <b>Hoziroq qarz beruvchilar:</b>\n",
|
||||
"no_debtors": "😔 <b>Sizda hozircha qarzdorlar yo'q.</b>",
|
||||
"deleted": "🙂 <b>Qarzdor o'chirildi:</b> <code>{}</code>",
|
||||
"all_deleted": "🙂 <b>Barcha qarzdorlar o'chirildi.</b>",
|
||||
"changed": "🔄 <b>Qarzdor qarzi o'zgartirildi:</b> <code>{}</code> - <b>Yangi miqdor:</b> {}",
|
||||
}
|
||||
|
||||
strings_de = {
|
||||
"saved":"💾 <b>Schuldner hinzugefügt:</b>\n<code>{}</code> - <b>Betrag:</b> {}",
|
||||
"no_reply": "🚫 <b>Antworten Sie mit dem Namen des Schuldners und dem Betrag.</b>",
|
||||
"no_name": "🚫 <b>Geben Sie den Namen und den Betrag des Schuldners an.</b>",
|
||||
"no_debtor": "🚫 <b>Schuldner nicht gefunden.</b>",
|
||||
"available_debtors": "💾 <b>Aktuelle Schuldner:</b>\n",
|
||||
"no_debtors": "😔 <b>Sie haben noch keine Schuldner.</b>",
|
||||
"deleted": "🙂 <b>Schuldner entfernt:</b> <code>{}</code>",
|
||||
"all_deleted": "🙂 <b>Alle Schuldner wurden entfernt.</b>",
|
||||
"changed": "🔄 <b>Schulden des Schuldners geändert:</b> <code>{}</code> - <b>Neuer Betrag:</b> {}",
|
||||
}
|
||||
|
||||
strings_es = {
|
||||
"saved":"💾 <b>Deudor agregado:</b>\n<code>{}</code> - <b>Monto:</b> {}",
|
||||
"no_reply": "🚫 <b>Responder con el nombre del deudor y el monto.</b>",
|
||||
"no_name": "🚫 <b>Especifique el nombre y el monto del deudor.</b>",
|
||||
"no_debtor": "🚫 <b>Deudor no encontrado.</b>",
|
||||
"available_debtors": "💾 <b>Deudores actuales:</b>\n",
|
||||
"no_debtors": "😔 <b>No tienes deudores aún.</b>",
|
||||
"deleted": "🙂 <b>Deudor eliminado:</b> <code>{}</code>",
|
||||
"all_deleted": "🙂 <b>Se han eliminado todos los deudores.</b>",
|
||||
"changed": "🔄 <b>Deuda del deudor cambiada:</b> <code>{}</code> - <b>Nuevo monto:</b> {}",
|
||||
}
|
||||
|
||||
async def client_ready(self):
|
||||
self._debtors = self.get("debtors", {})
|
||||
|
||||
@loader.command(
|
||||
ru_doc="<name> <amount> - Добавить должника",
|
||||
uz_doc="<name> <amount> - Qarzdor qo'shish",
|
||||
de_doc="<name> <amount> - Schuldner hinzufügen",
|
||||
es_doc="<name> <amount> - Agregar un deudor",
|
||||
)
|
||||
async def dadd(self, message: Message):
|
||||
"""<name> <amount> - add a debtor"""
|
||||
args = utils.get_args_raw(message)
|
||||
|
||||
if not args:
|
||||
await utils.answer(message, self.strings("no_reply"))
|
||||
return
|
||||
|
||||
debtor_name, amount = args.split(maxsplit=1)
|
||||
|
||||
if not (debtor_name and amount):
|
||||
await utils.answer(message, self.strings("no_name"))
|
||||
return
|
||||
|
||||
amount = int(amount)
|
||||
|
||||
if debtor_name not in self._debtors:
|
||||
self._debtors[debtor_name] = 0
|
||||
|
||||
self._debtors[debtor_name] += amount
|
||||
|
||||
self.set("debtors", self._debtors)
|
||||
|
||||
await utils.answer(message, self.strings("saved").format(debtor_name, amount))
|
||||
|
||||
def _get_debtor(self, name):
|
||||
return self._debtors.get(name)
|
||||
|
||||
def _del_debtor(self, name):
|
||||
if name in self._debtors:
|
||||
del self._debtors[name]
|
||||
self.set("debtors", self._debtors)
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
@loader.command(
|
||||
ru_doc="<name> - Узнать информацию о должнике",
|
||||
uz_doc="<name> - Qarzdor haqida ma'lumot olish",
|
||||
de_doc="<name> - Informationen über den Schuldner erhalten",
|
||||
es_doc="<name> - Obtener información sobre el deudor",
|
||||
)
|
||||
async def dinfo(self, message: Message):
|
||||
"""<name> - Find out information about the debtor"""
|
||||
debtor_name = utils.get_args_raw(message)
|
||||
|
||||
if not debtor_name:
|
||||
await utils.answer(message, self.strings("no_name"))
|
||||
return
|
||||
|
||||
amount = self._get_debtor(debtor_name)
|
||||
|
||||
if amount is not None:
|
||||
await utils.answer(message, f"💸 <b>{debtor_name} долг:</b> {amount}")
|
||||
else:
|
||||
await utils.answer(message, self.strings("no_debtor"))
|
||||
|
||||
@loader.command(
|
||||
ru_doc="<name> - Удалить должника",
|
||||
uz_doc="<name> - Qarzdorni olib tashlash",
|
||||
de_doc="<name> - Schuldner entfernen",
|
||||
es_doc="<name> - Eliminar al deudor",
|
||||
)
|
||||
async def ddel(self, message: Message):
|
||||
"""<name> - Remove the debtor"""
|
||||
debtor_name = utils.get_args_raw(message)
|
||||
|
||||
if not debtor_name:
|
||||
await utils.answer(message, self.strings("no_name"))
|
||||
return
|
||||
|
||||
if self._del_debtor(debtor_name):
|
||||
await utils.answer(message, self.strings("deleted").format(debtor_name))
|
||||
else:
|
||||
await utils.answer(message, self.strings("no_debtor"))
|
||||
|
||||
@loader.command(
|
||||
ru_doc="Список всех ваших должников",
|
||||
uz_doc="Sizning qarz berganlar ro'yxati",
|
||||
de_doc="Liste aller Ihrer Schuldner",
|
||||
es_doc="Lista de todos sus deudores",
|
||||
)
|
||||
async def dlist(self, message: Message):
|
||||
"""List of all your debtors"""
|
||||
result = self.strings("available_debtors")
|
||||
|
||||
if not self._debtors:
|
||||
await utils.answer(message, self.strings("no_debtors"))
|
||||
return
|
||||
|
||||
for debtor_name, amount in self._debtors.items():
|
||||
result += f"\n💸 <b>{debtor_name}:</b> {amount}"
|
||||
|
||||
await utils.answer(message, result)
|
||||
|
||||
@loader.command(
|
||||
ru_doc="Удалить всех ваших должников",
|
||||
uz_doc="Sizning barcha qarz berganlaringizni olib tashlash",
|
||||
de_doc="Alle Ihre Schuldner entfernen",
|
||||
es_doc="Eliminar a todos sus deudores",
|
||||
)
|
||||
async def ddelall(self, message: Message):
|
||||
"""Remove all your debtors"""
|
||||
self._debtors = {}
|
||||
self.set("debtors", self._debtors)
|
||||
await utils.answer(message, self.strings("all_deleted"))
|
||||
|
||||
@loader.command(
|
||||
ru_doc="<name> <amount> - Изменить долг",
|
||||
uz_doc="<name> <amount> - Qarzni o'zgartirish",
|
||||
de_doc="<name> <amount> - Schulden ändern",
|
||||
es_doc="<name> <amount> - Cambiar la deuda",
|
||||
)
|
||||
async def dset(self, message: Message):
|
||||
"""<name> <amount> - Change the debt"""
|
||||
args = utils.get_args_raw(message)
|
||||
|
||||
if not args:
|
||||
await utils.answer(message, self.strings("no_reply"))
|
||||
return
|
||||
|
||||
debtor_name, new_amount = args.split(maxsplit=1)
|
||||
|
||||
if not (debtor_name and new_amount):
|
||||
await utils.answer(message, self.strings("no_name"))
|
||||
return
|
||||
|
||||
new_amount = int(new_amount)
|
||||
|
||||
if debtor_name in self._debtors:
|
||||
self._debtors[debtor_name] = new_amount
|
||||
self.set("debtors", self._debtors)
|
||||
await utils.answer(message, self.strings("changed").format(debtor_name, new_amount))
|
||||
else:
|
||||
await utils.answer(message, self.strings("no_debtor"))
|
||||
1
KorenbZla/HikkaModules/README.md
Normal file
1
KorenbZla/HikkaModules/README.md
Normal file
@@ -0,0 +1 @@
|
||||
t.me/AuroraModules
|
||||
335
KorenbZla/HikkaModules/RPSgame.py
Normal file
335
KorenbZla/HikkaModules/RPSgame.py
Normal file
@@ -0,0 +1,335 @@
|
||||
# * _ __ __ _ _
|
||||
# * / \ _ _ _ __ ___ _ __ __ _| \/ | ___ __| |_ _| | ___ ___
|
||||
# * / _ \| | | | '__/ _ \| '__/ _` | |\/| |/ _ \ / _` | | | | |/ _ \/ __|
|
||||
# * / ___ \ |_| | | | (_) | | | (_| | | | | (_) | (_| | |_| | | __/\__ \
|
||||
# * /_/ \_\__,_|_| \___/|_| \__,_|_| |_|\___/ \__,_|\__,_|_|\___||___/
|
||||
# *
|
||||
# * © Copyright 2024
|
||||
# *
|
||||
# * https://t.me/AuroraModules
|
||||
# *
|
||||
# * 🔒 Code is licensed under GNU AGPLv3
|
||||
# * 🌐 https://www.gnu.org/licenses/agpl-3.0.html
|
||||
# * ⛔️ You CANNOT edit this file without direct permission from the author.
|
||||
# * ⛔️ You CANNOT distribute this file if you have modified it without the direct permission of the author.
|
||||
|
||||
# Name: RPSgame
|
||||
# Author: Felix
|
||||
# Commands:
|
||||
# .sgamerps (.rps) | .cleargames (.clg)
|
||||
# scope: hikka_only
|
||||
# meta developer: @AuroraModules
|
||||
|
||||
__version__ = (1, 0, 0)
|
||||
|
||||
import time
|
||||
import random
|
||||
from .. import loader, utils
|
||||
from telethon.utils import get_display_name # type: ignore
|
||||
|
||||
class RPSgameMod(loader.Module):
|
||||
"""With this module, you can play the game «rock, paper, scissors»."""
|
||||
|
||||
strings = {
|
||||
"name": "RPSgame",
|
||||
"searching": "<b>✌️ The game «Rock, Paper, Scissors» begins!\n👀 Waiting for a second player to join...</b>",
|
||||
"join_game": "👾 Join the game",
|
||||
"rules": "📄 Game rules",
|
||||
"game_started": "⚠ The game has already started",
|
||||
"game_already_running": "<emoji document_id=5255772095958229697>🤚</emoji> <b>Oops, a game is already running, use </b><code>{}cleargames</code><b> to end all active games.</b>",
|
||||
"games_cleared": "<emoji document_id=6007942490076745785>🧹</emoji> <b>All active games have been ended and cleared.</b>",
|
||||
"turn": "<b>🕹 The game has started!\n👀 The first turn goes to {}</b>!",
|
||||
"next_player": "<b>😱 It's {}'s turn next</b>",
|
||||
"not_your_turn": "⚠ It's not your turn!",
|
||||
"not_player": "❌ You're not participating in the game",
|
||||
"cooldown": "⚠ Not so fast!",
|
||||
"winner": "<b>🎉 Winner: {}</b>\n\n<b>👤 <a href='tg://openmessage?user_id={}'>{}</a> chose: {}</b> \n<b>👤<a href='tg://openmessage?user_id={}'>{}</a> chose: {}</b>",
|
||||
"draw": "<b>🤝 It's a draw!</b>\n\n<b>👤 <a href='tg://openmessage?user_id={}'>{}</a> chose: {}</b>\n<b>👤 <a href='tg://openmessage?user_id={}'>{}</a> chose: {}</b>",
|
||||
"error_play_yourself": "⚠ You can't play against yourself",
|
||||
"rock": "🪨 Rock",
|
||||
"scissors": "✂️ Scissors",
|
||||
"paper": "📄 Paper",
|
||||
"random": "🎲 Random choice",
|
||||
"close_button": "🔻 Close",
|
||||
}
|
||||
|
||||
strings_ru = {
|
||||
"searching": "<b>✌️ Игра «Камень, ножницы, бумага» начинается!\n👀 Ожидание, присоединение 2 игрока...</b>",
|
||||
"join_game": "👾 Присоединиться к игре",
|
||||
"rules": "📄 Правила игры",
|
||||
"game_started": "⚠ Игра уже началась",
|
||||
"game_already_running": "<emoji document_id=5255772095958229697>🤚</emoji> <b>Упс, игра уже запущена, используйте </b><code>{}cleargames</code><b>, чтобы завершить все начатые игры.</b>",
|
||||
"games_cleared": "<emoji document_id=6007942490076745785>🧹</emoji> <b>Все активные игры были завершены и очищены.</b>",
|
||||
"turn": "<b>🕹 Игра началась!\n👀 Первый ход за {}</b>!",
|
||||
"next_player": "<b>😱 Следующий ходит {}</b>",
|
||||
"not_your_turn": "⚠ Это не ваш ход!",
|
||||
"not_player": "❌ Вы не участвуете в игре",
|
||||
"cooldown": "⚠ Не так быстро!",
|
||||
"winner": "<b>🎉 Победитель: {}</b>\n\n<b>👤 <a href='tg://openmessage?user_id={}'>{}</a> выбрал: {}</b> \n<b>👤<a href='tg://openmessage?user_id={}'>{}</a> выбрал: {}</b>",
|
||||
"draw": "<b>🤝 Ничья!</b>\n\n<b>👤 <a href='tg://openmessage?user_id={}'>{}</a> выбрал: {}</b>\n<b>👤 <a href='tg://openmessage?user_id={}'>{}</a> выбрал: {}</b>",
|
||||
"error_play_yourself": "⚠ Вы не можете играть с самим сабой",
|
||||
"rock": "🪨 Камень",
|
||||
"scissors": "✂️ Ножницы",
|
||||
"paper": "📄 Бумага",
|
||||
"random": "🎲 Случайный выбор",
|
||||
"close_button": "🔻 Закрыть",
|
||||
}
|
||||
|
||||
strings_uz = {
|
||||
"searching": "<b>✌️ «Qog'oz, Qaychi, Tosh» o'yini boshlanmoqda!\n👀 Ikkinchi o'yinchi kutilmoqda...</b>",
|
||||
"join_game": "👾 O'yinga qo'shilish",
|
||||
"rules": "📄 O'yin qoidalari",
|
||||
"game_started": "⚠ O'yin allaqachon boshlangan",
|
||||
"game_already_running": "<emoji document_id=5255772095958229697>🤚</emoji> <b>Oops, o'yin allaqachon boshlangan, </b><code>{}cleargames</code><b> buyruqni ishlating, barcha o'yinlarni tugatish uchun.</b>",
|
||||
"games_cleared": "<emoji document_id=6007942490076745785>🧹</emoji> <b>Barcha faol o'yinlar tugatildi va tozalandi.</b>",
|
||||
"turn": "<b>🕹 O'yin boshlandi!\n👀 Birinchi yurish {}</b>!",
|
||||
"next_player": "<b>😱 Keyingi yurish {} da</b>",
|
||||
"not_your_turn": "⚠ Bu sizning navbatingiz emas!",
|
||||
"not_player": "❌ Siz o'yinda emassiz",
|
||||
"cooldown": "⚠ Shoshilmang!",
|
||||
"winner": "<b>🎉 G'olib: {}</b>\n\n<b>👤 <a href='tg://openmessage?user_id={}'>{}</a> tanladi: {}</b> \n<b>👤<a href='tg://openmessage?user_id={}'>{}</a> tanladi: {}</b>",
|
||||
"draw": "<b>🤝 Durrang!</b>\n\n<b>👤 <a href='tg://openmessage?user_id={}'>{}</a> tanladi: {}</b>\n<b>👤 <a href='tg://openmessage?user_id={}'>{}</a> tanladi: {}</b>",
|
||||
"error_play_yourself": "⚠ O'zingiz bilan o'ynay olmaysiz",
|
||||
"rock": "🪨 Tosh",
|
||||
"scissors": "✂️ Qaychi",
|
||||
"paper": "📄 Qog'oz",
|
||||
"random": "🎲 Tasodifiy tanlash",
|
||||
"close_button": "🔻 Yopish",
|
||||
}
|
||||
|
||||
strings_de = {
|
||||
"searching": "<b>✌️ Das Spiel «Schere, Stein, Papier» beginnt!\n👀 Warte auf den zweiten Spieler...</b>",
|
||||
"join_game": "👾 Dem Spiel beitreten",
|
||||
"rules": "📄 Spielregeln",
|
||||
"game_started": "⚠ Das Spiel hat bereits begonnen",
|
||||
"game_already_running": "<emoji document_id=5255772095958229697>🤚</emoji> <b>Ups, ein Spiel läuft bereits, benutze </b><code>{}cleargames</code><b>, um alle aktiven Spiele zu beenden.</b>",
|
||||
"games_cleared": "<emoji document_id=6007942490076745785>🧹</emoji> <b>Alle aktiven Spiele wurden beendet und gelöscht.</b>",
|
||||
"turn": "<b>🕹 Das Spiel hat begonnen!\n👀 Der erste Zug geht an {}</b>!",
|
||||
"next_player": "<b>😱 Der nächste Zug geht an {}</b>",
|
||||
"not_your_turn": "⚠ Es ist nicht dein Zug!",
|
||||
"not_player": "❌ Du nimmst nicht am Spiel teil",
|
||||
"cooldown": "⚠ Nicht so schnell!",
|
||||
"winner": "<b>🎉 Gewinner: {}</b>\n\n<b>👤 <a href='tg://openmessage?user_id={}'>{}</a> wählte: {}</b> \n<b>👤<a href='tg://openmessage?user_id={}'>{}</a> wählte: {}</b>",
|
||||
"draw": "<b>🤝 Unentschieden!</b>\n\n<b>👤 <a href='tg://openmessage?user_id={}'>{}</a> wählte: {}</b>\n<b>👤 <a href='tg://openmessage?user_id={}'>{}</a> wählte: {}</b>",
|
||||
"error_play_yourself": "⚠ Du kannst nicht gegen dich selbst spielen",
|
||||
"rock": "🪨 Stein",
|
||||
"scissors": "✂️ Schere",
|
||||
"paper": "📄 Papier",
|
||||
"random": "🎲 Zufällige Wahl",
|
||||
"close_button": "🔻 Schließen",
|
||||
}
|
||||
|
||||
strings_es = {
|
||||
"searching": "<b>✌️ El juego «Piedra, Papel, Tijeras» comienza!\n👀 Esperando que se una un segundo jugador...</b>",
|
||||
"join_game": "👾 Unirse al juego",
|
||||
"rules": "📄 Reglas del juego",
|
||||
"game_started": "⚠ El juego ya ha comenzado",
|
||||
"game_already_running": "<emoji document_id=5255772095958229697>🤚</emoji> <b>Ups, un juego ya está en marcha, usa </b><code>{}cleargames</code><b> para terminar todos los juegos activos.</b>",
|
||||
"games_cleared": "<emoji document_id=6007942490076745785>🧹</emoji> <b>Todos los juegos activos han sido terminados y eliminados.</b>",
|
||||
"turn": "<b>🕹 ¡El juego ha comenzado!\n👀 El primer turno es para {}</b>!",
|
||||
"next_player": "<b>😱 El siguiente turno es para {}</b>",
|
||||
"not_your_turn": "⚠ ¡No es tu turno!",
|
||||
"not_player": "❌ No estás participando en el juego",
|
||||
"cooldown": "⚠ ¡No tan rápido!",
|
||||
"winner": "<b>🎉 Ganador: {}</b>\n\n<b>👤 <a href='tg://openmessage?user_id={}'>{}</a> eligió: {}</b> \n<b>👤<a href='tg://openmessage?user_id={}'>{}</a> eligió: {}</b>",
|
||||
"draw": "<b>🤝 ¡Empate!</b>\n\n<b>👤 <a href='tg://openmessage?user_id={}'>{}</a> eligió: {}</b>\n<b>👤 <a href='tg://openmessage?user_id={}'>{}</a> eligió: {}</b>",
|
||||
"error_play_yourself": "⚠ No puedes jugar contra ti mismo",
|
||||
"rock": "🪨 Piedra",
|
||||
"scissors": "✂️ Tijeras",
|
||||
"paper": "📄 Papel",
|
||||
"random": "🎲 Elección aleatoria",
|
||||
"close_button": "🔻 Cerrar",
|
||||
}
|
||||
|
||||
def __init__(self):
|
||||
self.games = {}
|
||||
self.last_click_time = {}
|
||||
|
||||
@loader.command(
|
||||
ru_doc="- Начать игру «Камень, ножницы, бумага»",
|
||||
uz_doc="- «Tosh, qog'oz, qaychi» o'yinining boshlanishi",
|
||||
de_doc="- Beginn des Spiels «Stein, Papier, Schere»",
|
||||
es_doc="- El comienzo del juego «Piedra, papel o tijera»",
|
||||
alias="rps"
|
||||
)
|
||||
async def sgamerps(self, message):
|
||||
"""- Start the game «Rock, Paper, Scissors»"""
|
||||
chat_id = message.chat_id
|
||||
player1_id = message.sender_id
|
||||
game_id = f"{chat_id}_{player1_id}"
|
||||
prefix = utils.escape_html(self.get_prefix())
|
||||
|
||||
if game_id in self.games:
|
||||
await utils.answer(message, self.strings["game_already_running"].format(prefix))
|
||||
return
|
||||
|
||||
self.games[game_id] = {
|
||||
"player1": player1_id,
|
||||
"player2": None,
|
||||
"choices": {},
|
||||
"current_turn": None,
|
||||
}
|
||||
|
||||
await self.inline.form(
|
||||
message=message,
|
||||
text=self.strings["searching"],
|
||||
reply_markup=[
|
||||
[
|
||||
{"text": self.strings['rules'], "url": "https://ru.wikipedia.org/wiki/Камень,_ножницы,_бумага#Правила_игры:~:text=Победитель%20определяется%20по%20следующим%20правилам%3A"}
|
||||
],
|
||||
[
|
||||
{"text": self.strings['join_game'], "callback": self.join_game, "args": (game_id,),}
|
||||
],
|
||||
],
|
||||
disable_security=True,
|
||||
)
|
||||
|
||||
async def join_game(self, call, game_id: str):
|
||||
game = self.games.get(game_id)
|
||||
player2_id = call.from_user.id
|
||||
|
||||
current_time = time.time()
|
||||
if player2_id in self.last_click_time and current_time - self.last_click_time[player2_id] < 3:
|
||||
await call.answer(self.strings["cooldown"])
|
||||
return
|
||||
|
||||
self.last_click_time[player2_id] = current_time
|
||||
|
||||
if game["player1"] == player2_id:
|
||||
await call.answer(self.strings["error_play_yourself"])
|
||||
return
|
||||
|
||||
if game["player2"] is not None:
|
||||
await call.answer(self.strings["game_started"])
|
||||
return
|
||||
|
||||
game["player2"] = player2_id
|
||||
game["current_turn"] = random.choice([game["player1"], game["player2"]])
|
||||
|
||||
await call.edit(
|
||||
text=self.strings["turn"].format(
|
||||
get_display_name(await self._client.get_entity(game["current_turn"]))
|
||||
),
|
||||
reply_markup=[
|
||||
[
|
||||
{"text": self.strings["rock"], "callback": self.make_choice, "args": (game_id, "rock")},
|
||||
{"text": self.strings["scissors"], "callback": self.make_choice, "args": (game_id, "scissors")},
|
||||
{"text": self.strings["paper"], "callback": self.make_choice, "args": (game_id, "paper")},
|
||||
],
|
||||
[
|
||||
{"text": self.strings["random"], "callback": self.make_choice, "args": (game_id, "random")},
|
||||
],
|
||||
]
|
||||
)
|
||||
|
||||
async def make_choice(self, call, game_id: str, choice: str):
|
||||
game = self.games.get(game_id)
|
||||
current_time = time.time()
|
||||
|
||||
if call.from_user.id in self.last_click_time and current_time - self.last_click_time[call.from_user.id] < 2:
|
||||
await call.answer(self.strings["cooldown"])
|
||||
return
|
||||
|
||||
self.last_click_time[call.from_user.id] = current_time
|
||||
|
||||
if call.from_user.id not in [game["player1"], game["player2"]]:
|
||||
await call.answer(self.strings["not_player"])
|
||||
return
|
||||
|
||||
is_random = choice == "random"
|
||||
if is_random:
|
||||
choice = random.choice(["rock", "scissors", "paper"])
|
||||
|
||||
game["choices"][call.from_user.id] = (choice, "random" if is_random else None)
|
||||
|
||||
if len(game["choices"]) == 2:
|
||||
await self.resolve_game(call, game_id)
|
||||
else:
|
||||
game["current_turn"] = game["player1"] if call.from_user.id == game["player2"] else game["player2"]
|
||||
next_player = get_display_name(await self._client.get_entity(game['current_turn']))
|
||||
await call.edit(
|
||||
text=self.strings['next_player'].format(next_player),
|
||||
reply_markup=[
|
||||
[
|
||||
{"text": self.strings["rock"], "callback": self.make_choice, "args": (game_id, "rock")},
|
||||
{"text": self.strings["scissors"], "callback": self.make_choice, "args": (game_id, "scissors")},
|
||||
{"text": self.strings["paper"], "callback": self.make_choice, "args": (game_id, "paper")},
|
||||
],
|
||||
[
|
||||
{"text": self.strings["random"], "callback": self.make_choice, "args": (game_id, "random")},
|
||||
],
|
||||
]
|
||||
)
|
||||
|
||||
async def resolve_game(self, call, game_id: str):
|
||||
game = self.games.get(game_id)
|
||||
|
||||
if not game:
|
||||
return
|
||||
|
||||
player1_id = game["player1"]
|
||||
player2_id = game["player2"]
|
||||
|
||||
player1_choice, player1_random = game["choices"].get(player1_id, (None, None))
|
||||
player2_choice, player2_random = game["choices"].get(player2_id, (None, None))
|
||||
|
||||
if player1_choice is None or player2_choice is None:
|
||||
return
|
||||
|
||||
player1_choice_text = self.strings[player1_choice]
|
||||
player2_choice_text = self.strings[player2_choice]
|
||||
|
||||
if player1_random:
|
||||
player1_choice_text += " [🎲RANDOM]"
|
||||
if player2_random:
|
||||
player2_choice_text += " [🎲RANDOM]"
|
||||
|
||||
if player1_choice == player2_choice:
|
||||
result_message = self.strings["draw"].format(
|
||||
player1_id,
|
||||
utils.escape_html(get_display_name(await self._client.get_entity(player1_id))),
|
||||
player1_choice_text,
|
||||
player2_id,
|
||||
utils.escape_html(get_display_name(await self._client.get_entity(player2_id))),
|
||||
player2_choice_text,
|
||||
)
|
||||
else:
|
||||
winning_conditions = {
|
||||
"rock": "scissors",
|
||||
"scissors": "paper",
|
||||
"paper": "rock"
|
||||
}
|
||||
|
||||
winner_id = player1_id if winning_conditions[player1_choice] == player2_choice else player2_id
|
||||
result_message = self.strings["winner"].format(
|
||||
utils.escape_html(get_display_name(await self._client.get_entity(winner_id))),
|
||||
winner_id,
|
||||
utils.escape_html(get_display_name(await self._client.get_entity(player1_id))),
|
||||
player1_choice_text,
|
||||
player2_id,
|
||||
utils.escape_html(get_display_name(await self._client.get_entity(player2_id))),
|
||||
player2_choice_text,
|
||||
)
|
||||
|
||||
await call.edit(text=result_message, reply_markup=[
|
||||
[
|
||||
{"text": self.strings["close_button"], "callback": self.call_del},
|
||||
]
|
||||
])
|
||||
|
||||
del self.games[game_id]
|
||||
|
||||
async def call_del(self, call):
|
||||
await call.delete()
|
||||
|
||||
@loader.command(
|
||||
ru_doc=f"- Завершить все активные игры.",
|
||||
uz_doc="- Barcha faol o'yinlarni tugatish.",
|
||||
de_doc="- Alle aktiven Spiele beenden.",
|
||||
es_doc="- Completar todos los juegos en curso.",
|
||||
alias="clg"
|
||||
)
|
||||
async def cleargames(self, message):
|
||||
"""- Complete all running games."""
|
||||
self.games.clear()
|
||||
await utils.answer(message, self.strings["games_cleared"])
|
||||
109
KorenbZla/HikkaModules/RandomAvatars.py
Normal file
109
KorenbZla/HikkaModules/RandomAvatars.py
Normal file
@@ -0,0 +1,109 @@
|
||||
# * _ __ __ _ _
|
||||
# * / \ _ _ _ __ ___ _ __ __ _| \/ | ___ __| |_ _| | ___ ___
|
||||
# * / _ \| | | | '__/ _ \| '__/ _` | |\/| |/ _ \ / _` | | | | |/ _ \/ __|
|
||||
# * / ___ \ |_| | | | (_) | | | (_| | | | | (_) | (_| | |_| | | __/\__ \
|
||||
# * /_/ \_\__,_|_| \___/|_| \__,_|_| |_|\___/ \__,_|\__,_|_|\___||___/
|
||||
# *
|
||||
# * © Copyright 2024
|
||||
# *
|
||||
# * https://t.me/AuroraModules
|
||||
# *
|
||||
# * 🔒 Code is licensed under GNU AGPLv3
|
||||
# * 🌐 https://www.gnu.org/licenses/agpl-3.0.html
|
||||
# * ⛔️ You CANNOT edit this file without direct permission from the author.
|
||||
# * ⛔️ You CANNOT distribute this file if you have modified it without the direct permission of the author.
|
||||
|
||||
# Name: RandomAvatars
|
||||
# Author: Felix?
|
||||
# Commands:
|
||||
# .rpavatars
|
||||
# scope: hikka_only
|
||||
# meta developer: @AuroraModules
|
||||
|
||||
# meta pic: https://i.postimg.cc/Hx3Zm8rB/logo.png
|
||||
# meta banner: https://te.legra.ph/file/64b1e88536b3ba59c94da.jpg
|
||||
|
||||
__version__ = (1, 3, 0)
|
||||
|
||||
import os
|
||||
import logging
|
||||
from .. import loader, utils
|
||||
from telethon.tl.functions.channels import JoinChannelRequest # type: ignore
|
||||
|
||||
logger = logging.getLogger("RandomAvatars")
|
||||
|
||||
@loader.tds
|
||||
class RandomAvatars(loader.Module):
|
||||
|
||||
strings = {
|
||||
"name": "RandomAvatars",
|
||||
"loading_avatars": "<emoji document_id=5215327832040811010>⏳</emoji> <b>loading the avatars</b>",
|
||||
"error_loading": "<b>Failed to get avatars. Please check the PM with the bot @anime_4bot</b>",
|
||||
}
|
||||
|
||||
strings_ru = {
|
||||
"loading_avatars": "<emoji document_id=5215327832040811010>⏳</emoji> <b>загрузка аватарок</b>",
|
||||
"error_loading": "<b>Не удалось получить аватарки. Пожалуйста проверьте ЛС с ботом @anime_4bot</b>",
|
||||
}
|
||||
|
||||
strings_uz = {
|
||||
"loading_avatars": "<emoji document_id=5215327832040811010>⏳</emoji> <b>avatarlarni yuklash</b>",
|
||||
"error_loading": "<b>Avatarlar olinmadi. Iltimos, PMni @anime_4bot boti bilan tekshiring</b>",
|
||||
}
|
||||
|
||||
strings_de= {
|
||||
"loading_avatars": "<emoji document_id=5215327832040811010>⏳</emoji> <b>Laden der Avatare</b>",
|
||||
"error_loading": "<b>Avatare konnten nicht abgerufen werden. Bitte überprüfen Sie die PM mit dem Bot @anime_4bot</b>",
|
||||
}
|
||||
|
||||
strings_es = {
|
||||
"loading_avatars": "<emoji document_id=5215327832040811010>⏳</emoji> <b>cargando los avatares</b>",
|
||||
"error_loading": "<b>No se pudieron obtener avatares. Por favor revisa el MP con el bot @anime_4bot</b>",
|
||||
}
|
||||
|
||||
@loader.command(
|
||||
ru_doc="Поиск случайных парных аватарок",
|
||||
uz_doc="Tasodifiy juftlashtirilgan avatarlarni qidiring",
|
||||
de_doc="Suchen Sie nach zufällig gepaarten Avataren",
|
||||
es_doc="Buscar avatares emparejados aleatoriamente",
|
||||
)
|
||||
async def rpavatars(self, message):
|
||||
"""random paired avatars"""
|
||||
|
||||
try:
|
||||
channel_a = "https://t.me/anime4_avatarki"
|
||||
channel_b = "https://t.me/anime4_arts"
|
||||
await self.client(JoinChannelRequest(channel_a))
|
||||
await self.client(JoinChannelRequest(channel_b))
|
||||
except Exception:
|
||||
logger.error("Error when subscribing to channels.")
|
||||
|
||||
await utils.answer(message, self.strings("loading_avatars"))
|
||||
|
||||
async with self._client.conversation("@anime_4bot") as conv:
|
||||
|
||||
await conv.send_message("🎎 Парные аватарки")
|
||||
|
||||
response1 = await conv.get_response()
|
||||
|
||||
if response1.photo:
|
||||
media1 = await self._client.download_media(response1.photo, "avatars")
|
||||
|
||||
response2 = await conv.get_response()
|
||||
|
||||
if response2.photo:
|
||||
media2 = await self._client.download_media(response2.photo, "avatars")
|
||||
|
||||
await message.client.send_message(
|
||||
message.peer_id,
|
||||
file=media1,
|
||||
)
|
||||
await message.client.send_message(
|
||||
message.peer_id,
|
||||
file=media2,
|
||||
)
|
||||
|
||||
os.remove(media1)
|
||||
os.remove(media2)
|
||||
|
||||
await message.delete()
|
||||
96
KorenbZla/HikkaModules/RandomNumber.py
Normal file
96
KorenbZla/HikkaModules/RandomNumber.py
Normal file
@@ -0,0 +1,96 @@
|
||||
# * _ __ __ _ _
|
||||
# * / \ _ _ _ __ ___ _ __ __ _| \/ | ___ __| |_ _| | ___ ___
|
||||
# * / _ \| | | | '__/ _ \| '__/ _` | |\/| |/ _ \ / _` | | | | |/ _ \/ __|
|
||||
# * / ___ \ |_| | | | (_) | | | (_| | | | | (_) | (_| | |_| | | __/\__ \
|
||||
# * /_/ \_\__,_|_| \___/|_| \__,_|_| |_|\___/ \__,_|\__,_|_|\___||___/
|
||||
# *
|
||||
# * © Copyright 2024
|
||||
# *
|
||||
# * https://t.me/AuroraModules
|
||||
# *
|
||||
# * 🔒 Code is licensed under GNU AGPLv3
|
||||
# * 🌐 https://www.gnu.org/licenses/agpl-3.0.html
|
||||
# * ⛔️ You CANNOT edit this file without direct permission from the author.
|
||||
# * ⛔️ You CANNOT distribute this file if you have modified it without the direct permission of the author.
|
||||
|
||||
# Name: RandomNumber
|
||||
# Author: Felix?
|
||||
# Commands:
|
||||
# .RandomNumber
|
||||
# scope: hikka_only
|
||||
# meta developer: @AuroraModules
|
||||
|
||||
# meta pic: https://i.postimg.cc/Hx3Zm8rB/logo.png
|
||||
# meta banner: https://te.legra.ph/file/f35de08579b3bd2235bc4.jpg
|
||||
|
||||
__version__ = (1, 0, 1)
|
||||
|
||||
import random
|
||||
from telethon.tl.types import Message # type: ignore
|
||||
from .. import loader, utils
|
||||
|
||||
@loader.tds
|
||||
class RandomNumberMod(loader.Module):
|
||||
"""Random numbers generator"""
|
||||
|
||||
strings = {
|
||||
"name": "RandomNumber",
|
||||
"rnumber": "<emoji document_id=5285372392086976148>🦋</emoji> <b>The number dropped</b>",
|
||||
"cfg_Number_Min": "Minimum number to be drawn",
|
||||
"cfg_Number_Max": "Maximum number rolled",
|
||||
}
|
||||
|
||||
strings_ru = {
|
||||
"rnumber": "<emoji document_id=5285372392086976148>🦋</emoji> <b>Выпало число</b>",
|
||||
"cfg_Number_Min": "Минимальное число в выпадении",
|
||||
"cfg_Number_Max": "Максимальное число в выпадении",
|
||||
}
|
||||
|
||||
strings_uz = {
|
||||
"rnumber": "<emoji document_id=5285372392086976148>🦋</emoji> <b>Chiqqan raqam</b>",
|
||||
"cfg_Number_Min": "Chiqqan eng kichik raqam",
|
||||
"cfg_Number_Max": "Chiqqan eng katta raqam",
|
||||
}
|
||||
|
||||
strings_de = {
|
||||
"rnumber": "<emoji document_id=5285372392086976148>🦋</emoji> <b>Die Zahl ist gefallen</b>",
|
||||
"cfg_Number_Min": "Mindestanzahl beim Wurf",
|
||||
"cfg_Number_Max": "Maximale Anzahl beim Wurf",
|
||||
}
|
||||
|
||||
strings_es = {
|
||||
"rnumber": "<emoji document_id=5285372392086976148>🦋</emoji> <b>El número ha caído</b>",
|
||||
"cfg_Number_Min": "Número mínimo en la caída",
|
||||
"cfg_Number_Max": "Número máximo en la caída",
|
||||
}
|
||||
|
||||
|
||||
def __init__(self):
|
||||
self.config = loader.ModuleConfig(
|
||||
loader.ConfigValue(
|
||||
"Number_Min",
|
||||
0,
|
||||
lambda: self.strings["cfg_Number_Min"],
|
||||
validator=loader.validators.Integer(),
|
||||
),
|
||||
loader.ConfigValue(
|
||||
"Number_Max",
|
||||
1000,
|
||||
lambda: self.strings["cfg_Number_Max"],
|
||||
validator=loader.validators.Integer(),
|
||||
),
|
||||
)
|
||||
|
||||
@loader.command(
|
||||
ru_doc="Случайное число",
|
||||
uz_doc="Tasodifiy raqam",
|
||||
de_doc="Zufallszahl",
|
||||
es_doc="Número aleatorio",
|
||||
)
|
||||
async def RandomNumber(self, message: Message):
|
||||
"""Random number"""
|
||||
min_number = min(self.config["Number_Min"], self.config["Number_Max"])
|
||||
max_number = max(self.config["Number_Min"], self.config["Number_Max"])
|
||||
Number = random.randint(min_number, max_number)
|
||||
result = Number
|
||||
await utils.answer(message, f"{self.strings('rnumber')}: {result}")
|
||||
224
KorenbZla/HikkaModules/Randomizer.py
Normal file
224
KorenbZla/HikkaModules/Randomizer.py
Normal file
@@ -0,0 +1,224 @@
|
||||
# * _ __ __ _ _
|
||||
# * / \ _ _ _ __ ___ _ __ __ _| \/ | ___ __| |_ _| | ___ ___
|
||||
# * / _ \| | | | '__/ _ \| '__/ _` | |\/| |/ _ \ / _` | | | | |/ _ \/ __|
|
||||
# * / ___ \ |_| | | | (_) | | | (_| | | | | (_) | (_| | |_| | | __/\__ \
|
||||
# * /_/ \_\__,_|_| \___/|_| \__,_|_| |_|\___/ \__,_|\__,_|_|\___||___/
|
||||
# *
|
||||
# * © Copyright 2024
|
||||
# *
|
||||
# * https://t.me/AuroraModules
|
||||
# *
|
||||
# * 🔒 Code is licensed under GNU AGPLv3
|
||||
# * 🌐 https://www.gnu.org/licenses/agpl-3.0.html
|
||||
# * ⛔️ You CANNOT edit this file without direct permission from the author.
|
||||
# * ⛔️ You CANNOT distribute this file if you have modified it without the direct permission of the author.
|
||||
|
||||
# Name: Randomizer
|
||||
# Author: dend1yya | Felix?
|
||||
# Commands:
|
||||
# .cube | .monetka | .rnum
|
||||
# scope: hikka_only
|
||||
# meta developer: @AuroraModules
|
||||
|
||||
# meta pic: https://i.postimg.cc/Hx3Zm8rB/logo.png
|
||||
# meta banner: https://te.legra.ph/file/201288f407537011ce0ed.jpg
|
||||
|
||||
__version__ = (1, 1, 1)
|
||||
|
||||
import random
|
||||
import asyncio
|
||||
from telethon.tl.types import Message # type: ignore
|
||||
from .. import loader, utils
|
||||
|
||||
@loader.tds
|
||||
class RandomizerMod(loader.Module):
|
||||
"""Module for playing with dice, heads/tails and other games."""
|
||||
|
||||
strings = {
|
||||
"name": "Randomizer",
|
||||
"invalid_number": "🚫 <b>Invalid number! Please choose a number between 1 and 6.</b>",
|
||||
"rolled": "🎲 <b>Rolled the cube, got:</b> <code>{}</code>",
|
||||
"win": "🎉 <b>Congratulations! You guessed it right!</b>",
|
||||
"lose": "😞 <b>Sorry, you didn't guess it right. Try again!</b>",
|
||||
"invalid_monetka": "🚫 <b>Invalid choice! Please choose 'Heads' or 'Tails'.</b>",
|
||||
"flipping": "🔄 <b>Flipping the coin...</b>",
|
||||
"flipped": "🪙 <b>Coin flipped, it's:</b> <code>{}</code>",
|
||||
"cfg_Number_Min": "Minimum number to be drawn",
|
||||
"cfg_Number_Max": "Maximum number rolled",
|
||||
"rnumber": "<emoji document_id=5285372392086976148>🦋</emoji> <b>The number dropped</b>",
|
||||
"error_min": "<emoji document_id=5287611315588707430>❌</emoji> <b>Error: Value is less than the minimum number from the configuration.</b>",
|
||||
"error_max": "<emoji document_id=5287611315588707430>❌</emoji> <b>Error: Value is greater than the maximum number from the configuration.",
|
||||
"invalid_rnumber": "🚫 <b>The number is specified incorrectly or is not a number.</b>",
|
||||
}
|
||||
|
||||
strings_ru = {
|
||||
"invalid_number": "🚫<b>Указано неверное число! Пожалуйста выберите число от 1 до 6.</b>",
|
||||
"rolled": "🎲<b>Подробсил кубик и получил:</b> <code>{}</code>",
|
||||
"win": "🎉<b>Поздравляем! Вы выйграли</b>",
|
||||
"lose": "😞<b>Вы проиграли, вы загадали неверное число. Попробуйте ещё раз!</b>",
|
||||
"invalid_monetka": "🚫<b>Неверный выбор! Пожалуйста выберите 'орёл' или 'решка'</b>",
|
||||
"flipping": "🔄<b>Подрбасываю монетку...</b>",
|
||||
"flipped": "🪙<b>Монетка подброшена, выпало:</b> <code>{}</code>",
|
||||
"cfg_Number_Min": "Минимальное число в выпадении",
|
||||
"cfg_Number_Max": "Максимальное число в выпадении",
|
||||
"rnumber": "<emoji document_id=5285372392086976148>🦋</emoji> <b>Выпало число</b>",
|
||||
"error_min": "<emoji document_id=5287611315588707430>❌</emoji> <b>Error: Значение меньше минимального числа из конфигурации.</b>",
|
||||
"error_max": "<emoji document_id=5287611315588707430>❌</emoji> <b>Error: Значение больше максимального числа из конфигурации.</b>",
|
||||
"invalid_rnumber": "🚫 <b>Число указано неправильно или не является им.</b>",
|
||||
}
|
||||
|
||||
strings_uz = {
|
||||
"invalid_number": "🚫<b>Noto'g'ri raqam kiritildi! Iltimos, 1 dan 6 gacha bo'lgan bir raqam tanlang.</b>",
|
||||
"rolled": "🎲<b>Zar ni chiqarib oldi:</b> <code>{}</code>",
|
||||
"win": "🎉<b>Tabriklaymiz! Siz yutdingiz</b>",
|
||||
"lose": "😞<b>Siz yo'qotdingiz, siz noto'g'ri raqam o'yladiz. Qaytadan urinib ko'ring!</b>",
|
||||
"invalid_monetka": "🚫<b>Noto'g'ri tanlov! Iltimos, 'to'g' va 'yuqori' tanlang</b>",
|
||||
"flipping": "🔄<b>Yig'ishni zarba shaklida qilmoqda...</b>",
|
||||
"flipped": "🪙<b>Zarba qilindi, natija:</b> <code>{}</code>",
|
||||
"cfg_Number_Min": "Chiqqan eng kichik raqam",
|
||||
"cfg_Number_Max": "Chiqqan eng katta raqam",
|
||||
"rnumber": "<emoji document_id=5285372392086976148>🦋</emoji> <b>Chiqqan raqam</b>",
|
||||
"error_min": "<emoji document_id=5287611315588707430>❌</emoji> <b>Error: Qiymat sozlamadan minimal sonidan kichik.</b>",
|
||||
"error_max": "<emoji document_id=5287611315588707430>❌</emoji> <b>Error: Qiymat sozlamadan maksimal sonidan katta.</b>",
|
||||
"invalid_rnumber": "🚫 <b>Raqam noto'g'ri kiritilgan yoki u raqam emas.</b>",
|
||||
}
|
||||
|
||||
strings_de = {
|
||||
"invalid_number": "🚫<b>Ungültige Zahl angegeben! Bitte wählen Sie eine Zahl zwischen 1 und 6.</b>",
|
||||
"rolled": "🎲<b>Der Würfel wurde geworfen und ergab:</b> <code>{}</code>",
|
||||
"win": "🎉<b>Herzlichen Glückwunsch! Sie haben gewonnen</b>",
|
||||
"lose": "😞<b>Sie haben verloren, Sie haben eine falsche Zahl erraten. Versuchen Sie es erneut!</b>",
|
||||
"invalid_monetka": "🚫<b>Falsche Auswahl! Bitte wählen Sie 'Kopf' oder 'Zahl'</b>",
|
||||
"flipping": "🔄<b>Die Münze wird geworfen...</b>",
|
||||
"flipped": "🪙<b>Die Münze wurde geworfen, das Ergebnis ist:</b> <code>{}</code>",
|
||||
"cfg_Number_Min": "Mindestanzahl beim Wurf",
|
||||
"cfg_Number_Max": "Maximale Anzahl beim Wurf",
|
||||
"rnumber": "<emoji document_id=5285372392086976148>🦋</emoji> <b>Die Zahl ist gefallen</b>",
|
||||
"error_min": "<emoji document_id=5287611315588707430>❌</emoji> <b>Error: Wert ist kleiner als die minimale Zahl in der Konfiguration.</b>",
|
||||
"error_max": "<emoji document_id=5287611315588707430>❌</emoji> <b>Error: Wert ist größer als die maximale Zahl in der Konfiguration.</b>",
|
||||
"invalid_rnumber": "🚫 <b>Die Zahl ist falsch angegeben oder keine Zahl.</b>",
|
||||
}
|
||||
|
||||
strings_es = {
|
||||
"invalid_number": "🚫<b>¡Número invalido especificado! Por favor elige un número entre 1 y 6.</b>",
|
||||
"rolled": "🎲<b>El dado fue lanzado y obtuvo:</b> <code>{}</code>",
|
||||
"win": "🎉<b>¡Felicidades! Has ganado</b>",
|
||||
"lose": "😞<b>Has perdido, has adivinado un número incorrecto. ¡Inténtalo de nuevo!</b>",
|
||||
"invalid_monetka": "🚫<b>¡Selección no válida! Por favor elige 'cara' o 'cruz'</b>",
|
||||
"flipping": "🔄<b>Lanzando la moneda...</b>",
|
||||
"flipped": "🪙<b>La moneda ha sido lanzada, el resultado es:</b> <code>{}</code>",
|
||||
"cfg_Number_Min": "Número mínimo en la caída",
|
||||
"cfg_Number_Max": "Número máximo en la caída",
|
||||
"rnumber": "<emoji document_id=5285372392086976148>🦋</emoji> <b>El número ha caído</b>",
|
||||
"error_min": "<emoji document_id=5287611315588707430>❌</emoji> <b>Error: El valor es menor que el número mínimo de la configuración.</b>",
|
||||
"error_max": "<emoji document_id=5287611315588707430>❌</emoji> <b>Error: El valor es mayor que el número máximo de la configuración.</b>",
|
||||
"invalid_rnumber": "🚫 <b>El número está especificado incorrectamente o no es un número.</b>",
|
||||
}
|
||||
|
||||
|
||||
def __init__(self):
|
||||
self.config = loader.ModuleConfig(
|
||||
loader.ConfigValue(
|
||||
"Number_Min",
|
||||
0,
|
||||
lambda: self.strings["cfg_Number_Min"],
|
||||
validator=loader.validators.Integer(),
|
||||
),
|
||||
loader.ConfigValue(
|
||||
"Number_Max",
|
||||
10,
|
||||
lambda: self.strings["cfg_Number_Max"],
|
||||
validator=loader.validators.Integer(),
|
||||
),
|
||||
)
|
||||
|
||||
@loader.command(
|
||||
ru_doc="[0-6] - Бросить кубик с числом",
|
||||
uz_doc="[0-6] - Son bilan zar tashlash",
|
||||
de_doc="[0-6] - Würfeln mit einer Zahl",
|
||||
es_doc="[0-6] - Tirar un dado con un número",
|
||||
)
|
||||
async def cube(self, message: Message):
|
||||
"""[0-6] - Roll a dice with a number"""
|
||||
args = utils.get_args_raw(message)
|
||||
|
||||
try:
|
||||
guessed_number = int(args)
|
||||
except ValueError:
|
||||
await utils.answer(message, self.strings("invalid_number"))
|
||||
return
|
||||
|
||||
if not (1 <= guessed_number <= 6):
|
||||
await utils.answer(message, self.strings("invalid_number"))
|
||||
return
|
||||
|
||||
result = random.randint(1, 6)
|
||||
|
||||
await utils.answer(message, self.strings("rolled").format(result))
|
||||
await asyncio.sleep(2)
|
||||
|
||||
if guessed_number == result:
|
||||
await utils.answer(message, self.strings("win"))
|
||||
else:
|
||||
await utils.answer(message, self.strings("lose"))
|
||||
|
||||
@loader.command(
|
||||
ru_doc="[орёл/решка] - Подбрасывает монетку, и выдает случайный результат",
|
||||
uz_doc="[орёл/решка] - Chiqqan va tasodifiy natijani ko'rsatadi",
|
||||
de_doc="[орёл/решка] - Wirft eine Münze und gibt ein zufälliges Ergebnis aus",
|
||||
es_doc="[орёл/решка] - Voltea una moneda y da un resultado aleatorio",
|
||||
)
|
||||
async def monetka(self, message: Message):
|
||||
"""[орёл/решка] - Flips a coin and gives a random result"""
|
||||
args = utils.get_args_raw(message)
|
||||
|
||||
if args not in ["орёл", "решка"]:
|
||||
await utils.answer(message, self.strings("invalid_monetka"))
|
||||
return
|
||||
|
||||
animated_text = self.strings("flipping")
|
||||
animated_message = await utils.answer(message, animated_text)
|
||||
await asyncio.sleep(1)
|
||||
|
||||
result = random.choice(["орёл", "решка"])
|
||||
|
||||
await animated_message.edit(self.strings("flipped").format(result))
|
||||
await asyncio.sleep(2)
|
||||
|
||||
if args == result:
|
||||
await utils.answer(message, self.strings("win"))
|
||||
else:
|
||||
await utils.answer(message, self.strings("lose"))
|
||||
|
||||
@loader.command(
|
||||
ru_doc="[number] - Случайное число",
|
||||
uz_doc="[number] - Tasodifiy raqam",
|
||||
de_doc="[number] - Zufallszahl",
|
||||
es_doc="[number] - Número aleatorio",
|
||||
)
|
||||
async def rnum(self, message: Message):
|
||||
"""[number] - Random number"""
|
||||
args = utils.get_args_raw(message)
|
||||
min_number = min(self.config["Number_Min"], self.config["Number_Max"])
|
||||
max_number = max(self.config["Number_Min"], self.config["Number_Max"])
|
||||
|
||||
try:
|
||||
number_guess = int(args)
|
||||
except ValueError:
|
||||
await utils.answer(message, self.strings("invalid_rnumber"))
|
||||
return
|
||||
|
||||
if number_guess < min_number:
|
||||
await utils.answer(message, self.strings["error_min"])
|
||||
return
|
||||
elif number_guess > max_number:
|
||||
await utils.answer(message, self.strings("error_max"))
|
||||
return
|
||||
|
||||
Number = random.randint(min_number, max_number)
|
||||
result = Number
|
||||
await utils.answer(message, f"{self.strings('rnumber')}: {result}")
|
||||
|
||||
if number_guess == result:
|
||||
await asyncio.sleep(1.3)
|
||||
await utils.answer(message, self.strings("win"))
|
||||
236
KorenbZla/HikkaModules/Reports.py
Normal file
236
KorenbZla/HikkaModules/Reports.py
Normal file
@@ -0,0 +1,236 @@
|
||||
# * _ __ __ _ _
|
||||
# * / \ _ _ _ __ ___ _ __ __ _| \/ | ___ __| |_ _| | ___ ___
|
||||
# * / _ \| | | | '__/ _ \| '__/ _` | |\/| |/ _ \ / _` | | | | |/ _ \/ __|
|
||||
# * / ___ \ |_| | | | (_) | | | (_| | | | | (_) | (_| | |_| | | __/\__ \
|
||||
# * /_/ \_\__,_|_| \___/|_| \__,_|_| |_|\___/ \__,_|\__,_|_|\___||___/
|
||||
# *
|
||||
# * © Copyright 2024
|
||||
# *
|
||||
# * https://t.me/AuroraModules
|
||||
# *
|
||||
# * 🔒 Code is licensed under GNU AGPLv3
|
||||
# * 🌐 https://www.gnu.org/licenses/agpl-3.0.html
|
||||
# * ⛔️ You CANNOT edit this file without direct permission from the author.
|
||||
# * ⛔️ You CANNOT distribute this file if you have modified it without the direct permission of the author.
|
||||
|
||||
# Name: Reports
|
||||
# Author: dend1yya
|
||||
# Commands:
|
||||
# .addadmins | .chaton | .chatoff | .report
|
||||
# scope: hikka_only
|
||||
# meta developer: @AuroraModules
|
||||
|
||||
# meta pic: https://i.postimg.cc/Hx3Zm8rB/logo.png
|
||||
# meta banner: https://te.legra.ph/file/5131a980bd2f80ad463ad.jpg
|
||||
|
||||
__version__ = (1, 0, 0)
|
||||
|
||||
from hikkatl.types import Message # type: ignore
|
||||
from telethon.tl.functions.channels import InviteToChannelRequest # type: ignore
|
||||
from telethon.tl.functions.users import GetFullUserRequest #type: ignore
|
||||
from telethon.tl.functions.channels import CreateChannelRequest, InviteToChannelRequest #type: ignore
|
||||
from telethon.tl.types import ChatAdminRights #type: ignore
|
||||
from .. import loader, utils
|
||||
import logging
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@loader.tds
|
||||
class ReportsMod(loader.Module):
|
||||
"""Module for sending reports to the administration."""
|
||||
|
||||
strings = {
|
||||
"name": "Reports",
|
||||
"admin_id": "ADMIN_ID",
|
||||
"loading": "<b>Loading...</b>",
|
||||
"group_created": "<b>Report Channel accessed and admin(s) invited if specified.</b>",
|
||||
"group_error": "<b>Error accessing the report channel.</b>",
|
||||
"no_admins": "<b>No admins configered to ivnite.</b>",
|
||||
"reports_enabled": "Report reception enabled in this chat.",
|
||||
"reports_disabled": "Report reception disabled in this chat.",
|
||||
"reports_not_enabled": "<b>Reports not enabled in this chat.</b>",
|
||||
"not_args": "<b>Usage: .report {userID/@username} (reason)</b>",
|
||||
"parts_both_2": "<b>Please provide both a user and a reason.</b>",
|
||||
"success": "<b>Report submitted successfully.</b>",
|
||||
"fail": "<b>Failed to submit the report.</b>",
|
||||
}
|
||||
|
||||
strings_ru = {
|
||||
"admin_id": "ADMIN_ID",
|
||||
"loading": "<b>Загрузка...</b>",
|
||||
"group_created": "<b>Группа для репортов создана, и администраторы были приглашены.</b>",
|
||||
"group_error": "<b>Ошибка при создании канала с репортами.",
|
||||
"no_admins": "<b>Нету администраторов которых можно добавить в группу.</b>",
|
||||
"reports_enabled": "<b>Репорты включены в этом чате</b>",
|
||||
"reports_disabled": "<b>Репорты выключены в этом чате</b>",
|
||||
"reports_not_enabled": "<b>Репорты не включены в этом чате.</b>",
|
||||
"not_args": "<b>Использование: .report{userID/@username} (причина)</b>",
|
||||
"parts_both_2": "<b>Пожалуйста введите имя пользователя и причину.</b>",
|
||||
"success": "<b>Репорт успешно отправлен.</b>",
|
||||
"fail": "<b>Ошибка при отправке репорта.</b>"
|
||||
}
|
||||
|
||||
strings_uz = {
|
||||
"admin_id": "ADMIN_ID",
|
||||
"loading": "<b>Yuklanmoqda...</b>",
|
||||
"group_created": "<b>Hisobot kanali ochildi va agar ko'rsatilgan bo'lsa, administrator(lar) taklif qilindi.</b>",
|
||||
"group_error": "<b>Hisobot kanaliga kirishda xato yuz berdi.</b>",
|
||||
"no_admins": "<b>Taklif qilish uchun administratorlar mavjud emas.</b>",
|
||||
"reports_enabled": "<b>Hisobot qabul qilish ushbu chatda yoqilgan.</b>",
|
||||
"reports_disabled": "<b>Hisobot qabul qilish ushbu chatda o'chirilgan.</b>",
|
||||
"reports_not_enabled": "<b>Hisobot ushbu chatda yoqilmagan.</b>",
|
||||
"not_args": "<b>Foydalanish: .report {userID/@username} (sababi)</b>",
|
||||
"parts_both_2": "<b>Iltimos, foydalanuvchi va sababni taqdim eting.</b>",
|
||||
"success": "<b>Hisobot muvaffaqiyatli yuborildi.</b>",
|
||||
"fail": "<b>Hisobot yuborishda xato yuz berdi.</b>",
|
||||
}
|
||||
|
||||
strings_de = {
|
||||
"admin_id": "ADMIN_ID",
|
||||
"loading": "<b>Wird geladen...</b>",
|
||||
"group_created": "<b>Berichtskanal aufgerufen und Administrator(en) eingeladen, falls angegeben.</b>",
|
||||
"group_error": "<b>Fehler beim Zugreifen auf den Berichtskanal.</b>",
|
||||
"no_admins": "<b>Keine Administratoren konfiguriert, um einzuladen.</b>",
|
||||
"reports_enabled": "<b>Berichtserfassung in diesem Chat aktiviert.</b>",
|
||||
"reports_disabled": "<b>Berichtserfassung in diesem Chat deaktiviert.</b>",
|
||||
"reports_not_enabled": "<b>Berichte in diesem Chat nicht aktiviert.</b>",
|
||||
"not_args": "<b>Verwendung: .report {userID/@username} (Grund)</b>",
|
||||
"parts_both_2": "<b>Bitte sowohl einen Benutzer als auch einen Grund angeben.</b>",
|
||||
"success": "<b>Bericht erfolgreich eingereicht.</b>",
|
||||
"fail": "<b>Fehler beim Einreichen des Berichts.</b>",
|
||||
}
|
||||
|
||||
strings_es = {
|
||||
"admin_id": "ADMIN_ID",
|
||||
"loading": "<b>Cargando...</b>",
|
||||
"group_created": "<b>Canal de informes accedido y administrador(es) invitado(s) si se especificó.</b>",
|
||||
"group_error": "<b>Error al acceder al canal de informes.</b>",
|
||||
"no_admins": "<b>No hay administradores configurados para invitar.</b>",
|
||||
"reports_enabled": "<b>Recepción de informes habilitada en este chat.</b>",
|
||||
"reports_disabled": "<b>Recepción de informes deshabilitada en este chat.</b>",
|
||||
"reports_not_enabled": "<b>Los informes no están habilitados en este chat.</b>",
|
||||
"not_args": "<b>Uso: .report {userID/@username} (razón)</b>",
|
||||
"parts_both_2": "<b>Por favor, proporcione tanto un usuario como una razón.</b>",
|
||||
"success": "<b>Informe enviado con éxito.</b>",
|
||||
"fail": "<b>Error al enviar el informe.</b>",
|
||||
}
|
||||
def __init__(self):
|
||||
self.config = loader.ModuleConfig(
|
||||
"admin_id",
|
||||
None,
|
||||
lambda: self.strings["admin_id"]
|
||||
)
|
||||
|
||||
async def client_ready(self, client, db):
|
||||
self.client = client
|
||||
self.db = db
|
||||
try:
|
||||
result = await client(CreateChannelRequest(
|
||||
title="Aurora-Reports",
|
||||
about="🐬 chat for reports from users",
|
||||
megagroup=True
|
||||
))
|
||||
self.Aurora_Reports = result.chats[0]
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to create report group: {str(e)}")
|
||||
|
||||
@loader.command(
|
||||
ru_doc="Добавить администраторов из конфигурации в группу.",
|
||||
uz_doc="Konfiguratsiyadan administratorlarni guruhga qo'shadi.",
|
||||
de_doc="Fügt Administratoren aus der Konfiguration zur Gruppe hinzu.",
|
||||
es_doc="Agrega administradores desde la configuración al grupo.",
|
||||
)
|
||||
async def addadmins(self, message):
|
||||
"""Add administrators from the config to the group"""
|
||||
await utils.answer(message, self.strings["loading"])
|
||||
try:
|
||||
admin_ids = self.config.get("admin_id")
|
||||
if not admin_ids:
|
||||
await utils.answer(message, self.strings["no_admins"])
|
||||
return
|
||||
|
||||
if isinstance(admin_ids, list):
|
||||
for admin_id in admin_ids:
|
||||
await self.client(InviteToChannelRequest(
|
||||
channel=self.Aurora_Reports,
|
||||
users=[admin_id]
|
||||
))
|
||||
else:
|
||||
await self.client(InviteToChannelRequest(
|
||||
channel=self.Aurora_Reports,
|
||||
users=[admin_ids]
|
||||
))
|
||||
await utils.answer(message, self.strings["group_created"])
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to invite admins to the report group: {str(e)}")
|
||||
await utils.answer(message, self.strings["group_error"])
|
||||
|
||||
@loader.command(
|
||||
ru_doc="Включает чат для репортов.",
|
||||
uz_doc="Hisobotlar uchun chatni yoqadi.",
|
||||
de_doc="Aktiviert den Chat für Berichte.",
|
||||
es_doc="Habilita el chat para informes.",
|
||||
)
|
||||
async def chaton(self, message):
|
||||
"""Enable chat for reports"""
|
||||
chat_id = str(message.chat_id)
|
||||
self.db.set("ReportsMod", f"report_active_{chat_id}", True)
|
||||
await utils.answer(message, self.strings["reports_enabled"])
|
||||
|
||||
@loader.command(
|
||||
ru_doc="Отключает чат для репортов.",
|
||||
uz_doc="Hisobotlar uchun chatni o'chiradi.",
|
||||
de_doc="Deaktiviert den Chat für Berichte.",
|
||||
es_doc="Desactiva el chat para informes.",
|
||||
)
|
||||
async def chatoff(self, message):
|
||||
"""Disable chat for reports"""
|
||||
chat_id = str(message.chat_id)
|
||||
self.db.set("ReportsMod", f"report_active_{chat_id}", False)
|
||||
await utils.answer(message, self.strings["reports_disabled"])
|
||||
|
||||
@loader.command(
|
||||
ru_doc="Отправляет репорт администрации.",
|
||||
uz_doc="Ma'muriyatga hisobot yuboradi.",
|
||||
de_doc="Sendet einen Bericht an die Verwaltung.",
|
||||
es_doc="Envía un informe a la administración.",
|
||||
)
|
||||
async def report(self, message):
|
||||
"""Sends a report to the administration."""
|
||||
chat_id = str(message.chat_id)
|
||||
report_active = self.db.get("ReportsMod", f"report_active_{chat_id}", False)
|
||||
|
||||
if not report_active:
|
||||
await utils.answer(message, self.strings["reports_not_enabled"])
|
||||
return
|
||||
|
||||
args = utils.get_args_raw(message)
|
||||
if not args:
|
||||
await utils.answer(message, self.strings["not_args"])
|
||||
return
|
||||
|
||||
parts = args.split(maxsplit=1)
|
||||
if len(parts) < 2:
|
||||
await utils.answer(message, self.strings["parts_both_2"])
|
||||
return
|
||||
|
||||
user_id_or_name, reason = parts
|
||||
try:
|
||||
if user_id_or_name.isdigit():
|
||||
user_id = int(user_id_or_name)
|
||||
else:
|
||||
user_id = user_id_or_name
|
||||
|
||||
user = await self.client.get_entity(user_id)
|
||||
reporter = await self.client.get_entity(message.sender_id)
|
||||
|
||||
report_message = (f"<b>🚨 Report Submitted 🚨</b>\n\n"
|
||||
f"<b>Reporter:</b> @{reporter.username if reporter.username else 'unknown'} (ID: {reporter.id})\n"
|
||||
f"<b>Reported User:</b> @{user.username if user.username else 'unknown'} (ID: {user.id})\n"
|
||||
f"<b>Reason:</b> {reason}")
|
||||
|
||||
await self.client.send_message(self.Aurora_Reports, report_message)
|
||||
await utils.answer(message, self.strings["success"])
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to process the report: {str(e)}")
|
||||
await utils.answer(message, self.strings["fail"])
|
||||
162
KorenbZla/HikkaModules/Send.py
Normal file
162
KorenbZla/HikkaModules/Send.py
Normal file
@@ -0,0 +1,162 @@
|
||||
# * _ __ __ _ _
|
||||
# * / \ _ _ _ __ ___ _ __ __ _| \/ | ___ __| |_ _| | ___ ___
|
||||
# * / _ \| | | | '__/ _ \| '__/ _` | |\/| |/ _ \ / _` | | | | |/ _ \/ __|
|
||||
# * / ___ \ |_| | | | (_) | | | (_| | | | | (_) | (_| | |_| | | __/\__ \
|
||||
# * /_/ \_\__,_|_| \___/|_| \__,_|_| |_|\___/ \__,_|\__,_|_|\___||___/
|
||||
# *
|
||||
# * © Copyright 2024
|
||||
# *
|
||||
# * https://t.me/AuroraModules
|
||||
# *
|
||||
# * 🔒 Code is licensed under GNU AGPLv3
|
||||
# * 🌐 https://www.gnu.org/licenses/agpl-3.0.html
|
||||
# * ⛔️ You CANNOT edit this file without direct permission from the author.
|
||||
# * ⛔️ You CANNOT distribute this file if you have modified it without the direct permission of the author.
|
||||
|
||||
# Name: Send
|
||||
# Author: Felix?
|
||||
# Commands:
|
||||
# .send | .sendclosedtopic | .sendpm | .ibsend
|
||||
# scope: hikka_only
|
||||
# meta developer: @AuroraModules
|
||||
|
||||
# meta pic: https://i.postimg.cc/Hx3Zm8rB/logo.png
|
||||
# meta banner: https://te.legra.ph/file/55fa6eebae860a359ac27.jpg
|
||||
|
||||
__version__ = (1, 2, 0)
|
||||
|
||||
from .. import loader, utils
|
||||
from telethon.tl.types import Message # type: ignore
|
||||
|
||||
@loader.tds
|
||||
class SendMod(loader.Module):
|
||||
"""Assistant for sending messages"""
|
||||
|
||||
strings = {
|
||||
"name": "Send",
|
||||
"successfully_send": "<emoji document_id=5823396554345549784>✔️</emoji> <b><i>Message send successfully.</i></b>",
|
||||
"error": "<emoji document_id=5778527486270770928>❌</emoji>Error! An error occurred:",
|
||||
"error_send_1": "<emoji document_id=5778527486270770928>❌</emoji> <b><i>Error! Please enter the text to send.</i></b>",
|
||||
"error_send_2": "<emoji document_id=5778527486270770928>❌</emoji> <b><i>Error! There was no replay or the sending text is missing.</i></b>",
|
||||
"error_send_3": "<emoji document_id=5778527486270770928>❌</emoji> <b><i>Error! Invalid user, user does not exist, or some other error occurred.</i></b>",
|
||||
"error_send_topic_closed":"<emoji document_id=5778527486270770928>❌</emoji> <b><i>Error! It is not possible to use this command in topics.</i></b>",
|
||||
}
|
||||
|
||||
strings_ru = {
|
||||
"successfully_send": "<emoji document_id=5823396554345549784>✔️</emoji> <b><i>Сообщение успешно отправленно.</i></b>",
|
||||
"error": "<emoji document_id=5778527486270770928>❌</emoji>Error! Произошла ошибка:",
|
||||
"error_send_1": "<emoji document_id=5778527486270770928>❌</emoji> <b><i>Error! Пожалуйста, введите текст для отправки.</i></b>",
|
||||
"error_send_2": "<emoji document_id=5778527486270770928>❌</emoji> <b><i>Error! Не было ответа или отсутствует текст отправки.</i></b>",
|
||||
"error_send_3": "<emoji document_id=5778527486270770928>❌</emoji> <b><i>Error! Неверный пользователь, пользователь не существует или произошла другая ошибка.</i></b>",
|
||||
"error_send_topic_closed": "<emoji document_id=5778527486270770928>❌</emoji> <b><i>Error! Эту команду невозможно использовать в теме.</i></b>",
|
||||
}
|
||||
|
||||
strings_uz = {
|
||||
"successfully_send": "<emoji document_id=5823396554345549784>✔️</emoji> <b><i>Xabar muvaffaqiyatli yuborildi.</i></b>",
|
||||
"error": "<emoji document_id=5778527486270770928>❌</emoji>Xatolik! Xatolik yuz berdi:",
|
||||
"error_send_1": "<emoji document_id=5778527486270770928>❌</emoji> <b><i>Xatolik! Yuborish uchun matn kiriting.</i></b>",
|
||||
"error_send_2": "<emoji document_id=5778527486270770928>❌</emoji> <b><i>Xatolik! Javob bermagan yoki yuboriladigan matn yo'q.</i></b>",
|
||||
"error_send_3": "<emoji document_id=5778527486270770928>❌</emoji> <b><i>Xatolik! Noto'g'ri foydalanuvchi, foydalanuvchi mavjud emas yoki boshqa xatolik ro'y berdi.</i></b>",
|
||||
"error_send_topic_closed": "<emoji document_id=5778527486270770928>❌</emoji> <b><i>Xatolik! Bu buyruq mavzuda ishlatilmasligi mumkin.</i></b>",
|
||||
}
|
||||
|
||||
strings_de = {
|
||||
"successfully_send": "<emoji document_id=5823396554345549784>✔️</emoji> <b><i>Nachricht erfolgreich gesendet.</i></b>",
|
||||
"error": "<emoji document_id=5778527486270770928>❌</emoji>Fehler! Ein Fehler ist aufgetreten:",
|
||||
"error_send_1": "<emoji document_id=5778527486270770928>❌</emoji> <b><i>Fehler! Bitte geben Sie den Text für den Versand ein.</i></b>",
|
||||
"error_send_2": "<emoji document_id=5778527486270770928>❌</emoji> <b><i>Fehler! Es wurde keine Antwort gemacht oder es fehlt der zu sendende Text.</i></b>",
|
||||
"error_send_3": "<emoji document_id=5778527486270770928>❌</emoji> <b><i>Fehler! Ungültiger Benutzer, Benutzer existiert nicht oder es ist ein anderer Fehler aufgetreten.</i></b>",
|
||||
"error_send_topic_closed": "<emoji document_id=5778527486270770928>❌</emoji> <b><i>Fehler! Diese Befehl kann nicht in einem Thema verwendet werden.</i></b>",
|
||||
}
|
||||
|
||||
strings_es = {
|
||||
"successfully_send": "<emoji document_id=5823396554345549784>✔️</emoji> <b><i>Mensaje enviado con éxito.</i></b>",
|
||||
"error": "<emoji document_id=5778527486270770928>❌</emoji>¡Error! Se produjo un error:",
|
||||
"error_send_1": "<emoji document_id=5778527486270770928>❌</emoji> <b><i>Error! Por favor, ingrese el texto para enviar.</i></b>",
|
||||
"error_send_2": "<emoji document_id=5778527486270770928>❌</emoji> <b><i>Error! No se hizo una respuesta o falta el texto a enviar.</i></b>",
|
||||
"error_send_3": "<emoji document_id=5778527486270770928>❌</emoji> <b><i>Error! Usuario no válido, usuario no existe u ocurrió algún otro error.</i></b>",
|
||||
"error_send_topic_closed": "<emoji document_id=5778527486270770928>❌</emoji> <b><i>Error! No se puede usar este comando en un tema cerrado.</i></b>",
|
||||
}
|
||||
|
||||
|
||||
@loader.command(
|
||||
ru_doc="[text] - Написать сообщение",
|
||||
uz_doc="[text] - xabar yozing",
|
||||
de_doc="[text] - Nachricht schreiben",
|
||||
es_doc="[text] - escribe un mensaje",
|
||||
)
|
||||
async def send(self, message: Message):
|
||||
"""[text] - Write a message"""
|
||||
if not utils.get_args_raw(message):
|
||||
await utils.answer(message, self.strings["error_send_1"])
|
||||
elif getattr(message.to_id, 'channel_id', None) and not message.is_channel:
|
||||
await utils.answer(message, self.strings["error_send_topic_closed"])
|
||||
else:
|
||||
try:
|
||||
response = utils.get_args_raw(message)
|
||||
await message.respond(response)
|
||||
await message.delete()
|
||||
except Exception as e:
|
||||
if "TOPIC_CLOSED" in str(e):
|
||||
await message.edit(self.strings["error_send_topic_closed"])
|
||||
else:
|
||||
await message.edit(f'{self.strings["error"]} {str(e)}')
|
||||
|
||||
|
||||
@loader.command(
|
||||
ru_doc="[text] - Написать сообщение в закрытую тему",
|
||||
uz_doc="[text] - Yopiq mavzuga xabar yozing",
|
||||
de_doc="[text] - Schreiben Sie eine Nachricht zu einem geschlossenen Thema",
|
||||
es_doc="[text] - Escribir un mensaje a un tema cerrado",
|
||||
)
|
||||
async def sendclosedtopic(self, message: Message):
|
||||
"""[text] - Write a message to a closed topic"""
|
||||
if not utils.get_args_raw(message):
|
||||
await utils.answer(message, self.strings["error_send"])
|
||||
else:
|
||||
text2 = f"{utils.get_args_raw(message)}"
|
||||
await message.delete()
|
||||
await message.reply(text2)
|
||||
|
||||
@loader.command(
|
||||
ru_doc="[@UserName] [text or replay] - Написать сообщение в личные сообщения",
|
||||
uz_doc="[@UserName] [text or replay] - Shaxsiy xabarlarga xabar yozing",
|
||||
de_doc="[@UserName] [text or replay] - Schreiben Sie eine Nachricht zu persönlichen Nachrichten",
|
||||
es_doc="[@UserName] [text or replay] - Escribir un mensaje a mensajes personales.",
|
||||
)
|
||||
async def sendpm(self, message: Message):
|
||||
"""[@UserName] [text or replay] - Write a message to personal messages"""
|
||||
try:
|
||||
reply = await message.get_reply_message()
|
||||
text = utils.get_args_raw(message)
|
||||
|
||||
user_id = str(text.split(' ')[0])
|
||||
check = []
|
||||
for i in text.split(' '):
|
||||
check.append(i)
|
||||
|
||||
if len(check) <= 1:
|
||||
send = reply
|
||||
else:
|
||||
send = str(text.split(' ', maxsplit=1)[1])
|
||||
if send:
|
||||
await message.client.send_message(user_id, send)
|
||||
await message.edit(self.strings["successfully_send"])
|
||||
else:
|
||||
await message.edit(self.strings["error_send_2"])
|
||||
except:
|
||||
await message.edit(self.strings["error_send_3"])
|
||||
|
||||
@loader.command(
|
||||
ru_doc="[text] - Отправить сообщение через инлайн-форму",
|
||||
uz_doc="[text] - Inline shakl orqali xabar yuboradi",
|
||||
de_doc="[text] - Sendet eine Nachricht über das Inline-Formular",
|
||||
es_doc="[text] - Envía un mensaje a través del formulario en línea",
|
||||
)
|
||||
async def ibsend(self, message):
|
||||
"""[text] - Send a message via the inline form"""
|
||||
text = utils.get_args_raw(message)
|
||||
await self.inline.form(
|
||||
message=message,
|
||||
text=str(text),
|
||||
)
|
||||
149
KorenbZla/HikkaModules/Warpigs.py
Normal file
149
KorenbZla/HikkaModules/Warpigs.py
Normal file
@@ -0,0 +1,149 @@
|
||||
# * _ __ __ _ _
|
||||
# * / \ _ _ _ __ ___ _ __ __ _| \/ | ___ __| |_ _| | ___ ___
|
||||
# * / _ \| | | | '__/ _ \| '__/ _` | |\/| |/ _ \ / _` | | | | |/ _ \/ __|
|
||||
# * / ___ \ |_| | | | (_) | | | (_| | | | | (_) | (_| | |_| | | __/\__ \
|
||||
# * /_/ \_\__,_|_| \___/|_| \__,_|_| |_|\___/ \__,_|\__,_|_|\___||___/
|
||||
# *
|
||||
# * © Copyright 2024
|
||||
# *
|
||||
# * https://t.me/AuroraModules
|
||||
# *
|
||||
# * 🔒 Code is licensed under GNU AGPLv3
|
||||
# * 🌐 https://www.gnu.org/licenses/agpl-3.0.html
|
||||
# * ⛔️ You CANNOT edit this file without direct permission from the author.
|
||||
# * ⛔️ You CANNOT distribute this file if you have modified it without the direct permission of the author.
|
||||
|
||||
# Name: Warpigs
|
||||
# Author: dend1yya
|
||||
# Commands:
|
||||
# .autogrow | .ungrow | .autofight | .unfight | .nameset
|
||||
# scope: hikka_only
|
||||
# meta developer: @AuroraModules
|
||||
|
||||
# meta pic: https://i.postimg.cc/Hx3Zm8rB/logo.png
|
||||
# meta banner: https://te.legra.ph/file/a37fb86b3a00c03dee661.jpg
|
||||
|
||||
from .. import loader, utils
|
||||
import asyncio
|
||||
|
||||
class WarpigsMod(loader.Module):
|
||||
"""Automates work with @warpigs_bot"""
|
||||
|
||||
strings = {
|
||||
"name": "Warpigs",
|
||||
"pig_growth_on": "<emoji document_id=5316581501360420451>🐷</emoji> <b>Automatic pig growth: <i>Activated.</i></b>",
|
||||
"pig_growth_off": "<emoji document_id=5316581501360420451>🐷</emoji> <b>Automatic pig growth: <i>Deactivated.</i></b>",
|
||||
"pig_fights_on": "<emoji document_id=5316581501360420451>⚔️</emoji> <b>Automatic pig fights: <i>Activated.</i></b>",
|
||||
"pig_fights_off": "<emoji document_id=5316581501360420451>⚔️</emoji> <b>Automatic pig fights: <i>Deactivated.</i></b>",
|
||||
"no_name": "<emoji document_id=5778527486270770928>❌</emoji> <b>Specify a name for the pig.</b>",
|
||||
"name_set": "<emoji document_id=5774022692642492953>✅</emoji> <b>Your pig's name has been successfully changed!</b>",
|
||||
"new_name": "<emoji document_id=5316581501360420451>🐷</emoji> <b>New name</b>",
|
||||
}
|
||||
|
||||
strings_ru = {
|
||||
"pig_growth_on": "<emoji document_id=5316581501360420451>🐷</emoji> <b>Автоматический рост свиней: <i>Включен.</i></b>",
|
||||
"pig_growth_off": "<emoji document_id=5316581501360420451>🐷</emoji> <b>Автоматический рост свиней: <i>Выключен.</i></b>",
|
||||
"pig_fights_on": "<emoji document_id=5316581501360420451>⚔️</emoji> <b>Автоматические свиные бои: <i>Включены.</i></b>",
|
||||
"pig_fights_off": "<emoji document_id=5316581501360420451>⚔️</emoji> <b>Автоматические свиные бои: <i>Выключены.</i></b>",
|
||||
"no_name": "<emoji document_id=5778527486270770928>❌</emoji> <b>Укажите имя для свиньи.</b>",
|
||||
"name_set": "<emoji document_id=5774022692642492953>✅</emoji> <b>Имя вашей свиньи успешно изменено!</b>",
|
||||
"new_name": "<emoji document_id=5316581501360420451>🐷</emoji> <b>Новое имя</b>",
|
||||
}
|
||||
|
||||
strings_uz = {
|
||||
"pig_growth_on": "<emoji document_id=5316581501360420451>🐷</emoji> <b>Avtomatik cho'chqa o'sishi: <i>Yoqilgan.</i></b>",
|
||||
"pig_growth_off": "<emoji document_id=5316581501360420451>🐷</emoji> <b>Avtomatik cho'chqa o'sishi: <i>O'chirilgan.</i></b>",
|
||||
"pig_fights_on": "<emoji document_id=5316581501360420451>⚔️</emoji> <b>Avtomatik cho'chqa janglari: <i>Yoqilgan.</i></b>",
|
||||
"pig_fights_off": "<emoji document_id=5316581501360420451>⚔️</emoji> <b>Avtomatik cho'chqa janglari: <i>O'chirilgan.</i></b>",
|
||||
"no_name": "<emoji document_id=5778527486270770928>❌</emoji> <b>Cho'chqaga ism kiriting.</b>",
|
||||
"name_set": "<emoji document_id=5774022692642492953>✅</emoji> <b>Cho'chqangizning ismi muvaffaqiyatli o'zgartirildi!</b>",
|
||||
"new_name": "<emoji document_id=5316581501360420451>🐷</emoji> <b>Yangi ism</b>",
|
||||
}
|
||||
|
||||
strings_de = {
|
||||
"pig_growth_on": "<emoji document_id=5316581501360420451>🐷</emoji> <b>Automatisches Schweinewachstum: <i>Aktiviert.</i></b>",
|
||||
"pig_growth_off": "<emoji document_id=5316581501360420451>🐷</emoji> <b>Automatisches Schweinewachstum: <i>Deaktiviert.</i></b>",
|
||||
"pig_fights_on": "<emoji document_id=5316581501360420451>⚔️</emoji> <b>Automatische Schweinekämpfe: <i>Aktiviert.</i></b>",
|
||||
"pig_fights_off": "<emoji document_id=5316581501360420451>⚔️</emoji> <b>Automatische Schweinekämpfe: <i>Deaktiviert.</i></b>",
|
||||
"no_name": "<emoji document_id=5778527486270770928>❌</emoji> <b>Geben Sie einen Namen für das Schwein an.</b>",
|
||||
"name_set": "<emoji document_id=5774022692642492953>✅</emoji> <b>Der Name Ihres Schweins wurde erfolgreich geändert!</b>",
|
||||
"new_name": "<emoji document_id=5316581501360420451>🐷</emoji> <b>Neuer Name</b>",
|
||||
}
|
||||
|
||||
strings_es = {
|
||||
"pig_growth_on": "<emoji document_id=5316581501360420451>🐷</emoji> <b>Crecimiento automático de cerdos: <i>Activado.</i></b>",
|
||||
"pig_growth_off": "<emoji document_id=5316581501360420451>🐷</emoji> <b>Crecimiento automático de cerdos: <i>Desactivado.</i></b>",
|
||||
"pig_fights_on": "<emoji document_id=5316581501360420451>⚔️</emoji> <b>Combates automáticos de cerdos: <i>Activado.</i></b>",
|
||||
"pig_fights_off": "<emoji document_id=5316581501360420451>⚔️</emoji> <b>Combates automáticos de cerdos: <i>Desactivado.</i></b>",
|
||||
"no_name": "<emoji document_id=5778527486270770928>❌</emoji> <b>Especifica un nombre para el cerdo.</b>",
|
||||
"name_set": "<emoji document_id=5774022692642492953>✅</emoji> <b>¡El nombre de tu cerdo ha sido cambiado exitosamente!</b>",
|
||||
"new_name": "<emoji document_id=5316581501360420451>🐷</emoji> <b>Nuevo nombre</b>",
|
||||
}
|
||||
|
||||
@loader.command(
|
||||
ru_doc="Автоматический рост свиньи.",
|
||||
uz_doc="Avtomatik cho'chqa o'sishi.",
|
||||
de_doc="Automatisches Schweinewachstum.",
|
||||
es_doc="Crecimiento automático de cerdos.",
|
||||
)
|
||||
async def autogrow(self, message):
|
||||
"""Automatic pig growth"""
|
||||
await message.edit(self.strings("pig_growth_on"))
|
||||
self.set("grow", True)
|
||||
while self.get("grow"):
|
||||
await message.reply("/grow")
|
||||
await asyncio.sleep(86400)
|
||||
|
||||
@loader.command(
|
||||
ru_doc="Отключить автоматический рост.",
|
||||
uz_doc="Avtomatik o'sishni o'chirish.",
|
||||
de_doc="Automatisches Wachstum deaktivieren.",
|
||||
es_doc="Desactivar el crecimiento automático.",
|
||||
)
|
||||
async def ungrow(self,message):
|
||||
"""Disable automatic growth."""
|
||||
self.set("grow", False)
|
||||
await utils.answer(message, self.strings("pig_growth_off"))
|
||||
|
||||
@loader.command(
|
||||
ru_doc="Включить автоматические бои свиней.",
|
||||
uz_doc="Avtomatik cho'chqa janglarini yoqish.",
|
||||
de_doc="Automatische Schweinekämpfe aktivieren.",
|
||||
es_doc="Habilitar peleas automáticas de cerdos.",
|
||||
)
|
||||
async def autofight(self,message):
|
||||
"""Enable automatic pig fights"""
|
||||
await message.edit(self.strings("pig_fights_on"))
|
||||
self.set("fight", True)
|
||||
while self.get("fight"):
|
||||
await message.reply("/fight")
|
||||
await asyncio.sleep(86400)
|
||||
|
||||
@loader.command(
|
||||
ru_doc="Отключить автоматические бои свиней.",
|
||||
uz_doc="Avtomatik cho'chqa janglarini o'chirish.",
|
||||
de_doc="Automatische Schweinekämpfe deaktivieren.",
|
||||
es_doc="Deshabilitar peleas automáticas de cerdos.",
|
||||
)
|
||||
async def unfight(self,message):
|
||||
"""Disable automatic pig fights"""
|
||||
self.set("fight",False)
|
||||
await utils.answer(message, self.strings("pig_fights_off"))
|
||||
|
||||
@loader.command(
|
||||
ru_doc="[name] - Установить имя вашей свиньи.",
|
||||
uz_doc="[name] - Cho'chqangizning nomini o'rnatadi.",
|
||||
de_doc="[name] - Setze den Namen deines Schweins.",
|
||||
es_doc="[name] - Establece el nombre de tu cerdo.",
|
||||
)
|
||||
async def nameset(self,message):
|
||||
"""[name] - Set the name of your pig"""
|
||||
args = utils.get_args_raw(message)
|
||||
if not args:
|
||||
await utils.answer(message, self.strings("no_name"))
|
||||
return
|
||||
|
||||
name_set = self.strings("name_set")
|
||||
new_name = self.strings("new_name")
|
||||
await message.respond(f"/name {args}")
|
||||
await message.edit(f"{name_set}\n{new_name}: <code>{args}</code>")
|
||||
121
KorenbZla/HikkaModules/Wikipedia.py
Normal file
121
KorenbZla/HikkaModules/Wikipedia.py
Normal file
@@ -0,0 +1,121 @@
|
||||
# * _ __ __ _ _
|
||||
# * / \ _ _ _ __ ___ _ __ __ _| \/ | ___ __| |_ _| | ___ ___
|
||||
# * / _ \| | | | '__/ _ \| '__/ _` | |\/| |/ _ \ / _` | | | | |/ _ \/ __|
|
||||
# * / ___ \ |_| | | | (_) | | | (_| | | | | (_) | (_| | |_| | | __/\__ \
|
||||
# * /_/ \_\__,_|_| \___/|_| \__,_|_| |_|\___/ \__,_|\__,_|_|\___||___/
|
||||
# *
|
||||
# * © Copyright 2024
|
||||
# *
|
||||
# * https://t.me/AuroraModules
|
||||
# *
|
||||
# * 🔒 Code is licensed under GNU AGPLv3
|
||||
# * 🌐 https://www.gnu.org/licenses/agpl-3.0.html
|
||||
# * ⛔️ You CANNOT edit this file without direct permission from the author.
|
||||
# * ⛔️ You CANNOT distribute this file if you have modified it without the direct permission of the author.
|
||||
|
||||
# Name: Wikipedia
|
||||
# Author: dend1yya
|
||||
# Commands:
|
||||
# .wikiru | wikien
|
||||
# scope: hikka_only
|
||||
# meta developer: @AuroraModules
|
||||
|
||||
# meta pic: https://i.postimg.cc/Hx3Zm8rB/logo.png
|
||||
# meta banner: https://te.legra.ph/file/ee1bb476a643bb85b5723.jpg
|
||||
|
||||
version = (1, 0, 0)
|
||||
|
||||
import wikipedia # type: ignore
|
||||
from .. import loader, utils
|
||||
|
||||
class WikipediaMod(loader.Module):
|
||||
"""Search for information on Wikipedia"""
|
||||
|
||||
strings = {
|
||||
"name": "Wikipedia",
|
||||
"EnterRequest": "<emoji document_id=5778527486270770928>❌</emoji> <b>Enter your search term on Wikipedia.</b>",
|
||||
"SResult": "<emoji document_id=5823396554345549784>✔️</emoji> <b>Wikipedia search result:</b>",
|
||||
"IncorrectRequest": "<emoji document_id=5285372392086976148>🦋</emoji> <b>Several possible options have been found. Specify your request:</b>",
|
||||
"NotFound": "<emoji document_id=5778527486270770928>❌</emoji> <b>Nothing was found for your query.</b>",
|
||||
"ErrorRequest": "<emoji document_id=5778527486270770928>❌</emoji> <b>An error occurred while executing the request:</b>",
|
||||
}
|
||||
|
||||
strings_ru = {
|
||||
"EnterRequest": "<emoji document_id=5778527486270770928>❌</emoji> <b>Введите свой поисковый запрос на Википедии.</b>",
|
||||
"SResult": "<emoji document_id=5823396554345549784>✔️</emoji> <b>Результат поиска на Википедии:</b>",
|
||||
"IncorrectRequest": "<emoji document_id=5285372392086976148>🦋</emoji> <b>Было найдено несколько возможных вариантов. Уточните ваш запрос:</b>",
|
||||
"NotFound": "<emoji document_id=5778527486270770928>❌</emoji> <b>По вашему запросу ничего не найдено.</b>",
|
||||
"ErrorRequest": "<emoji document_id=5778527486270770928>❌</emoji> <b>При выполнении запроса произошла ошибка:</b>",
|
||||
}
|
||||
|
||||
strings_uz = {
|
||||
"EnterRequest": "<emoji document_id=5778527486270770928>❌</emoji> <b>Vikipediya da qidirish so'zini kiriting.</b>",
|
||||
"SResult": "<emoji document_id=5823396554345549784>✔️</emoji> <b>Vikipediya qidiruv natijasi:</b>",
|
||||
"IncorrectRequest": "<emoji document_id=5285372392086976148>🦋</emoji> <b>Bir nechta mumkin variant topildi. So'rovingizni aniqlang:</b>",
|
||||
"NotFound": "<emoji document_id=5778527486270770928>❌</emoji> <b>Sizning so'rovingiz uchun hech narsa topilmadi.</b>",
|
||||
"ErrorRequest": "<emoji document_id=5778527486270770928>❌</emoji> <b>So'rovni bajarish jarayonida xatolik yuz berdi:</b>",
|
||||
}
|
||||
|
||||
strings_de = {
|
||||
"EnterRequest": "<emoji document_id=5778527486270770928>❌</emoji> <b>Geben Sie Ihren Suchbegriff auf Wikipedia ein.</b>",
|
||||
"SResult": "<emoji document_id=5823396554345549784>✔️</emoji> <b>Wikipedia-Suchergebnis:</b>",
|
||||
"IncorrectRequest": "<emoji document_id=5285372392086976148>🦋</emoji> <b>Mehrere mögliche Optionen wurden gefunden. Präzisieren Sie Ihre Anfrage:</b>",
|
||||
"NotFound": "<emoji document_id=5778527486270770928>❌</emoji> <b>Für Ihre Anfrage wurde nichts gefunden.</b>",
|
||||
"ErrorRequest": "<emoji document_id=5778527486270770928>❌</emoji> <b>Beim Ausführen der Anfrage ist ein Fehler aufgetreten:</b>",
|
||||
}
|
||||
|
||||
strings_es = {
|
||||
"EnterRequest": "<emoji document_id=5778527486270770928>❌</emoji> <b>Ingrese su término de búsqueda en Wikipedia.</b>",
|
||||
"SResult": "<emoji document_id=5823396554345549784>✔️</emoji> <b>Resultado de la búsqueda en Wikipedia:</b>",
|
||||
"IncorrectRequest": "<emoji document_id=5285372392086976148>🦋</emoji> <b>Se encontraron varias opciones posibles. Especifique su solicitud:</b>",
|
||||
"NotFound": "<emoji document_id=5778527486270770928>❌</emoji> <b>No se encontró nada para su consulta.</b>",
|
||||
"ErrorRequest": "<emoji document_id=5778527486270770928>❌</emoji> <b>Se produjo un error al ejecutar la solicitud:</b>",
|
||||
}
|
||||
|
||||
@loader.command(
|
||||
ru_doc="[prompt] - Поиск материала в Википедии на русском языке.",
|
||||
uz_doc="[prompt] - Vikipediyada materialni rus tilida qidiring.",
|
||||
de_doc="[prompt] - Material in der Wikipedia auf Russisch suchen.",
|
||||
es_doc="[prompt] - Buscar material en Wikipedia en ruso.",
|
||||
)
|
||||
async def wikiru(self, message):
|
||||
"""[prompt] - Search for material in Wikipedia in Russian."""
|
||||
args = utils.get_args_raw(message)
|
||||
if not args:
|
||||
await utils.answer(message, self.strings['EnterRequest'])
|
||||
return
|
||||
|
||||
try:
|
||||
wikipedia.set_lang("ru")
|
||||
_search_result = wikipedia.summary(args)
|
||||
await utils.answer(message, f"{self.strings_ru['SResult']}\n\n<i>{_search_result}</i>")
|
||||
except wikipedia.DisambiguationError as e:
|
||||
await utils.answer(message, f"{self.strings['IncorrectRequest']}\n{', '.join(e.options)}")
|
||||
except wikipedia.PageError:
|
||||
await utils.answer(message, self.strings['NotFound'])
|
||||
except Exception as e:
|
||||
await utils.answer(message, f"{self.strings['ErrorRequest']} {e}")
|
||||
|
||||
@loader.command(
|
||||
ru_doc="[prompt] - Поиск материала в Википедии на английском языке.",
|
||||
uz_doc="[prompt] - Vikipediyada materialni ingliz tilida qidiring.",
|
||||
de_doc="[prompt] - Material in der Wikipedia auf Englisch suchen.",
|
||||
es_doc="[prompt] - Buscar material en Wikipedia en inglés.",
|
||||
)
|
||||
async def wikien(self, message):
|
||||
"""[prompt] - Search for material in Wikipedia in English."""
|
||||
args = utils.get_args_raw(message)
|
||||
if not args:
|
||||
await utils.answer(message, self.strings['EnterRequest'])
|
||||
return
|
||||
|
||||
try:
|
||||
wikipedia.set_lang("en")
|
||||
_search_result = wikipedia.summary(args)
|
||||
await utils.answer(message, f"{self.strings['SResult']}\n\n{_search_result}")
|
||||
except wikipedia.DisambiguationError as e:
|
||||
await utils.answer(message, f"{self.strings['IncorrectRequest']}\n{', '.join(e.options)}")
|
||||
except wikipedia.PageError:
|
||||
await utils.answer(message, self.strings['NotFound'])
|
||||
except Exception as e:
|
||||
await utils.answer(message, f"{self.strings['ErrorRequest']} {e}</b>")
|
||||
232
KorenbZla/HikkaModules/WordFinder.py
Normal file
232
KorenbZla/HikkaModules/WordFinder.py
Normal file
@@ -0,0 +1,232 @@
|
||||
# * _ __ __ _ _
|
||||
# * / \ _ _ _ __ ___ _ __ __ _| \/ | ___ __| |_ _| | ___ ___
|
||||
# * / _ \| | | | '__/ _ \| '__/ _` | |\/| |/ _ \ / _` | | | | |/ _ \/ __|
|
||||
# * / ___ \ |_| | | | (_) | | | (_| | | | | (_) | (_| | |_| | | __/\__ \
|
||||
# * /_/ \_\__,_|_| \___/|_| \__,_|_| |_|\___/ \__,_|\__,_|_|\___||___/
|
||||
# *
|
||||
# * © Copyright 2024
|
||||
# *
|
||||
# * https://t.me/AuroraModules
|
||||
# *
|
||||
# * 🔒 Code is licensed under GNU AGPLv3
|
||||
# * 🌐 https://www.gnu.org/licenses/agpl-3.0.html
|
||||
# * ⛔️ You CANNOT edit this file without direct permission from the author.
|
||||
# * ⛔️ You CANNOT distribute this file if you have modified it without the direct permission of the author.
|
||||
|
||||
# Name: WordFinder
|
||||
# Author: Felix?
|
||||
# Commands:
|
||||
# .wfind
|
||||
# scope: hikka_only
|
||||
# meta developer: @AuroraModules
|
||||
|
||||
# meta pic: https://i.postimg.cc/Hx3Zm8rB/logo.png
|
||||
# meta banner: https://te.legra.ph/file/c34c0a11aabd6a1fb6210.jpg
|
||||
|
||||
__version__ = (1, 0, 0)
|
||||
|
||||
from aiogram.types import Message as AiogramMessage
|
||||
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
|
||||
from .. import loader, utils
|
||||
|
||||
@loader.tds
|
||||
class WordFinderMod(loader.Module):
|
||||
"""Universal module for searching for certain words in the text."""
|
||||
|
||||
strings = {
|
||||
"name": "WordFinder",
|
||||
"status_t": "<emoji document_id=5879785854284599288>ℹ️</emoji> <b>Module status: <i>Works</i></b>",
|
||||
"status_f": "<emoji document_id=5879785854284599288>ℹ️</emoji> <b>Module status: <i>Does not work</i></b>",
|
||||
"chat_id_error": "<emoji document_id=5879813604068298387>❗️</emoji> <b>There is no value in the chat_id config or it is incorrect.</b>",
|
||||
"words_error": "<emoji document_id=5879813604068298387>❗️</emoji> </b>There is no value in the words config or it is incorrect.</b>",
|
||||
"enabled": "<emoji document_id=5776375003280838798>✅</emoji> <b>The module is enabled.</b>",
|
||||
"disabled": "<emoji document_id=5776375003280838798>✅</emoji> <b>The module is disabled.</b>",
|
||||
"incorrect_args": "<emoji document_id=5778527486270770928>❌</emoji> <b>Incorrect arguments have been entered.</b>",
|
||||
"message_found": "⚠ <b>New message has been found</b> ⚠\n\n<code>{}</code>\n\n<b>The found word: <i>{}</i></b>",
|
||||
"": "",
|
||||
"cfg_chat_id": "Enter the id of the chats or channels in which the words from the words config will be searched.",
|
||||
"cfg_words": "Enter the words separated by commas that will be searched in the chats.",
|
||||
"cfg_admin_chat_id": "Enter the chat id where notifications will be sent, if the value is None, the chat for notifications will be Word-Finder.",
|
||||
}
|
||||
|
||||
strings_ru = {
|
||||
"status_t": "<emoji document_id=5879785854284599288>ℹ️</emoji> <b>Статус модуля: <i>Работает</i></b>",
|
||||
"status_f": "<emoji document_id=5879785854284599288>ℹ️</emoji> <b>Статус модуля: <i>Не работает</i></b>",
|
||||
"chat_id_error": "<emoji document_id=5879813604068298387>❗️</emoji> <b>В конфиге chat_id нет значения или оно неверное.</b>",
|
||||
"words_error": "<emoji document_id=5879813604068298387>❗️</emoji> <b>В конфиге words нет значения или оно неверное.</b>",
|
||||
"enabled": "<emoji document_id=5776375003280838798>✅</emoji> <b>Модуль включен.</b>",
|
||||
"disabled": "<emoji document_id=5776375003280838798>✅</emoji> <b>Модуль отключен.</b>",
|
||||
"incorrect_args": "<emoji document_id=5778527486270770928>❌</emoji> <b>Были введены неверные аргументы.</b>",
|
||||
"message_found": "⚠ <b>Найдено новое сообщение</b> ⚠\n\n<code>{}</code>\n\n<b>Найденное слово: <i>{}</i></b>",
|
||||
"cfg_chat_id": "Введите id чатов или каналов, в которых будут искаться слова из конфига words.",
|
||||
"cfg_words": "Введите слова через запятую, которые будут искаться в чатах.",
|
||||
"cfg_admin_chat_id": "Введите id чата, куда будут присылаться уведомления, если значение None, чатом для уведомлений будет Word-Finder.",
|
||||
}
|
||||
|
||||
strings_uz = {
|
||||
"status_t": "<emoji document_id=5879785854284599288>ℹ️</emoji> <b>Modul holati: <i>Faol</i></b>",
|
||||
"status_f": "<emoji document_id=5879785854284599288>ℹ️</emoji> <b>Modul holati: <i>Faol emas</i></b>",
|
||||
"chat_id_error": "<emoji document_id=5879813604068298387>❗️</emoji> <b>Konfiguratsiyada chat_id qiymati mavjud emas yoki noto'g'ri.</b>",
|
||||
"words_error": "<emoji document_id=5879813604068298387>❗️</emoji> <b>Konfiguratsiyada words qiymati mavjud emas yoki noto'g'ri.</b>",
|
||||
"enabled": "<emoji document_id=5776375003280838798>✅</emoji> <b>Modul yoqildi.</b>",
|
||||
"disabled": "<emoji document_id=5776375003280838798>✅</emoji> <b>Modul o'chirildi.</b>",
|
||||
"incorrect_args": "<emoji document_id=5778527486270770928>❌</emoji> <b>Noto'g'ri argumentlar kiritildi.</b>",
|
||||
"message_found": "⚠ <b>Yangi xabar topildi</b> ⚠\n\n<code>{}</code>\n\n<b>Topilgan so'z: <i>{}</i></b>",
|
||||
"cfg_chat_id": "So'zlar izlanadigan chat yoki kanal idlarini kiriting.",
|
||||
"cfg_words": "Chatlarda izlanadigan so'zlarni vergul bilan ajratib kiriting.",
|
||||
"cfg_admin_chat_id": "Bildirishnomalar yuboriladigan chat idini kiriting. Agar None bo'lsa, Word-Finder bildirishnomalar uchun ishlatiladi.",
|
||||
}
|
||||
|
||||
strings_de = {
|
||||
"status_t": "<emoji document_id=5879785854284599288>ℹ️</emoji> <b>Modulstatus: <i>Aktiv</i></b>",
|
||||
"status_f": "<emoji document_id=5879785854284599288>ℹ️</emoji> <b>Modulstatus: <i>Inaktiv</i></b>",
|
||||
"chat_id_error": "<emoji document_id=5879813604068298387>❗️</emoji> <b>Im Konfigurationswert chat_id fehlt oder ist ungültig.</b>",
|
||||
"words_error": "<emoji document_id=5879813604068298387>❗️</emoji> <b>Im Konfigurationswert words fehlt oder ist ungültig.</b>",
|
||||
"enabled": "<emoji document_id=5776375003280838798>✅</emoji> <b>Modul aktiviert.</b>",
|
||||
"disabled": "<emoji document_id=5776375003280838798>✅</emoji> <b>Modul deaktiviert.</b>",
|
||||
"incorrect_args": "<emoji document_id=5778527486270770928>❌</emoji> <b>Ungültige Argumente eingegeben.</b>",
|
||||
"message_found": "⚠ <b>Neue Nachricht gefunden</b> ⚠\n\n<code>{}</code>\n\n<b>Gefundenes Wort: <i>{}</i></b>",
|
||||
"cfg_chat_id": "Geben Sie die IDs der Chats oder Kanäle ein, in denen nach Wörtern aus der Konfiguration gesucht werden soll.",
|
||||
"cfg_words": "Geben Sie die zu suchenden Wörter in den Chats durch Kommas getrennt ein.",
|
||||
"cfg_admin_chat_id": "Geben Sie die ID des Chats ein, in dem Benachrichtigungen gesendet werden sollen. Wenn None, wird Word-Finder für Benachrichtigungen verwendet.",
|
||||
}
|
||||
|
||||
strings_es = {
|
||||
"status_t": "<emoji document_id=5879785854284599288>ℹ️</emoji> <b>Estado del módulo: <i>Activo</i></b>",
|
||||
"status_f": "<emoji document_id=5879785854284599288>ℹ️</emoji> <b>Estado del módulo: <i>Inactivo</i></b>",
|
||||
"chat_id_error": "<emoji document_id=5879813604068298387>❗️</emoji> <b>El valor de chat_id en la configuración no está presente o es incorrecto.</b>",
|
||||
"words_error": "<emoji document_id=5879813604068298387>❗️</emoji> <b>El valor de words en la configuración no está presente o es incorrecto.</b>",
|
||||
"enabled": "<emoji document_id=5776375003280838798>✅</emoji> <b>Módulo activado.</b>",
|
||||
"disabled": "<emoji document_id=5776375003280838798>✅</emoji> <b>Módulo desactivado.</b>",
|
||||
"incorrect_args": "<emoji document_id=5778527486270770928>❌</emoji> <b>Se ingresaron argumentos incorrectos.</b>",
|
||||
"message_found": "⚠ <b>Se encontró un nuevo mensaje</b> ⚠\n\n<code>{}</code>\n\n<b>Palabra encontrada: <i>{}</i></b>",
|
||||
"cfg_chat_id": "Ingrese las IDs de los chats o canales donde se buscarán las palabras de la configuración.",
|
||||
"cfg_words": "Ingrese las palabras a buscar en los chats separadas por comas.",
|
||||
"cfg_admin_chat_id": "Ingrese la ID del chat donde se enviarán las notificaciones. Si es None, se utilizará Word-Finder para las notificaciones.",
|
||||
}
|
||||
|
||||
def __init__(self):
|
||||
self.config = loader.ModuleConfig(
|
||||
loader.ConfigValue(
|
||||
"chat_id",
|
||||
None,
|
||||
lambda: self.strings("cfg_chat_id")
|
||||
),
|
||||
loader.ConfigValue(
|
||||
"words",
|
||||
[],
|
||||
lambda: self.strings("cfg_words")
|
||||
),
|
||||
loader.ConfigValue(
|
||||
"admin_chat_id",
|
||||
None,
|
||||
lambda: self.strings("cfg_admin_chat_id")
|
||||
),
|
||||
)
|
||||
|
||||
async def client_ready(self, client, db):
|
||||
self.client = client
|
||||
self.db = db
|
||||
self.c, _ = await utils.asset_channel(
|
||||
self.client,
|
||||
"Word-Finder",
|
||||
"Chat for receiving notifications about finding a word in the text.",
|
||||
silent=True,
|
||||
invite_bot=True,
|
||||
)
|
||||
self.chat = f"-100{self.c.id}"
|
||||
|
||||
@loader.command(
|
||||
ru_doc="<on/off> - установить статус работы модуля",
|
||||
uz_doc="<on/off> - o'rnatish modulining ish holati",
|
||||
de_doc="<on/off> - den Betriebsstatus des Moduls festlegen",
|
||||
es_doc="<on/off> - establecer el estado de funcionamiento del módulo",
|
||||
)
|
||||
async def wfind(self, message):
|
||||
"""<on/off> - set the module operation status"""
|
||||
|
||||
args = utils.get_args_raw(message).lower()
|
||||
chat_id = self.config["chat_id"]
|
||||
words = self.config["words"]
|
||||
|
||||
if not args:
|
||||
if self.db.get("WordFinder", "status"):
|
||||
status = self.strings("status_t")
|
||||
else:
|
||||
status = self.strings("status_f")
|
||||
await utils.answer(message, status)
|
||||
return
|
||||
|
||||
if chat_id == None:
|
||||
await utils.answer(message, self.strings("chat_id_error"))
|
||||
return
|
||||
if words is None or words == []:
|
||||
await utils.answer(message, self.strings("words_error"))
|
||||
return
|
||||
|
||||
if args == "on":
|
||||
self.db.set("WordFinder", "status", True)
|
||||
await utils.answer(message, self.strings("enabled"))
|
||||
return
|
||||
elif args == "off":
|
||||
self.db.set("WordFinder", "status", False)
|
||||
await utils.answer(message, self.strings("disabled"))
|
||||
return
|
||||
else:
|
||||
await utils.answer(message, self.strings("incorrect_args"))
|
||||
return
|
||||
|
||||
async def watcher(self, message: AiogramMessage):
|
||||
if not self.db.get("WordFinder", "status", False):
|
||||
return
|
||||
|
||||
chat_id = self.config["chat_id"]
|
||||
words = self.config["words"]
|
||||
admin_chat_id = self.config["admin_chat_id"]
|
||||
|
||||
if isinstance(chat_id, int):
|
||||
chat_ids = [chat_id]
|
||||
elif isinstance(chat_id, list):
|
||||
chat_ids = chat_id
|
||||
else:
|
||||
return
|
||||
|
||||
if isinstance(words, str):
|
||||
words = [word.strip() for word in words.split(',')]
|
||||
|
||||
if message.chat_id not in chat_ids:
|
||||
return
|
||||
|
||||
if not message.text:
|
||||
return
|
||||
|
||||
if any(word in message.text.lower().split() for word in words):
|
||||
|
||||
found_words = [word for word in words if word in message.text.lower()]
|
||||
if found_words:
|
||||
found_word = ', '.join(found_words)
|
||||
|
||||
|
||||
if message.is_private:
|
||||
message_url = f"tg://openmessage?user_id={message.chat_id}"
|
||||
else:
|
||||
message_url = f"https://t.me/c/{message.chat.id}/{message.id}"
|
||||
|
||||
if self.config["admin_chat_id"] == None:
|
||||
reply_markup = InlineKeyboardMarkup()
|
||||
reply_markup.add(InlineKeyboardButton(text="🔗 Link", url=message_url))
|
||||
await self.inline.bot.send_message(
|
||||
self.chat,
|
||||
self.strings("message_found").format(message.text, found_word),
|
||||
reply_markup=reply_markup
|
||||
)
|
||||
else:
|
||||
await self.inline.form(
|
||||
message=admin_chat_id,
|
||||
text=self.strings("message_found").format(message.text, found_word),
|
||||
reply_markup=[
|
||||
[
|
||||
{"text": "🔗 Link", "url": message_url}
|
||||
],
|
||||
],
|
||||
)
|
||||
24
KorenbZla/HikkaModules/full.txt
Normal file
24
KorenbZla/HikkaModules/full.txt
Normal file
@@ -0,0 +1,24 @@
|
||||
AuroraAFK
|
||||
AuroraBull
|
||||
AuroraFarm
|
||||
AuroraFeedBack
|
||||
AuroraSpam
|
||||
BanWord
|
||||
Deanon
|
||||
HistoryFacts
|
||||
IrisFarm
|
||||
Melody
|
||||
Meow
|
||||
MyDebtors
|
||||
RandomAvatars
|
||||
RandomNumber
|
||||
Randomizer
|
||||
Reports
|
||||
Send
|
||||
Warpigs
|
||||
Wikipedia
|
||||
AuroraDonate
|
||||
AutoFarmUniversal
|
||||
AutoDeleteMessages
|
||||
WordFinder
|
||||
RPSgame
|
||||
Reference in New Issue
Block a user