__version__ = (1, 0, 1)
#
# @@@@@@ @@@@@@ @@@@@@@ @@@@@@@ @@@@@@ @@@@@@@@@@ @@@@@@ @@@@@@@ @@@ @@@ @@@ @@@@@@@@ @@@@@@
# @@@@@@@@ @@@@@@@ @@@@@@@ @@@@@@@@ @@@@@@@@ @@@@@@@@@@@ @@@@@@@@ @@@@@@@@ @@@ @@@ @@@ @@@@@@@@ @@@@@@@
# @@! @@@ !@@ @@! @@! @@@ @@! @@@ @@! @@! @@! @@! @@@ @@! @@@ @@! @@@ @@! @@! !@@
# !@! @!@ !@! !@! !@! @!@ !@! @!@ !@! !@! !@! !@! @!@ !@! @!@ !@! @!@ !@! !@! !@!
# @!@!@!@! !!@@!! @!! @!@!!@! @!@ !@! @!! !!@ @!@ @!@ !@! @!@ !@! @!@ !@! @!! @!!!:! !!@@!!
# !!!@!!!! !!@!!! !!! !!@!@! !@! !!! !@! ! !@! !@! !!! !@! !!! !@! !!! !!! !!!!!: !!@!!!
# !!: !!! !:! !!: !!: :!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!! !!: !!: !:!
# :!: !:! !:! :!: :!: !:! :!: !:! :!: :!: :!: !:! :!: !:! :!: !:! :!: :!: !:!
# :: ::: :::: :: :: :: ::: ::::: :: ::: :: ::::: :: :::: :: ::::: :: :: :::: :: :::: :::: ::
# : : : :: : : : : : : : : : : : : : : :: : : : : : : :: : : : :: :: :: : :
#
# © Copyright 2024
#
# https://t.me/Den4ikSuperOstryyPer4ik
# and
# https://t.me/ToXicUse
#
# 🔒 Licensed under the GNU AGPLv3
# https://www.gnu.org/licenses/agpl-3.0.html
#
# meta developer: @AstroModules, @HikariMods
# meta banner: https://raw.githubusercontent.com/Den4ikSuperOstryyPer4ik/Astro-modules/main/Banners/Emotions.jpg
import grapheme
from telethon.tl.types import Message
from .. import loader, utils
@loader.tds
class EmotionsMod(loader.Module):
'''Выражение эмоций в чате'''
strings = {
"name": "Emotions",
'delete_msg': "Удалять сообщение которое вызывает эмоцию?",
'on': "🥺 Emotions успешно активирован в этом чате.",
'off': "🥺 Emotions успешно деактивирован в этом чате",
'ok': "☑️Эмоция успешно добавлена",
'list': "🥺 Доступные эмоции:\n\n{}\n\n❗️ Для добавления своих эмоций введите команду:\n .emo <символ/слово> <эмоция>",
}
async def client_ready(self):
self.emo = self.get(
"emo",
{
')': '😊 улыбается',
'(': '🙁 грустит',
'😭': '😭 плачет',
'😃': "😃 радуется",
"😏": "😏 думает о кое-чем)))",
"🤔": "🤔 призадумался",
"😂": "😂 смеется",
"🤣": "🤣 ржет",
"😞": "😞 расстроен",
"😔": "😔 сильно расстроен",
"😍": "😍 что-то нравится",
"😤": "😤 зол",
"😡": "😡 сильно зол",
"🤬": "🤬 матерится",
"😎": "😎 типа крутой",
"😳": "😳 шокирован",
"🤢": "🤢 думает что это противно",
"🫠": "🫠 весь течет",
"🥺": "🥺 считает что это мило",
},
)
self.chats = self.get("active", [])
def __init__(self):
self.config = loader.ModuleConfig(
loader.ConfigValue(
'delete',
True,
doc=lambda: self.strings("delete_msg"),
validator=loader.validators.Boolean()
)
)
async def emogocmd(self, message: Message):
"""- вкл/выкл эмоции в данном чате"""
cid = str(utils.get_chat_id(message))
if cid in self.chats:
self.chats.remove(cid)
await utils.answer(message, self.strings("off"))
else:
self.chats += [cid]
await utils.answer(message, self.strings("on"))
self.set("active", self.chats)
async def emoclearcmd(self, message: Message):
""" - сбросить список эмоций"""
args = utils.get_args_raw(message)
if args == "y":
await self.allmodules.commands["e"](
await utils.answer(message, f"{self.get_prefix()}e db.pop('EmotionsMod')")
)
await utils.answer(message, "☠️ Список эмоций успешно сброшен до зоводских настроек\nПожалуйста, загрузите модуль еще раз.")
else:
await utils.answer(message, '☠️ Вы не подтвердили удаление!')
async def emolistcmd(self, message: Message):
"""- список доступных эмоций"""
await utils.answer(
message,
self.strings("list").format(
"\n".join(
[f" ▪️ {simvol} - {emotion}" for simvol, emotion in self.emo.items()]
)
),
)
async def emocmd(self, message: Message):
"""<символ|слово> <эмоция> - добавить эмоцию в базу модуля"""
args = utils.get_args_raw(message)
try:
simvol = args.split(" ", 1)[0]
emotion = args.split(" ", 1)[1]
except Exception:
if not args or simvol not in self.emo:
await utils.answer(message, '❗️ Вы ввели неверное значение. Попробуйте снова')
else:
del self.emo[simvol]
self.set("emo", self.emo)
await utils.answer(message, self.strings("ok"))
return
self.emo[simvol] = emotion
self.set("emo", self.emo)
await utils.answer(message, self.strings("ok"))
async def watcher(self, message: Message):
cid = str(utils.get_chat_id(message))
try:
if (
cid not in self.chats
or not isinstance(message, Message)
or not hasattr(message, "raw_text")
or message.raw_text.split(maxsplit=1)[0].lower() not in self.emo
):
return
except IndexError:
return
try:
cmd = message.raw_text.split(maxsplit=1)[0].lower()
except IndexError:
return
msg = self.emo[cmd]
sender = await self._client.get_entity(message.sender_id)
if utils.emoji_pattern.match(next(grapheme.graphemes(msg))):
msg = list(grapheme.graphemes(msg))
emoji = msg[0]
msg = "".join(msg[1:])
else:
emoji = "🥺"
if self.config['delete']:
if message.out:
pass
else:
await message.delete()
await utils.answer(
message,
f'{emoji} {utils.escape_html(sender.first_name)} {utils.escape_html(msg)} {emoji}')