mirror of
https://github.com/MuRuLOSE/limoka.git
synced 2026-06-18 15:14:18 +02:00
Commited backup
This commit is contained in:
282
hikariatama/ftg/tagall.py
Normal file
282
hikariatama/ftg/tagall.py
Normal file
@@ -0,0 +1,282 @@
|
||||
__version__ = (2, 0, 0)
|
||||
|
||||
# ©️ Dan Gazizullin, 2021-2023
|
||||
# This file is a part of Hikka Userbot
|
||||
# Code is licensed under CC-BY-NC-ND 4.0 unless otherwise specified.
|
||||
# 🌐 https://github.com/hikariatama/Hikka
|
||||
# 🔑 https://creativecommons.org/licenses/by-nc-nd/4.0/
|
||||
# + attribution
|
||||
# + non-commercial
|
||||
# + no-derivatives
|
||||
|
||||
# You CANNOT edit this file without direct permission from the author.
|
||||
# You can redistribute this file without any changes.
|
||||
|
||||
# meta pic: https://static.dan.tatar/tagall_icon.png
|
||||
# meta developer: @hikarimods
|
||||
# meta banner: https://mods.hikariatama.ru/badges/tagall.jpg
|
||||
# scope: hikka_min 1.6.3
|
||||
|
||||
import asyncio
|
||||
import contextlib
|
||||
import logging
|
||||
|
||||
from aiogram import Bot
|
||||
from hikkatl.tl.functions.channels import InviteToChannelRequest
|
||||
from hikkatl.tl.types import Message
|
||||
|
||||
from .. import loader, utils
|
||||
from ..inline.types import InlineCall
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class StopEvent:
|
||||
def __init__(self):
|
||||
self.state = True
|
||||
|
||||
def stop(self):
|
||||
self.state = False
|
||||
|
||||
|
||||
@loader.tds
|
||||
class TagAllMod(loader.Module):
|
||||
"""Tags all people in chat with either inline bot or client"""
|
||||
|
||||
strings = {
|
||||
"name": "TagAll",
|
||||
"bot_error": "🚫 <b>Unable to invite inline bot to chat</b>",
|
||||
"_cfg_doc_default_message": "Default message of mentions",
|
||||
"_cfg_doc_delete": "Delete messages after tagging",
|
||||
"_cfg_doc_use_bot": "Use inline bot to tag people",
|
||||
"_cfg_doc_timeout": "What time interval to sleep between each tag message",
|
||||
"_cfg_doc_silent": "Do not send message with cancel button",
|
||||
"_cfg_doc_cycle_tagging": (
|
||||
"Tag all participants over and over again until you stop the script using"
|
||||
" the button in the message"
|
||||
),
|
||||
"_cfg_doc_cycle_delay": "Delay between each cycle of tagging in seconds",
|
||||
"gathering": "🧚♀️ <b>Calling participants of this chat...</b>",
|
||||
"cancel": "🚫 Cancel",
|
||||
"cancelled": "🧚♀️ <b>TagAll cancelled!</b>",
|
||||
}
|
||||
|
||||
strings_ru = {
|
||||
"bot_error": "🚫 <b>Не получилось пригласить бота в чат</b>",
|
||||
"_cls_doc": (
|
||||
"Отмечает всех участников чата, используя инлайн бот или классическим"
|
||||
" методом"
|
||||
),
|
||||
"_cfg_doc_default_message": "Сообщение по умолчанию для тегов",
|
||||
"_cfg_doc_delete": "Удалять сообщения после тега",
|
||||
"_cfg_doc_use_bot": "Использовать бота для тегов",
|
||||
"_cfg_doc_timeout": "Время между сообщениями с тегами",
|
||||
"_cfg_doc_silent": "Не отправлять сообщение с кнопкой отмены",
|
||||
"_cfg_doc_cycle_tagging": (
|
||||
"Тегать всех участников снова и снова, пока вы не остановите скрипт,"
|
||||
" используя кнопку в сообщении"
|
||||
),
|
||||
"_cfg_doc_cycle_delay": "Задержка между циклами тегов в секундах",
|
||||
"gathering": "🧚♀️ <b>Отмечаю участников чата...</b>",
|
||||
"cancel": "🚫 Отмена",
|
||||
"cancelled": "🧚♀️ <b>Сбор участников отменен!</b>",
|
||||
}
|
||||
|
||||
strings_de = {
|
||||
"bot_error": "🚫 <b>Einladung des Inline-Bots in den Chat fehlgeschlagen</b>",
|
||||
"_cfg_doc_default_message": "Standardnachricht für Erwähnungen",
|
||||
"_cfg_doc_delete": "Nachrichten nach Erwähnung löschen",
|
||||
"_cfg_doc_use_bot": "Inline-Bot verwenden, um Leute zu erwähnen",
|
||||
"_cfg_doc_timeout": (
|
||||
"Zeitintervall, in dem zwischen den Erwähnungen gewartet wird"
|
||||
),
|
||||
"_cfg_doc_silent": "Nachricht ohne Abbrechen-Button senden",
|
||||
"_cfg_doc_cycle_tagging": (
|
||||
"Alle Teilnehmer immer wieder erwähnen, bis du das Skript mit der"
|
||||
" Schaltfläche in der Nachricht stoppst"
|
||||
),
|
||||
"_cfg_doc_cycle_delay": (
|
||||
"Verzögerung zwischen jedem Zyklus der Erwähnung in Sekunden"
|
||||
),
|
||||
"gathering": "🧚♀️ <b>Erwähne Teilnehmer dieses Chats...</b>",
|
||||
"cancel": "🚫 Abbrechen",
|
||||
"cancelled": "🧚♀️ <b>TagAll abgebrochen!</b>",
|
||||
}
|
||||
|
||||
strings_tr = {
|
||||
"bot_error": "🚫 <b>Inline botunu sohbete davet edilemedi</b>",
|
||||
"_cfg_doc_default_message": "Varsayılan etiket mesajı",
|
||||
"_cfg_doc_delete": "Etiketledikten sonra mesajları sil",
|
||||
"_cfg_doc_use_bot": "İnsanları etiketlemek için inline botu kullan",
|
||||
"_cfg_doc_timeout": "Her etiket mesajı arasında ne kadar bekleneceği",
|
||||
"_cfg_doc_silent": "İptal düğmesi olmadan mesaj gönderme",
|
||||
"_cfg_doc_cycle_tagging": (
|
||||
"Mesajdaki düğmeyi kullanarak betiği durdurana kadar tüm katılımcıları"
|
||||
" tekrar tekrar etiketle"
|
||||
),
|
||||
"_cfg_doc_cycle_delay": "Etiketleme döngüsü arasındaki gecikme süresi (saniye)",
|
||||
"gathering": "🧚♀️ <b>Bu sohbetteki katılımcıları çağırıyorum...</b>",
|
||||
"cancel": "🚫 İptal",
|
||||
"cancelled": "🧚♀️ <b>TagAll iptal edildi!</b>",
|
||||
}
|
||||
|
||||
strings_uz = {
|
||||
"bot_error": (
|
||||
"🚫 <b>Inline botni chatga taklif qilish muvaffaqiyatsiz bo‘ldi</b>"
|
||||
),
|
||||
"_cfg_doc_default_message": "Odatiy etiket xabari",
|
||||
"_cfg_doc_delete": "Etiketdan so‘ng xabarlarni o‘chirish",
|
||||
"_cfg_doc_use_bot": "Odamlarni etiketlash uchun inline botdan foydalanish",
|
||||
"_cfg_doc_timeout": "Har bir etiket xabari orasida nechta kutish kerak",
|
||||
"_cfg_doc_silent": "Bekor tugmasi olmadan xabar jo‘natish",
|
||||
"_cfg_doc_cycle_tagging": (
|
||||
"Xabar bo‘yicha tugmani ishlatib, skriptni to‘xtatguncha barcha"
|
||||
" qatnashuvchilarni qayta-qayta etiketlash"
|
||||
),
|
||||
"_cfg_doc_cycle_delay": "Har bir etiketlash tsikli orasida gecikma (soniya)",
|
||||
"gathering": "🧚♀️ <b>Ushbu chatta qatnashganlarni chaqiraman...</b>",
|
||||
"cancel": "🚫 Bekor qilish",
|
||||
"cancelled": "🧚♀️ <b>TagAll bekor qilindi!</b>",
|
||||
}
|
||||
|
||||
def __init__(self):
|
||||
self.config = loader.ModuleConfig(
|
||||
loader.ConfigValue(
|
||||
"default_message",
|
||||
"@all",
|
||||
lambda: self.strings("_cfg_doc_default_message"),
|
||||
),
|
||||
loader.ConfigValue(
|
||||
"delete",
|
||||
False,
|
||||
lambda: self.strings("_cfg_doc_delete"),
|
||||
validator=loader.validators.Boolean(),
|
||||
),
|
||||
loader.ConfigValue(
|
||||
"use_bot",
|
||||
False,
|
||||
lambda: self.strings("_cfg_doc_use_bot"),
|
||||
validator=loader.validators.Boolean(),
|
||||
),
|
||||
loader.ConfigValue(
|
||||
"timeout",
|
||||
0.1,
|
||||
lambda: self.strings("_cfg_doc_timeout"),
|
||||
validator=loader.validators.Float(minimum=0),
|
||||
),
|
||||
loader.ConfigValue(
|
||||
"silent",
|
||||
False,
|
||||
lambda: self.strings("_cfg_doc_silent"),
|
||||
validator=loader.validators.Boolean(),
|
||||
),
|
||||
loader.ConfigValue(
|
||||
"cycle_tagging",
|
||||
False,
|
||||
lambda: self.strings("_cfg_cycle_tagging"),
|
||||
validator=loader.validators.Boolean(),
|
||||
),
|
||||
loader.ConfigValue(
|
||||
"cycle_delay",
|
||||
0,
|
||||
lambda: self.strings("_cfg_cycle_delay"),
|
||||
validator=loader.validators.Integer(minimum=0),
|
||||
),
|
||||
)
|
||||
|
||||
async def cancel(self, call: InlineCall, event: StopEvent):
|
||||
event.stop()
|
||||
await call.answer(self.strings("cancel"))
|
||||
|
||||
@loader.command(
|
||||
groups=True,
|
||||
ru_doc="[текст] - Отметить всех участников чата",
|
||||
de_doc="[Text] - Alle Chatteilnehmer erwähnen",
|
||||
tr_doc="[metin] - Sohbet katılımcılarını etiketle",
|
||||
uz_doc="[matn] - Chat qatnashuvchilarini tegish",
|
||||
)
|
||||
async def tagall(self, message: Message):
|
||||
"""[text] - Tag all users in chat"""
|
||||
args = utils.get_args_raw(message)
|
||||
if message.out:
|
||||
await message.delete()
|
||||
|
||||
if self.config["use_bot"]:
|
||||
try:
|
||||
await self._client(
|
||||
InviteToChannelRequest(message.peer_id, [self.inline.bot_username])
|
||||
)
|
||||
except Exception:
|
||||
await utils.answer(message, self.strings("bot_error"))
|
||||
return
|
||||
|
||||
with contextlib.suppress(Exception):
|
||||
Bot.set_instance(self.inline.bot)
|
||||
|
||||
chat_id = int(f"-100{utils.get_chat_id(message)}")
|
||||
else:
|
||||
chat_id = utils.get_chat_id(message)
|
||||
|
||||
event = StopEvent()
|
||||
|
||||
if not self.config["silent"]:
|
||||
cancel = await self.inline.form(
|
||||
message=message,
|
||||
text=self.strings("gathering"),
|
||||
reply_markup={
|
||||
"text": self.strings("cancel"),
|
||||
"callback": self.cancel,
|
||||
"args": (event,),
|
||||
},
|
||||
)
|
||||
|
||||
first, br = True, False
|
||||
while True if self.config["cycle_tagging"] else first:
|
||||
for chunk in utils.chunks(
|
||||
[
|
||||
f'<a href="tg://user?id={user.id}">\xad</a>'
|
||||
async for user in self._client.iter_participants(message.peer_id)
|
||||
],
|
||||
5,
|
||||
):
|
||||
m = await (
|
||||
self.inline.bot.send_message
|
||||
if self.config["use_bot"]
|
||||
else self._client.send_message
|
||||
)(
|
||||
chat_id,
|
||||
utils.escape_html(args or self.config["default_message"])
|
||||
+ "\xad".join(chunk),
|
||||
)
|
||||
|
||||
if self.config["delete"]:
|
||||
with contextlib.suppress(Exception):
|
||||
await m.delete()
|
||||
|
||||
async def _task():
|
||||
nonlocal event, cancel
|
||||
if not self.config["silent"]:
|
||||
return
|
||||
|
||||
while True:
|
||||
if not event.state:
|
||||
await cancel.edit(self.strings("cancelled"))
|
||||
return
|
||||
|
||||
await asyncio.sleep(0.1)
|
||||
|
||||
task = asyncio.ensure_future(_task())
|
||||
await asyncio.sleep(self.config["timeout"])
|
||||
task.cancel()
|
||||
if not event.state:
|
||||
br = True
|
||||
break
|
||||
|
||||
if br:
|
||||
break
|
||||
|
||||
first = False
|
||||
if self.config["cycle_tagging"]:
|
||||
await asyncio.sleep(self.config["cycle_delay"])
|
||||
|
||||
await cancel.delete()
|
||||
Reference in New Issue
Block a user