mirror of
https://github.com/MuRuLOSE/limoka.git
synced 2026-06-16 14:34:17 +02:00
159 lines
5.5 KiB
Python
159 lines
5.5 KiB
Python
"""
|
||
_
|
||
__ _____ ___ ___ ___ __| | ___ _ __
|
||
\ \ / / __|/ _ \/ __/ _ \ / _` |/ _ \ '__|
|
||
\ V /\__ \ __/ (_| (_) | (_| | __/ |
|
||
\_/ |___/\___|\___\___/ \__,_|\___|_|
|
||
|
||
Copyleft 2022 t.me/vsecoder
|
||
This program is free software; you can redistribute it and/or modify
|
||
|
||
"""
|
||
# meta developer: @vsecoder_m
|
||
# meta pic: https://img.icons8.com/fluency/344/feedback.png
|
||
# meta banner: https://chojuu.vercel.app/api/banner?img=https://img.icons8.com/fluency/344/feedback.png&title=Feedback&description=Feedback%20bot%20for%20Hikka%20modules
|
||
|
||
__version__ = (3, 0, 1)
|
||
|
||
import logging
|
||
import time
|
||
from telethon.utils import get_display_name
|
||
from aiogram.types import Message as AiogramMessage
|
||
from .. import loader, utils # type: ignore
|
||
from ..inline.types import InlineCall # type: ignore
|
||
|
||
logger = logging.getLogger(__name__)
|
||
|
||
|
||
@loader.tds
|
||
class FeedbackBotMod(loader.Module):
|
||
"""FeedbackBot"""
|
||
strings = {
|
||
"name": "📥 Feedback",
|
||
"start": "✌️ Hi, I'm feedback bot as {}",
|
||
"fb_message": "📝 Take to send message",
|
||
"wait": "⏳ You can send next message in {} second(-s)",
|
||
"start_feedback": (
|
||
"📝 Write 1 message, and I'll send it to {}\n\n[{} per minute]"
|
||
),
|
||
"sent": "📩 Message sent",
|
||
"banned": "🚫 You are banned",
|
||
"user_banned": "🚫 {} is banned",
|
||
}
|
||
|
||
strings_ru = {
|
||
"start": "✌️ Привет, я бот обратной связи {}",
|
||
"fb_message": "📝 Нажмите для отправки сообщения",
|
||
"wait": "⏳ Вы можете отправить сообщение через {} секунд(-ы)",
|
||
"start_feedback": "📝 Напишите сообщение, и я отправлю его {}\n\n[{} в минуту]",
|
||
"sent": "📩 Сообщение отправлено",
|
||
"banned": "🚫 Вы забанены",
|
||
"user_banned": "🚫 {} забанен",
|
||
}
|
||
|
||
def __init__(self):
|
||
self.config = loader.ModuleConfig(
|
||
loader.ConfigValue(
|
||
"ratelimit",
|
||
"1",
|
||
"Rate limit(in minutes)",
|
||
validator=loader.validators.Integer(minimum=0),
|
||
)
|
||
)
|
||
self.name = self.strings["name"]
|
||
|
||
async def client_ready(self, client, db):
|
||
self._client = client
|
||
|
||
self._name = utils.escape_html(get_display_name(await client.get_me()))
|
||
|
||
self._ratelimit = {}
|
||
self._ban_list = []
|
||
|
||
self.__doc__ = (
|
||
"Module from add feedback bot 👨💻\n\n"
|
||
"📝 Dev: @vsecoder\n"
|
||
"📥 Source: github.com/vsecoder/hikka_modules"
|
||
f"🔗 Feedback link: t.me/{self.inline.bot_username}?start=feedback\n\n"
|
||
'❌ Toggle in .security "✅ Everyone (inline)" to use'
|
||
)
|
||
|
||
async def aiogram_watcher(self, message: AiogramMessage):
|
||
if message.text == "/start feedback":
|
||
if str(message.from_user.id) in map(str, self._ban_list):
|
||
return await message.answer(self.strings["banned"])
|
||
|
||
_markup = self.inline.generate_markup(
|
||
{"text": self.strings["fb_message"], "data": "fb_message"}
|
||
)
|
||
|
||
await message.answer(
|
||
self.strings["start"].format(self._name),
|
||
reply_markup=_markup,
|
||
)
|
||
|
||
if self.inline.gs(message.from_user.id) == "fb_send_message":
|
||
await self.inline.bot.forward_message(
|
||
self._tg_id,
|
||
message.chat.id,
|
||
message.message_id,
|
||
)
|
||
_markup = self.inline.generate_markup(
|
||
{"text": "🚫 Ban", "data": f"fb_ban/{message.from_user.id}"}
|
||
)
|
||
await self.inline.bot.send_message(
|
||
self._tg_id,
|
||
f"{message.chat.id}",
|
||
reply_markup=_markup,
|
||
)
|
||
await message.answer(self.strings["sent"])
|
||
self._ratelimit[message.from_user.id] = (
|
||
time.time() + self.config["ratelimit"] * 60
|
||
)
|
||
self.inline.ss(message.from_user.id, False)
|
||
|
||
@loader.inline_everyone
|
||
async def feedback_callback_handler(self, call: InlineCall):
|
||
if call.data == "fb_cancel":
|
||
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.split("/")[0] == "fb_ban":
|
||
fb_ban_id = call.data.split("/")[1]
|
||
if str(fb_ban_id) in str(self._ban_list):
|
||
pass
|
||
else:
|
||
self._ban_list.append(fb_ban_id)
|
||
await call.answer(self.strings["user_banned"].format(fb_ban_id))
|
||
|
||
if call.data != "fb_message":
|
||
return
|
||
|
||
if str(call.from_user.id) in str(self._ban_list):
|
||
await call.answer(
|
||
self.strings["banned"],
|
||
show_alert=True,
|
||
)
|
||
|
||
if (
|
||
call.from_user.id in self._ratelimit
|
||
and self._ratelimit[call.from_user.id] > time.time()
|
||
):
|
||
await call.answer(
|
||
self.strings["wait"].format(
|
||
self._ratelimit[call.from_user.id] - time.time()
|
||
),
|
||
show_alert=True,
|
||
)
|
||
return
|
||
|
||
self.inline.ss(call.from_user.id, "fb_send_message")
|
||
|
||
await call.answer(
|
||
self.strings["start_feedback"].format(self._name, self.config["ratelimit"]),
|
||
)
|