Compare commits
24 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6aaf46f9bd | ||
|
|
942de4995e | ||
|
|
ec4170842a | ||
|
|
a2c94ec024 | ||
|
|
f102f4adb3 | ||
|
|
4ee7276713 | ||
|
|
77e89fcf05 | ||
|
|
bcabbca28c | ||
|
|
cc739463ac | ||
|
|
9f2eb2d61b | ||
|
|
ccc2368c45 | ||
|
|
aee3dc3282 | ||
|
|
d42937dd21 | ||
|
|
63a32b02a6 | ||
|
|
6470932b04 | ||
|
|
69cd9ed584 | ||
|
|
7a5bcf628b | ||
|
|
9e88dc8fff | ||
|
|
03af5e8716 | ||
|
|
744e054fe1 | ||
|
|
554ecf8ed7 | ||
|
|
4e1b5bf89c | ||
|
|
6513185e1a | ||
|
|
6acd59a141 |
227
NekoSpeak.py
227
NekoSpeak.py
@@ -1,152 +1,199 @@
|
|||||||
from hikkatl.types import Message
|
from hikkatl.types import Message
|
||||||
from .. import loader, utils
|
from .. import loader, utils
|
||||||
import random
|
import random
|
||||||
|
|
||||||
@loader.tds
|
@loader.tds
|
||||||
class NekoSpeakModule(loader.Module):
|
class NekoSpeakModule(loader.Module):
|
||||||
"""Модуль для стилизации речи под неко"""
|
"""Модуль для стилизации речи под неко"""
|
||||||
strings = {"name": "NekoSpeak", "converted": "{text}"}
|
|
||||||
strings_ru = {"converted": "{text}"}
|
strings = {
|
||||||
|
"name": "NekoSpeak",
|
||||||
|
"converted": "{text}",
|
||||||
|
"banned": "Ня~ Чат {} добавлен в черный список.",
|
||||||
|
"unbanned": "Ня~ Чат {} удален из черного списка.",
|
||||||
|
"already_banned": "Ня... Этот чат уже в черном списке!",
|
||||||
|
"not_banned": "Ня... Этот чат не был забанен!",
|
||||||
|
"no_access": "Ня? У меня нет доступа к этому чату.",
|
||||||
|
"banned_list": "Список забаненных чатов:\n{}"
|
||||||
|
}
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.active = False
|
self.active = False
|
||||||
self.pm_enabled = False
|
self.pm_enabled = False
|
||||||
self.public_enabled = False
|
self.public_enabled = False
|
||||||
self.realcatlike = False
|
# Загружаем из БД или создаём новый список
|
||||||
self.exclude_chats = set()
|
self.banned_chats = set()
|
||||||
|
self.bad_minded = False
|
||||||
|
|
||||||
async def config_complete(self):
|
async def client_ready(self):
|
||||||
self.exclude_chats = set(self.get("exclude_chats", [])) # Загружаем из БД
|
saved = self.db.get("NekoSpeak", "banned_chats", [])
|
||||||
|
self.banned_chats = set(saved)
|
||||||
|
|
||||||
|
def save_banned_chats(self):
|
||||||
|
# Сохраняем список забаненных чатов в БД
|
||||||
|
self.db.set("NekoSpeak", "banned_chats", list(self.banned_chats))
|
||||||
|
|
||||||
|
|
||||||
|
def is_encrypt(self, text):
|
||||||
|
flag = False
|
||||||
|
encrypting_count=0
|
||||||
|
for x in range(1,3):
|
||||||
|
if("=" in text[-x]):
|
||||||
|
encrypting_count+=1
|
||||||
|
if(encrypting_count>=1):
|
||||||
|
flag = True
|
||||||
|
return flag
|
||||||
|
|
||||||
def neko_speak(self, text):
|
def neko_speak(self, text):
|
||||||
# Замена "н" на "ня" в некоторых словах
|
|
||||||
words = text.split()
|
|
||||||
new_words = []
|
|
||||||
for word in words:
|
|
||||||
if word.lower().startswith("н") and len(word) > 1:
|
|
||||||
word = "ня" + word[2:]
|
|
||||||
word=word.replace("р","р"*random.randint(2,4))
|
|
||||||
new_words.append(word)
|
|
||||||
text = " ".join(new_words)
|
|
||||||
|
|
||||||
# Замена стандартных фраз
|
if(not self.is_encrypt(text)):
|
||||||
replacements = {
|
words = text.split()
|
||||||
"ничего": "нячего",
|
new_words = []
|
||||||
"что?": "ня?",
|
for word in words:
|
||||||
"ура!": "ня!",
|
if word.lower().startswith("н") and len(word) > 2 and (random.random() < 0.05 or self.bad_minded):
|
||||||
"о нет": "о-ня!",
|
word = "ня" + word[2:]
|
||||||
"привет": "мяувет",
|
if random.random() < 0.05 or self.bad_minded:
|
||||||
"Привет": "Мяувет",
|
word = word.replace("р", "р-" * random.randint(2,4)+"р")
|
||||||
"хорошо":"мяу-ряско",
|
word = word.replace("r", "r" * random.randint(2,4)+"r")
|
||||||
"плохо":"мяу-чалька",
|
new_words.append(word)
|
||||||
"пиздец":"мря!",
|
text = " ".join(new_words)
|
||||||
"Пиздец":"Мря!",
|
|
||||||
"блять":"мяр!",
|
|
||||||
"Блять":"Мяр!",
|
|
||||||
"замечательные":"замуррчательные",
|
|
||||||
"замечательный":"замуррчательный",
|
|
||||||
"замечательных":"замуррчательных",
|
|
||||||
"Замечательные":"Замуррчательные",
|
|
||||||
"Замечательный":"Замуррчательный",
|
|
||||||
"Замечательных":"Замуррчательных",
|
|
||||||
"прекрасное":"замурчательное",
|
|
||||||
"Прекрасное":"Замурчательное",
|
|
||||||
"прекрасный":"замурчательный",
|
|
||||||
"Прекрасный":"Замурчательный",
|
|
||||||
"прекрасная":"замурчательная",
|
|
||||||
"Прекрасная":"Замурчательная",
|
|
||||||
"заебись":"замурчательно",
|
|
||||||
"Заебись":"Замурчательно",
|
|
||||||
"охуенно":"замурчательно",
|
|
||||||
"Охуенно":"Замурчательно",
|
|
||||||
"няхуя":"МРЯВ?! Ньё-ньё!!",
|
|
||||||
"Няхуя":"МРЯВ?! Ньё-ньё!!",
|
|
||||||
"няко":"неко",
|
|
||||||
"Няко":"неко",
|
|
||||||
"нядо":"надо",
|
|
||||||
"Нядо":"Надо",
|
|
||||||
"В рот ебал":"МРЯФФ!!",
|
|
||||||
"в рот ебал":"МРЯФФ!!",
|
|
||||||
"ебал":"мряфф!!",
|
|
||||||
"Ебал":"МРЯФФ!!",
|
|
||||||
"хуёво":"ньёрфф...",
|
|
||||||
"Хуёво":"Ньёрфф...",
|
|
||||||
"пидрилит":"мряк-мрря!",
|
|
||||||
"Пидрилит":"Мряк-мрря!",
|
|
||||||
}
|
|
||||||
for key, value in replacements.items():
|
|
||||||
text = text.replace(key, value)
|
|
||||||
|
|
||||||
# Добавление "мяу" и концовок
|
replacements = {
|
||||||
if random.random() < 0.3: # 30% шанс добавить "мяу"
|
"ничего": "нячего", "что?": "ня?", "ура!": "ня!", "о нет": "о-ня!",
|
||||||
text += " мяу~"
|
"привет": "мяувет", "Привет": "Мяувет", "хорошо":"мяу-ряско",
|
||||||
elif random.random() < 0.2: # 20% шанс добавить "-ня"
|
"плохо":"мяу-чалька", "пиздец":"мря!", "Пиздец":"Мря!",
|
||||||
text += "-ня"
|
"блять":"мяр!", "Блять":"Мяр!", "замечательные":"замуррчательные",
|
||||||
|
"замечательный":"замуррчательный", "замечательных":"замуррчательных",
|
||||||
|
"Замечательные":"Замуррчательные", "Замечательный":"Замуррчательный",
|
||||||
|
"Замечательных":"Замуррчательных", "прекрасное":"замурчательное",
|
||||||
|
"Прекрасное":"Замурчательное", "прекрасный":"замурчательный",
|
||||||
|
"Прекрасный":"Замурчательный", "прекрасная":"замурчательная",
|
||||||
|
"Прекрасная":"Замурчательная", "заебись":"замурчательно",
|
||||||
|
"Заебись":"Замурчательно", "охуенно":"замурчательно",
|
||||||
|
"Охуенно":"Замурчательно", "няхуя":"МРЯВ?! Ньё-ньё!!",
|
||||||
|
"Няхуя":"МРЯВ?! Ньё-ньё!!", "няко":"неко", "Няко":"неко",
|
||||||
|
"нядо":"надо", "Нядо":"Надо", "В рот ебал":"МРЯФФ!!",
|
||||||
|
"в рот ебал":"МРЯФФ!!", "ебал":"мряк-мрря!", "Ебал":"МРЯФФ!!",
|
||||||
|
"хуёво":"ньёрфф...", "Хуёво":"Ньёрфф...", "пидрилит":"мряк-мрря!",
|
||||||
|
"Пидрилит":"Мряк-мрря!",
|
||||||
|
}
|
||||||
|
|
||||||
|
specialchar = [",",".","<",">","/","''",'""',":",";","{","}","[","]","|","!","@","#","$","%","^","&","?","*","(",")","-","_","+","=","`","~","№"]
|
||||||
|
|
||||||
|
for key, value in replacements.items():
|
||||||
|
if(random.random()<0.05 or self.bad_minded):
|
||||||
|
text = text.replace(key, value)
|
||||||
|
|
||||||
|
if random.random() < 0.05 or self.bad_minded:
|
||||||
|
text += " мяу~"
|
||||||
|
elif random.random() < 0.05 or self.bad_minded:
|
||||||
|
if(text[-1:] in specialchar):
|
||||||
|
text=text[:-1]+"-ня"+text[-1:]
|
||||||
|
else:
|
||||||
|
text += "-ня"
|
||||||
|
|
||||||
return text
|
return text
|
||||||
|
|
||||||
@loader.command(ru_doc="Стилизовать текст под неко")
|
@loader.command(ru_doc="Стилизовать текст под неко")
|
||||||
async def neko(self, message: Message):
|
async def neko(self, message: Message):
|
||||||
"""Стилизовать текст под неко"""
|
|
||||||
text = utils.get_args_raw(message)
|
text = utils.get_args_raw(message)
|
||||||
if not text:
|
if not text:
|
||||||
return await utils.answer(message, "Ня? Введи текст!")
|
return await utils.answer(message, "Ня? Введи текст!")
|
||||||
|
|
||||||
converted_text = self.neko_speak(text)
|
converted_text = self.neko_speak(text)
|
||||||
await utils.answer(message, self.strings("converted").format(text=converted_text))
|
await utils.answer(message, self.strings("converted").format(text=converted_text))
|
||||||
|
|
||||||
@loader.command(ru_doc="Включить автоматическое преобразование речи в неко-стиль")
|
@loader.command(ru_doc="Включить автоматическое преобразование речи в неко-стиль")
|
||||||
async def nekospeak(self, message: Message):
|
async def nekospeak(self, message: Message):
|
||||||
"""Включить автоматическое преобразование речи в неко-стиль"""
|
|
||||||
self.active = True
|
self.active = True
|
||||||
await utils.answer(message, "Ня~ Теперь все твои сообщения будут преобразовываться!")
|
await utils.answer(message, "Ня~ Теперь все твои сообщения будут преобразовываться!")
|
||||||
|
|
||||||
@loader.command(ru_doc="Отключить автоматическое преобразование речи в неко-стиль")
|
@loader.command(ru_doc="Отключить автоматическое преобразование речи в неко-стиль")
|
||||||
async def nekospeakstop(self, message: Message):
|
async def nekospeakstop(self, message: Message):
|
||||||
"""Отключить автоматическое преобразование речи в неко-стиль"""
|
|
||||||
self.active = False
|
self.active = False
|
||||||
await utils.answer(message, "Ня... Теперь сообщения не будут изменяться.")
|
await utils.answer(message, "Ня... Теперь сообщения не будут изменяться.")
|
||||||
|
|
||||||
@loader.command(ru_doc="Переключить преобразование сообщений в ЛС")
|
@loader.command(ru_doc="Переключить преобразование сообщений в ЛС")
|
||||||
async def nekospeakpm(self, message: Message):
|
async def nekospeakpm(self, message: Message):
|
||||||
"""Переключить преобразование сообщений в ЛС"""
|
|
||||||
self.pm_enabled = not self.pm_enabled
|
self.pm_enabled = not self.pm_enabled
|
||||||
status = "включено" if self.pm_enabled else "выключено"
|
status = "включено" if self.pm_enabled else "выключено"
|
||||||
await utils.answer(message, f"Ня! Преобразование в ЛС теперь {status}.")
|
await utils.answer(message, f"Ня! Преобразование в ЛС теперь {status}.")
|
||||||
|
|
||||||
@loader.command(ru_doc="Переключить преобразование сообщений в публичных чатах")
|
@loader.command(ru_doc="Переключить преобразование сообщений в публичных чатах")
|
||||||
async def nekospeakpublic(self, message: Message):
|
async def nekospeakpublic(self, message: Message):
|
||||||
"""Переключить преобразование сообщений в публичных чатах"""
|
|
||||||
self.public_enabled = not self.public_enabled
|
self.public_enabled = not self.public_enabled
|
||||||
status = "включено" if self.public_enabled else "выключено"
|
status = "включено" if self.public_enabled else "выключено"
|
||||||
await utils.answer(message, f"Ня! Преобразование в публичных чатах теперь {status}.")
|
await utils.answer(message, f"Ня! Преобразование в публичных чатах теперь {status}.")
|
||||||
|
|
||||||
@loader.command(ru_doc="Добавить/удалить чат из исключений для nekospeakpm")
|
@loader.command(ru_doc="Отключает рандом, преобразовывает всё без шансов спастись")
|
||||||
async def nekospeakpmexclude(self, message: Message):
|
async def nekospeakdumb(self, message: Message):
|
||||||
"""Добавить/удалить чат из исключений для nekospeakpm"""
|
self.bad_minded = not self.bad_minded
|
||||||
chat_id = message.chat_id
|
status = "отключён" if self.bad_minded else "включён"
|
||||||
|
await utils.answer(message, f"Ня! Рандом {status}.")
|
||||||
|
|
||||||
if chat_id in self.exclude_chats:
|
@loader.command(ru_doc="Заблокировать чат для работы модуля")
|
||||||
self.exclude_chats.remove(chat_id)
|
async def nekospeakex(self, message: Message):
|
||||||
status = "удалён из"
|
args = utils.get_args_raw(message)
|
||||||
else:
|
try:
|
||||||
self.exclude_chats.add(chat_id)
|
chat_id = int(args) if args.isdigit() else None
|
||||||
status = "добавлен в"
|
if not chat_id:
|
||||||
|
reply = await message.get_reply_message()
|
||||||
|
if reply:
|
||||||
|
chat_id = reply.sender_id or reply.chat_id
|
||||||
|
else:
|
||||||
|
chat_id = message.chat_id
|
||||||
|
except Exception:
|
||||||
|
chat_id = message.chat_id
|
||||||
|
|
||||||
self.set("exclude_chats", list(self.exclude_chats)) # Сохраняем как список
|
if chat_id in self.banned_chats:
|
||||||
|
await utils.answer(message, self.strings("already_banned"))
|
||||||
|
return
|
||||||
|
|
||||||
await utils.answer(message, f"Чат {status} списка исключений!")
|
self.banned_chats.add(chat_id)
|
||||||
|
self.save_banned_chats()
|
||||||
|
await utils.answer(message, self.strings("banned").format(str(chat_id)))
|
||||||
|
|
||||||
|
@loader.command(ru_doc="Разблокировать чат")
|
||||||
|
async def nekospeakin(self, message: Message):
|
||||||
|
args = utils.get_args_raw(message)
|
||||||
|
try:
|
||||||
|
chat_id = int(args) if args.isdigit() else None
|
||||||
|
if not chat_id:
|
||||||
|
reply = await message.get_reply_message()
|
||||||
|
if reply:
|
||||||
|
chat_id = reply.sender_id or reply.chat_id
|
||||||
|
else:
|
||||||
|
chat_id = message.chat_id
|
||||||
|
except Exception:
|
||||||
|
chat_id = message.chat_id
|
||||||
|
|
||||||
|
if chat_id not in self.banned_chats:
|
||||||
|
await utils.answer(message, self.strings("not_banned"))
|
||||||
|
return
|
||||||
|
|
||||||
|
self.banned_chats.remove(chat_id)
|
||||||
|
self.save_banned_chats()
|
||||||
|
await utils.answer(message, self.strings("unbanned").format(str(chat_id)))
|
||||||
|
|
||||||
|
@loader.command(ru_doc="Показать список заблокированных чатов (только в ЛС)")
|
||||||
|
async def nekospeaklist(self, message: Message):
|
||||||
|
if not message.is_private:
|
||||||
|
await utils.answer(message, self.strings("no_access"))
|
||||||
|
return
|
||||||
|
|
||||||
|
if not self.banned_chats:
|
||||||
|
await utils.answer(message, "Ня... Список забаненных чатов пуст.")
|
||||||
|
return
|
||||||
|
|
||||||
|
banned_list = "\n".join([f"- {chat}" for chat in self.banned_chats])
|
||||||
|
await utils.answer(message, self.strings("banned_list").format(banned_list))
|
||||||
|
|
||||||
async def watcher(self, message: Message):
|
async def watcher(self, message: Message):
|
||||||
if not self.active:
|
if not self.active:
|
||||||
return
|
return
|
||||||
|
|
||||||
chat_id = message.chat_id
|
|
||||||
if chat_id in self.exclude_chats:
|
|
||||||
return
|
|
||||||
|
|
||||||
if message.out:
|
if message.out:
|
||||||
|
chat_id = message.chat_id
|
||||||
|
if chat_id in self.banned_chats:
|
||||||
|
return
|
||||||
if message.is_private and not self.pm_enabled:
|
if message.is_private and not self.pm_enabled:
|
||||||
return
|
return
|
||||||
if not message.is_private and not self.public_enabled:
|
if not message.is_private and not self.public_enabled:
|
||||||
|
|||||||
Reference in New Issue
Block a user