mirror of
https://github.com/MuRuLOSE/limoka.git
synced 2026-06-17 14:54:18 +02:00
Commited backup
This commit is contained in:
158
vsecoder/hikka_modules/feedbackbot.py
Normal file
158
vsecoder/hikka_modules/feedbackbot.py
Normal file
@@ -0,0 +1,158 @@
|
||||
"""
|
||||
_
|
||||
__ _____ ___ ___ ___ __| | ___ _ __
|
||||
\ \ / / __|/ _ \/ __/ _ \ / _` |/ _ \ '__|
|
||||
\ 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"]),
|
||||
)
|
||||
Reference in New Issue
Block a user