Initial commit: MIB bot
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
import asyncio
|
||||
import logging
|
||||
import time
|
||||
|
||||
from aiogram import Dispatcher, F, types
|
||||
from aiogram.filters import Command
|
||||
|
||||
from antispam import anti_DuDo, call_verification
|
||||
from config import bot, setup_bot_connection
|
||||
from functions import download_yd, get_weather, info_ban_status, send_photo_with_caption
|
||||
from switching_en_ru import convert_layout
|
||||
from yandex_cloud_sk import get_text_from_speech
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
logger = logging.getLogger("main")
|
||||
|
||||
router = Dispatcher()
|
||||
|
||||
|
||||
@router.message(Command("start"))
|
||||
async def welcome_start(message: types.Message):
|
||||
caption = (
|
||||
f"Приветствую тебя {message.from_user.username or message.from_user.full_name}\n"
|
||||
"Для получения дополнительной информации отправь мне /help"
|
||||
)
|
||||
await send_photo_with_caption(message.chat.id, "welcome_robot", "img/welcome_robot.jpeg", caption)
|
||||
await call_verification(message.from_user.id, message, "start")
|
||||
|
||||
|
||||
@router.message(Command("help"))
|
||||
async def welcome_help(message: types.Message):
|
||||
with open("info.txt", "r", encoding="utf-8") as file:
|
||||
info = file.read()
|
||||
await message.reply(f"Привет {message.from_user.username or message.from_user.full_name}.\n{info}")
|
||||
await call_verification(message.from_user.id, message, "help")
|
||||
|
||||
|
||||
@router.message(Command("get_id"))
|
||||
async def get_me_id(message: types.Message):
|
||||
await message.answer(f"ID пользователя: {message.from_user.id}")
|
||||
await call_verification(message.from_user.id, message, "get_id")
|
||||
|
||||
|
||||
@router.message(Command("weather"))
|
||||
async def weather(message: types.Message):
|
||||
await get_weather(message)
|
||||
await call_verification(message.from_user.id, message, "weather")
|
||||
|
||||
|
||||
@router.message(Command("ydf"))
|
||||
async def yandex_down_files(message: types.Message):
|
||||
await download_yd(message)
|
||||
await call_verification(message.from_user.id, message, "ydf")
|
||||
|
||||
|
||||
@router.message(Command("res"))
|
||||
async def restoring_layout(message: types.Message):
|
||||
if message.reply_to_message and message.reply_to_message.text:
|
||||
restored_text = convert_layout(message.reply_to_message.text)
|
||||
await message.answer(restored_text)
|
||||
else:
|
||||
await message.answer("Пожалуйста, ответьте командой /res на сообщение с текстом.")
|
||||
await call_verification(message.from_user.id, message, "res")
|
||||
|
||||
|
||||
@router.message(Command("info_ban"))
|
||||
async def info_ban(message: types.Message):
|
||||
await info_ban_status(message)
|
||||
await call_verification(message.from_user.id, message, "info_ban")
|
||||
|
||||
|
||||
@router.message(F.sticker | F.animation)
|
||||
async def handle_sticker(message: types.Message):
|
||||
user_id = message.from_user.id
|
||||
now = time.time()
|
||||
await anti_DuDo(user_id, message, now)
|
||||
|
||||
|
||||
@router.message(F.voice)
|
||||
async def handle_voice(message: types.Message):
|
||||
voice: types.Voice = message.voice
|
||||
voice_file = await bot.get_file(voice.file_id)
|
||||
file_base_url = f"https://api.telegram.org/file/bot{bot.token}/{voice_file.file_path}"
|
||||
|
||||
try:
|
||||
text = await get_text_from_speech(file_base_url)
|
||||
if not text:
|
||||
text = "Не удалось распознать текст."
|
||||
except Exception as exc:
|
||||
logger.error("Ошибка при распознавании текста: %s", exc)
|
||||
text = "Произошла ошибка при обработке голосового сообщения."
|
||||
|
||||
await message.answer(f"{message.from_user.username or message.from_user.full_name} изрек:\n{text}")
|
||||
|
||||
|
||||
async def main():
|
||||
connected = await setup_bot_connection()
|
||||
if not connected:
|
||||
# Завершаем работу штатно: без traceback и без падения процесса.
|
||||
return
|
||||
|
||||
await router.start_polling(bot)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
Reference in New Issue
Block a user