split
This commit is contained in:
9
config.py
Normal file
9
config.py
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import os
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
|
||||||
|
# Загрузка переменных окружения из файла .env
|
||||||
|
load_dotenv()
|
||||||
|
|
||||||
|
# Настройки бота
|
||||||
|
BOT_TOKEN = os.getenv("BOT_TOKEN")
|
||||||
|
MODERATORS_CHAT_ID = int(os.getenv("MODERATORS_CHAT_ID"))
|
||||||
0
handlers/__init__.py
Normal file
0
handlers/__init__.py
Normal file
24
handlers/commands.py
Normal file
24
handlers/commands.py
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
from aiogram import types
|
||||||
|
from aiogram.dispatcher import Dispatcher
|
||||||
|
from config import MODERATORS_CHAT_ID
|
||||||
|
|
||||||
|
# Обработчик команды /start
|
||||||
|
async def send_welcome(message: types.Message):
|
||||||
|
await message.answer(
|
||||||
|
"Привет! Я анонимный бот для связи с администрацией. "
|
||||||
|
"Просто отправьте мне сообщение, и я передам его администраторам."
|
||||||
|
)
|
||||||
|
|
||||||
|
# Обработчик команды /whereiam (только для групп)
|
||||||
|
async def get_group_id(message: types.Message):
|
||||||
|
chat_id = message.chat.id
|
||||||
|
chat_title = message.chat.title or "Беседа без названия"
|
||||||
|
await message.answer(
|
||||||
|
f"ID этой группы: `{chat_id}`\nНазвание: {chat_title}",
|
||||||
|
parse_mode="Markdown"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Регистрация обработчиков команд
|
||||||
|
def register_commands_handlers(dp: Dispatcher):
|
||||||
|
dp.register_message_handler(send_welcome, commands=["start"])
|
||||||
|
dp.register_message_handler(get_group_id, commands=["whereiam"], chat_type=[types.ChatType.GROUP, types.ChatType.SUPERGROUP])
|
||||||
50
handlers/media_handler.py
Normal file
50
handlers/media_handler.py
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
import logging
|
||||||
|
from aiogram import types
|
||||||
|
from aiogram.dispatcher import Dispatcher
|
||||||
|
from config import MODERATORS_CHAT_ID
|
||||||
|
|
||||||
|
# Логирование
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
# Обработчик медиа-сообщений
|
||||||
|
async def handle_media_message(message: types.Message):
|
||||||
|
user_id = message.from_user.id
|
||||||
|
content_type = message.content_type
|
||||||
|
|
||||||
|
logger.info(f"Получено медиа-сообщение типа {content_type} от пользователя {user_id}")
|
||||||
|
|
||||||
|
try:
|
||||||
|
if content_type == "photo":
|
||||||
|
await message.bot.send_photo(chat_id=MODERATORS_CHAT_ID, photo=message.photo[-1].file_id)
|
||||||
|
elif content_type == "video":
|
||||||
|
await message.bot.send_video(chat_id=MODERATORS_CHAT_ID, video=message.video.file_id)
|
||||||
|
elif content_type == "audio":
|
||||||
|
await message.bot.send_audio(chat_id=MODERATORS_CHAT_ID, audio=message.audio.file_id)
|
||||||
|
elif content_type == "document":
|
||||||
|
await message.bot.send_document(chat_id=MODERATORS_CHAT_ID, document=message.document.file_id)
|
||||||
|
elif content_type == "sticker":
|
||||||
|
await message.bot.send_sticker(chat_id=MODERATORS_CHAT_ID, sticker=message.sticker.file_id)
|
||||||
|
elif content_type == "voice":
|
||||||
|
await message.bot.send_voice(chat_id=MODERATORS_CHAT_ID, voice=message.voice.file_id)
|
||||||
|
elif content_type == "video_note":
|
||||||
|
await message.bot.send_video_note(chat_id=MODERATORS_CHAT_ID, video_note=message.video_note.file_id)
|
||||||
|
|
||||||
|
await message.answer("Ваше медиа-сообщение успешно отправлено администраторам!")
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Ошибка при отправке медиа-сообщения: {e}")
|
||||||
|
await message.answer("Произошла ошибка при отправке сообщения. Попробуйте позже.")
|
||||||
|
|
||||||
|
# Регистрация обработчика медиа-сообщений
|
||||||
|
def register_media_handler(dp: Dispatcher):
|
||||||
|
dp.register_message_handler(
|
||||||
|
handle_media_message,
|
||||||
|
content_types=[
|
||||||
|
types.ContentType.PHOTO,
|
||||||
|
types.ContentType.VIDEO,
|
||||||
|
types.ContentType.AUDIO,
|
||||||
|
types.ContentType.DOCUMENT,
|
||||||
|
types.ContentType.STICKER,
|
||||||
|
types.ContentType.VOICE,
|
||||||
|
types.ContentType.VIDEO_NOTE
|
||||||
|
]
|
||||||
|
)
|
||||||
28
handlers/text_handler.py
Normal file
28
handlers/text_handler.py
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
import logging
|
||||||
|
from aiogram import types
|
||||||
|
from aiogram.dispatcher import Dispatcher
|
||||||
|
from config import MODERATORS_CHAT_ID
|
||||||
|
|
||||||
|
# Логирование
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
# Обработчик текстовых сообщений
|
||||||
|
async def handle_text_message(message: types.Message):
|
||||||
|
user_id = message.from_user.id
|
||||||
|
user_message = message.text
|
||||||
|
|
||||||
|
logger.info(f"Получено текстовое сообщение от пользователя {user_id}: {user_message}")
|
||||||
|
|
||||||
|
try:
|
||||||
|
await message.bot.send_message(
|
||||||
|
chat_id=MODERATORS_CHAT_ID,
|
||||||
|
text=f"Анонимное текстовое сообщение:\n{user_message}"
|
||||||
|
)
|
||||||
|
await message.answer("Ваше сообщение успешно отправлено администраторам!")
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Ошибка при отправке сообщения: {e}")
|
||||||
|
await message.answer("Произошла ошибка при отправке сообщения. Попробуйте позже.")
|
||||||
|
|
||||||
|
# Регистрация обработчика текстовых сообщений
|
||||||
|
def register_text_handler(dp: Dispatcher):
|
||||||
|
dp.register_message_handler(handle_text_message, content_types=types.ContentTypes.TEXT)
|
||||||
102
main.py
102
main.py
@@ -1,99 +1,21 @@
|
|||||||
import os
|
|
||||||
import logging
|
import logging
|
||||||
from aiogram import Bot, Dispatcher, types
|
from aiogram import Bot, Dispatcher, executor
|
||||||
from aiogram.utils import executor
|
from config import BOT_TOKEN
|
||||||
from dotenv import load_dotenv
|
from handlers.commands import register_commands_handlers
|
||||||
|
from handlers.text_handler import register_text_handler
|
||||||
# Загрузка переменных окружения из файла .env
|
from handlers.media_handler import register_media_handler
|
||||||
load_dotenv()
|
|
||||||
|
|
||||||
# Инициализация бота и диспетчера
|
|
||||||
BOT_TOKEN = os.getenv("BOT_TOKEN")
|
|
||||||
MODERATORS_CHAT_ID = int(os.getenv("MODERATORS_CHAT_ID"))
|
|
||||||
|
|
||||||
bot = Bot(token=BOT_TOKEN)
|
|
||||||
dp = Dispatcher(bot)
|
|
||||||
|
|
||||||
# Настройка логирования
|
# Настройка логирования
|
||||||
logging.basicConfig(level=logging.INFO)
|
logging.basicConfig(level=logging.INFO)
|
||||||
|
|
||||||
# Обработчик команды /start
|
# Инициализация бота и диспетчера
|
||||||
@dp.message_handler(commands=["start"])
|
bot = Bot(token=BOT_TOKEN)
|
||||||
async def send_welcome(message: types.Message):
|
dp = Dispatcher(bot)
|
||||||
await message.answer(
|
|
||||||
"Привет! Я анонимный бот для связи с администрацией. "
|
|
||||||
"Просто отправьте мне сообщение, и я передам его администраторам."
|
|
||||||
)
|
|
||||||
|
|
||||||
# Обработчик команды /whereiam (только для групп)
|
# Регистрация обработчиков
|
||||||
@dp.message_handler(commands=["whereiam"], chat_type=[types.ChatType.GROUP, types.ChatType.SUPERGROUP])
|
register_commands_handlers(dp)
|
||||||
async def get_group_id(message: types.Message):
|
register_text_handler(dp)
|
||||||
chat_id = message.chat.id
|
register_media_handler(dp)
|
||||||
chat_title = message.chat.title or "Беседа без названия"
|
|
||||||
await message.answer(
|
|
||||||
f"ID этой группы: `{chat_id}`\nНазвание: {chat_title}",
|
|
||||||
parse_mode="Markdown"
|
|
||||||
)
|
|
||||||
|
|
||||||
# Обработчик текстовых сообщений
|
|
||||||
@dp.message_handler(content_types=types.ContentTypes.TEXT)
|
|
||||||
async def handle_text_message(message: types.Message):
|
|
||||||
user_id = message.from_user.id
|
|
||||||
user_message = message.text
|
|
||||||
|
|
||||||
# Логирование входящего сообщения
|
|
||||||
logging.info(f"Получено текстовое сообщение от пользователя {user_id}: {user_message}")
|
|
||||||
|
|
||||||
# Пересылка текстового сообщения в чат модераторов
|
|
||||||
try:
|
|
||||||
await bot.send_message(
|
|
||||||
chat_id=MODERATORS_CHAT_ID,
|
|
||||||
text=f"Анонимное текстовое сообщение:\n{user_message}"
|
|
||||||
)
|
|
||||||
await message.answer("Ваше сообщение успешно отправлено администраторам!")
|
|
||||||
except Exception as e:
|
|
||||||
logging.error(f"Ошибка при отправке сообщения: {e}")
|
|
||||||
await message.answer("Произошла ошибка при отправке сообщения. Попробуйте позже.")
|
|
||||||
|
|
||||||
# Обработчик медиа-сообщений (фото, видео, аудио, документы и т.д.)
|
|
||||||
@dp.message_handler(content_types=[
|
|
||||||
types.ContentType.PHOTO,
|
|
||||||
types.ContentType.VIDEO,
|
|
||||||
types.ContentType.AUDIO,
|
|
||||||
types.ContentType.DOCUMENT,
|
|
||||||
types.ContentType.STICKER,
|
|
||||||
types.ContentType.VOICE,
|
|
||||||
types.ContentType.VIDEO_NOTE
|
|
||||||
])
|
|
||||||
async def handle_media_message(message: types.Message):
|
|
||||||
user_id = message.from_user.id
|
|
||||||
content_type = message.content_type
|
|
||||||
|
|
||||||
# Логирование входящего сообщения
|
|
||||||
logging.info(f"Получено медиа-сообщение типа {content_type} от пользователя {user_id}")
|
|
||||||
|
|
||||||
# Пересылка медиа-сообщения в чат модераторов
|
|
||||||
try:
|
|
||||||
if content_type == "photo":
|
|
||||||
# Отправляем самую большую версию фото
|
|
||||||
await bot.send_photo(chat_id=MODERATORS_CHAT_ID, photo=message.photo[-1].file_id)
|
|
||||||
elif content_type == "video":
|
|
||||||
await bot.send_video(chat_id=MODERATORS_CHAT_ID, video=message.video.file_id)
|
|
||||||
elif content_type == "audio":
|
|
||||||
await bot.send_audio(chat_id=MODERATORS_CHAT_ID, audio=message.audio.file_id)
|
|
||||||
elif content_type == "document":
|
|
||||||
await bot.send_document(chat_id=MODERATORS_CHAT_ID, document=message.document.file_id)
|
|
||||||
elif content_type == "sticker":
|
|
||||||
await bot.send_sticker(chat_id=MODERATORS_CHAT_ID, sticker=message.sticker.file_id)
|
|
||||||
elif content_type == "voice":
|
|
||||||
await bot.send_voice(chat_id=MODERATORS_CHAT_ID, voice=message.voice.file_id)
|
|
||||||
elif content_type == "video_note":
|
|
||||||
await bot.send_video_note(chat_id=MODERATORS_CHAT_ID, video_note=message.video_note.file_id)
|
|
||||||
|
|
||||||
await message.answer("Ваше медиа-сообщение успешно отправлено администраторам!")
|
|
||||||
except Exception as e:
|
|
||||||
logging.error(f"Ошибка при отправке медиа-сообщения: {e}")
|
|
||||||
await message.answer("Произошла ошибка при отправке сообщения. Попробуйте позже.")
|
|
||||||
|
|
||||||
# Запуск бота
|
# Запуск бота
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
Reference in New Issue
Block a user