__version__ = (2, 0, 1)
# █ █ ▀ █▄▀ ▄▀█ █▀█ ▀
# █▀█ █ █ █ █▀█ █▀▄ █
# © 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/truth_or_date_icon.py
# meta banner: https://mods.hikariatama.ru/badges/truth_or_dare.jpg
# meta developer: @hikarimods
# scope: inline
# scope: hikka_only
# scope: hikka_min 1.2.10
import json
import random
import requests
from telethon.tl.types import Message
from .. import loader, utils
from ..inline.types import InlineCall
@loader.tds
class TruthOrDareMod(loader.Module):
"""Truth or dare? Play your favorite game from inside the Telegram (en/ru)"""
strings = {
"name": "TruthOrDare",
"choose_language": "👩🎤 Choose language",
"truth_or_dare_ru": "🔴 Правда или Действие? 🔵",
"truth_or_dare_en": "🔴 Truth or Dare? 🔵",
"truth_ru": "🤵♀️ Правда",
"dare_ru": "🥷 Действие",
"truth_en": "🤵♀️ Truth",
"dare_en": "🥷 Dare",
"language_saved_ru": "🇷🇺 Язык сохранен",
"language_saved_en": "🇬🇧 Language saved",
"classic_ru": "🙂 Классика",
"classic_en": "🙂 Classic",
"kids_ru": "👨👦 Для детей",
"kids_en": "👨👦 Kids",
"party_ru": "🥳 Вечеринка",
"party_en": "🥳 Party",
"hot_ru": "❤️🔥 Горячее",
"hot_en": "❤️🔥 Hot",
"mixed_ru": "🔀 Разное",
"mixed_en": "🔀 Mixed",
"category_ru": "😇 Выбери категорию игры:",
"category_en": "😇 Choose game category:",
"args": "▫️ .todlang en/ru",
}
async def client_ready(self):
if self.get("lang") in {"ru", "en"}:
self._update_lang()
async def truth_or_dare(self, tod: str, category: str) -> str:
return random.choice(
(
await utils.run_sync(
requests.post,
"https://psycatgames.com/api/tod-v2/",
headers={"referer": "https://psycatgames.com/app/truth-or-dare"},
data=json.dumps(
{
"id": "truth-or-dare",
"language": self.get("lang"),
"category": category,
"type": tod,
}
),
)
).json()["results"]
)
def _update_lang(self):
self._markup = [
[
{
"text": self.strings(f"classic_{self.get('lang')}"),
"callback": self._inline_start,
"args": ("classic",),
},
{
"text": self.strings(f"kids_{self.get('lang')}"),
"callback": self._inline_start,
"args": ("kids",),
},
],
[
{
"text": self.strings(f"party_{self.get('lang')}"),
"callback": self._inline_start,
"args": ("party",),
},
{
"text": self.strings(f"hot_{self.get('lang')}"),
"callback": self._inline_start,
"args": ("hot",),
},
],
[
{
"text": self.strings(f"mixed_{self.get('lang')}"),
"callback": self._inline_start,
"args": ("mixed",),
},
],
]
async def _inline_set_language(self, call: InlineCall, lang: str):
self.set("lang", lang)
await call.answer(self.strings(f"language_saved_{lang}"), show_alert=True)
self._update_lang()
await call.edit(
self.strings(f"truth_or_dare_{self.get('lang')}"), reply_markup=self._markup
)
async def _inline_process(
self,
call: InlineCall,
action: str,
category: str,
):
action_babel = self.strings(f"{action}_{self.get('lang')}")
await call.edit(
f"{action_babel}:\n\n{await self.truth_or_dare(action, category)}",
reply_markup=[
{
"text": self.strings(f"truth_{self.get('lang')}"),
"callback": self._inline_process,
"args": ("truth", category),
},
{
"text": self.strings(f"dare_{self.get('lang')}"),
"callback": self._inline_process,
"args": ("dare", category),
},
],
)
async def _inline_start(self, call: InlineCall, category: str):
await call.edit(
self.strings(f"truth_or_dare_{self.get('lang')}"),
reply_markup=[
{
"text": self.strings(f"truth_{self.get('lang')}"),
"callback": self._inline_process,
"args": ("truth", category),
},
{
"text": self.strings(f"dare_{self.get('lang')}"),
"callback": self._inline_process,
"args": ("dare", category),
},
],
)
async def todcmd(self, message: Message):
"""Get truth or dare"""
if not self.get("lang"):
await self.inline.form(
self.strings("choose_language"),
message=message,
reply_markup=[
{
"text": "🇷🇺 Русский",
"callback": self._inline_set_language,
"args": ("ru",),
},
{
"text": "🇬🇧 English",
"callback": self._inline_set_language,
"args": ("en",),
},
],
)
return
if (category := utils.get_args_raw(message).lower()) not in {
"classic",
"kids",
"party",
"hot",
"mixed",
}:
category = "mixed"
if random.choice(("truth", "dare")) == "truth":
action_babel = self.strings(f"truth_{self.get('lang')}")
await utils.answer(
message,
(
f"{action_babel}:\n\n{await self.truth_or_dare('truth', category)}"
),
)
else:
action_babel = self.strings(f"dare_{self.get('lang')}")
await utils.answer(
message,
(
f"{action_babel}:\n\n{await self.truth_or_dare('dare', category)}"
),
)
async def todicmd(self, message: Message):
"""Start new truth or dare game"""
if not self.get("lang"):
await self.inline.form(
self.strings("choose_language"),
message=message,
reply_markup=[
{
"text": "🇷🇺 Русский",
"callback": self._inline_set_language,
"args": ("ru",),
},
{
"text": "🇬🇧 English",
"callback": self._inline_set_language,
"args": ("en",),
},
],
)
return
await self.inline.form(
self.strings(f"category_{self.get('lang')}"),
message=message,
reply_markup=self._markup,
disable_security=True,
)
async def todlangcmd(self, message: Message):
"""[en/ru] - Change language"""
args = utils.get_args_raw(message).lower().strip()
if args not in {"ru", "en"}:
await utils.answer(message, self.strings("args"))
return
self.set("lang", args)
self._update_lang()
ans = self.strings(f"language_saved_{args}")
await utils.answer(message, f"{ans}")