# █ █ ▀ █▄▀ ▄▀█ █▀█ ▀
# █▀█ █ █ █ █▀█ █▀▄ █
# © Copyright 2022
# https://t.me/hikariatama
#
# 🔒 Licensed under the GNU AGPLv3
# 🌐 https://www.gnu.org/licenses/agpl-3.0.html
# meta pic: https://static.dan.tatar/feedback_icon.png
# meta banner: https://mods.hikariatama.ru/badges/feedback.jpg
# meta developer: @hikarimods
# scope: inline
# scope: hikka_only
# scope: hikka_min 1.2.10
import abc
import time
from aiogram.types import Message as AiogramMessage
from telethon.utils import get_display_name
from .. import loader, utils
from ..inline.types import InlineCall
@loader.tds
class FeedbackMod(loader.Module):
"""Simple feedback bot for Hikka"""
__metaclass__ = abc.ABCMeta
strings = {
"name": "Feedback",
"/start": (
"🤵♀️ Hello. I'm feedback bot of {}. Read /nometa before"
" continuing\nYou can send only one message per minute"
),
"/nometa": (
"👨🎓 Internet-talk rules:\n\n"
"🚫 Do not send just 'Hello'\n"
"🚫 Do not advertise\n"
"🚫 Do not insult\n"
"🚫 Do not split message\n"
"✅ Write your question in one message"
),
"enter_message": "✍️ Enter your message here",
"sent": "✅ Your message has been sent to owner",
}
strings_ru = {
"/start": (
"🤵♀️ Привет. Я бот обратной связи {}. Прочитай /nometa перед"
" продолжением\nТы можешь отправлять только одно сообщение в"
" минуту"
),
"enter_message": "✍️ Ввведи сообщение",
"sent": "✅ Сообщение передано владельцу",
"_cls_doc": "Бот обратной связи для Hikka",
"/nometa": (
"👨🎓 Правила общения в Интернете:\n\n 🚫 Не пиши"
" просто 'Привет'\n 🚫 Не рекламируй ничего\n 🚫 Не"
" оскорбляй никого\n 🚫 Не разбивай сообщения на миллион"
" кусочков\n ✅ Пиши вопрос в одном сообщении"
),
}
strings_de = {
"/start": (
"🤵♀️ Hallo. Ich bin der Feedback-Bot von {}. Lies /nometa, bevor"
" du fortfährst\nDu kannst nur eine Nachricht pro Minute senden"
),
"enter_message": "✍️ Gib deine Nachricht hier ein",
"sent": "✅ Deine Nachricht wurde dem Besitzer gesendet",
"_cls_doc": "Feedback-Bot für Hikka",
"/nometa": (
"👨🎓 Internet-Talk-Regeln:\n\n 🚫 Nicht 'Hallo'"
" schreiben\n 🚫 Nicht werben\n 🚫 Nicht"
" beleidigen\n 🚫 Nicht aufteilen\n ✅ Schreibe deine"
" Frage in einer Nachricht"
),
}
strings_hi = {
"/start": (
"🤵♀️ नमस्ते। मैं {} का फीडबैक बॉट हूँ। जारी रखने से पहले /nometa"
" पढ़ें\nआप मिनट में केवल एक संदेश भेज सकते हैं"
),
"enter_message": "✍️ यहां संदेश दर्ज करें",
"sent": "✅ आपका संदेश मालिक को भेज दिया गया है",
"_cls_doc": "Hikka के लिए प्रतिक्रिया बॉट",
"/nometa": (
"👨🎓 इंटरनेट बातचीत नियम:\n\n 🚫 'नमस्ते' न लिखें\n"
" 🚫 विज्ञापन न करें\n 🚫 अपमान न करें\n 🚫 संदेश को विभाजित"
" न करें\n ✅ अपना सवाल एक संदेश में लिखें"
),
}
strings_tr = {
"/start": (
"🤵♀️ Merhaba. Ben {}'ın geri bildirim botuyum. Devam etmeden önce"
" /nometa'ya bakın\nSadece bir dakikada bir mesaj"
" gönderebilirsiniz"
),
"enter_message": "✍️ Mesajınızı buraya girin",
"sent": "✅ Sahibine mesajınız gönderildi",
"_cls_doc": "Hikka için geri bildirim botu",
"/nometa": (
"👨🎓 İnternet Konuşma Kuralları:\n\n 🚫 'Merhaba'"
" yazmayın\n 🚫 Reklam yapmayın\n 🚫 Kimsenin ağzına"
" sıçramayın\n 🚫 Mesajı parçalaymayın\n ✅ Sorunuzu bir"
" mesajda yazın"
),
}
async def client_ready(self):
self._name = utils.escape_html(get_display_name(self._client.hikka_me))
self._ratelimit = {}
self._markup = self.inline.generate_markup(
{"text": "✍️ Leave a message [1 per minute]", "data": "fb_leave_message"}
)
self._cancel = self.inline.generate_markup(
{"text": "🚫 Cancel", "data": "fb_cancel"}
)
self.__doc__ = (
"Feedback bot\n"
f"Your feeback link: t.me/{self.inline.bot_username}?start=feedback\n"
"You can freely share it"
)
async def aiogram_watcher(self, message: AiogramMessage):
if message.text == "/start feedback":
await message.answer(
self.strings("/start").format(self._name),
reply_markup=self._markup,
)
elif message.text == "/nometa":
await message.answer(self.strings("/nometa"), reply_markup=self._markup)
elif 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,
)
await message.answer(self.strings("sent"))
self._ratelimit[message.from_user.id] = time.time() + 60
self.inline.ss(message.from_user.id, False)
@loader.inline_everyone
@loader.callback_handler()
async def feedback(self, call: InlineCall):
"""Handles button clicks"""
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 != "fb_leave_message":
return
if (
call.from_user.id in self._ratelimit
and self._ratelimit[call.from_user.id] > time.time()
):
await call.answer(
(
"You can send next message in"
f" {self._ratelimit[call.from_user.id] - time.time():.0f} second(-s)"
),
show_alert=True,
)
return
self.inline.ss(call.from_user.id, "fb_send_message")
await self.inline.bot.edit_message_text(
chat_id=call.message.chat.id,
message_id=call.message.message_id,
text=self.strings("enter_message"),
parse_mode="HTML",
disable_web_page_preview=True,
reply_markup=self._cancel,
)