# █ █ ▀ █▄▀ ▄▀█ █▀█ ▀ # █▀█ █ █ █ █▀█ █▀▄ █ # © 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, )