Бот для обратной связи на Python 3
Начнём как обычно с импортов зависимостей:
from aiogram import Bot, Dispatcher, executor, types from aiogram import * from aiogram.types import *
Да да, одна лишь либа aiogram. Далее пойдут константы в виде токена и айди админа которому пересылать сообщения:
TOKEN = "1111111:xxxxxxxx-xxxxxxxx" admin_id = 1111111
Далее объявление самого бота и закинем сюда же ответ на команду /start
boty = Bot(token=TOKEN) dp = Dispatcher(boty) @dp.message_handler(commands=['start']) async def process_start_command(message: types.Message): if message['from'].id == admin_id: await message.answer(f"Hi, admin") else: await message.answer(f"Привет, {message['from'].first_name}!")
Далее пойдет хэндлер для обработки текста и ответов пользователем от аккаунта администратора.
Сначала, во избежания ошибки, мы проверяем есть ли reply на сообщение, если его нет то проверяем нет ли команды /start , если её тоже нет то пересылаем сообщение админу.
Если все же это было reply на сообщение, сначала уточняем что этот reply был от админа, если это так то проверяем что там есть айди пользователя чьё сообщение админ решил реплить (reply), а затем отправляем текст юзеру на чьё сообщение админ нажал reply с текстом который ввел админ. Если же это делает пользователь то мы ему ласково говорим что ему нельзя отвечать на сообщения.
@dp.message_handler() async def process_start_command(message: types.Message): if message.reply_to_message == None: if '/start' not in message.text: await boty.forward_message(admin_id, message.from_user.id, message.message_id) else: if message['from'].id == admin_id: if message.reply_to_message.forward_from.id: await boty.send_message(message.reply_to_message.forward_from.id, message.text) else: await message.answer('Нельзя отвечать на сообщения.')
Далее пойдет обработка документов и фотографий.
@dp.message_handler(content_types=['photo']) async def handle_docs_photo(message): await boty.forward_message(admin_id, message.from_user.id, message.message_id) @dp.message_handler(content_types=['document']) async def handle_docs_photo(message): await boty.forward_message(admin_id, message.from_user.id, message.message_id)
Тут мы просто пересылаем сообщения данных типов админу. ну и наконец:
if __name__ == '__main__': print("starting") executor.start_polling(dp)
Вот и всё! а теперь полный листинг программы:
from aiogram import Bot, Dispatcher, executor, types from aiogram import * from aiogram.types import * TOKEN = "11111:xxxxxxxxxxx-xxxxxxxxx" admin_id = 11111111111 boty = Bot(token=TOKEN) dp = Dispatcher(boty) @dp.message_handler(commands=['start']) async def process_start_command(message: types.Message): if message['from'].id == admin_id: await message.answer(f"Hi, admin") else: await message.answer(f"Привет, {message['from'].first_name}!") @dp.message_handler() async def process_start_command(message: types.Message): if message.reply_to_message == None: if '/start' not in message.text: await boty.forward_message(admin_id, message.from_user.id, message.message_id) else: if message['from'].id == admin_id: if message.reply_to_message.forward_from.id: await boty.send_message(message.reply_to_message.forward_from.id, message.text) else: await message.answer('Нельзя отвечать на сообщения.') @dp.message_handler(content_types=['photo']) async def handle_docs_photo(message): await boty.forward_message(admin_id, message.from_user.id, message.message_id) @dp.message_handler(content_types=['document']) async def handle_docs_photo(message): await boty.forward_message(admin_id, message.from_user.id, message.message_id) if __name__ == '__main__': print("starting") executor.start_polling(dp)
Прошу меня простить за мой ужасный код, вы всегда можете модифицировать мой код и использовать как хотите, я не несу за это ответственности.
Телеграм канал: https://t.me/CodingCommunity