Telegram bot обратной связи python

Бот для обратной связи на Python для Telegram

В предыдущей статье, я рассказывал как создать «мертвого» бота, то есть мы просто получили токен, не более. Здесь я расскажу, как создать свои команды в боте и обратную связь.

Предисловие

Чтобы бот работал, необходимо установить библиотеку PyTelegramBotAPI (с предварительно установленным на ПК Python-ом) на свой компьютер. Зайдите в командую строку и выполните следующее:

cd . Далее пишем pip install pytelegrambotapi. Начнется установка.

Пишем код

Писать код буду в Sublime Text. Чтобы не заливать постоянно бота на сервер, для теста буду локально запускать его у себя на ПК.

Если вы живете в России, надо установить VPN. Для себя выбрал WindScribe, так как там дают большое количество трафика, которое обновляется каждый месяц. (Для этого надо подтвердить почту).

В папке создадим файл config.py, чтобы не захламлять наш основной файл. В config мы вынесем все значение, например токен бота и ID хозяина. Код:

token = ‘680628223:AAHf-k32Uoas41uLj1i_mznUa1wKzCJviRI’ #Даже не пытайтесь, токен сбросил ;D

owner = 468437664 #Ваш ID

Предлагаю сделать для начала очень простую команду — /ping. Она будет показывать, жив ли бот. Код:

@bot.message_handler(commands=[«ping»]) #Создаем команду

def start(message):

try: #Заворачиваем все в try

bot.send_message(message.chat.id, «PONG!» , parse_mode=»HTML») # Будет отсылать ответ

bot.send_message(config.owner, ‘Что-то пошло не так!’) #Данная система (оборачивание в try и except позволит продолжить выполнение кода, даже если будут ошибки)

Обратная связь

Обратную связь решил сделать с командой /send. Для этого, нам понадобится написать код приема и для ответа на сообщения.

Принимаем сообщения

Потребуется написать немного кода:

@bot.message_handler(content_types=[«text»])

def messages(message):

if int(message.chat.id) == config.owner:

bot.send_message(message.chat.id, ‘Сообщение от администратора было получено’)

bot.send_message(config.owner, ‘Что-то пошло не так! Бот продолжил свою работу.’ + ‘ Ошибка произошла в блоке кода:\n\n @bot.message_handler(content_types=["text"])‘, parse_mode=’HTML’)

bot.forward_message(config.owner, message.chat.id, message.message_id)

bot.send_message(message.chat.id, str(message.from_user.first_name) + ‘,’ +’ я получил сообщение и очень скоро на него отвечу :)’)

bot.send_message(config.owner, ‘Что-то пошло не так! Бот продолжил свою работу.’)

Давайте разберем это. Первый блок кода (до else) смотрит, кто ему пишет: если ID совпадает с ID, который указан в файле config , то сообщение будет присылать этому человеку (owner).

Код послу else отвечает за прием сообщений от простых пользователей. После того, как человек что-нибудь напишет, ему будет прислано сообщение об удачной отправке создателю. Вам будет переслано это сообщение

Читайте также:  Learn jsp in java

Отправка

Код для получения сообщений для сообщений от пользователей мы написали, теперь давайте сделаем команду, через которую можно будет ответить.

@bot.message_handler(commands=[‘send’])

def process_start(message):

if int(message.chat.id) == config.owner:

bot.send_message(message.chat.id, ‘Для отправки сообщения сделай реплей’)

bot.forward_message(config.owner, message.chat.id, message.message_id)

bot.register_next_step_handler(message, process_mind)

bot.send_message(message.chat.id, «Что-то пошло не так! Ошибка возникла в блоке кода:\n@bot.message_handler(commands=['send_message'])«, parse_mode=’HTML’)

bot.send_message(message.chat.id, ‘Вы не являетесь администратором для выполнения этой команды!’)

def process_mind(message):

if int(message.chat.id) == config.owner:

text = ‘Сообщение было отправлено пользователю ‘ + str(message.reply_to_message.forward_from.first_name)

bot.forward_message(message.reply_to_message.forward_from.id, config.owner, message.message_id)

bot.send_message(config.owner, text)

bot.send_message(message.chat.id, ‘Что-то пошло не так! Бот продолжил свою работу.’ + ‘ Ошибка произошла в блоке кода:\n\n def process_mind(message)‘, parse_mode=’HTML’)

bot.send_message(message.chat.id, ‘Вы не являетесь администратором для выполнения этой команды!’)

Итак, первая часть кода требует от вас написания команды /send. После этого, бот попросит вас сделать реплей на сообщение, пересланное о другого пользователя. Если вы просто так напишите сообщение, бот сообщит об ошибке. Если с реплеем, то бот скажет, что сообщение было отправлено и отправит сообщение

Полный код бота находится здесь

Если тебе понравилась статья, обязательно подпишись и поставь лайк. Остались вопросы? Смело спрашивай о них в комментариях – обязательно отвечу. 🙂

Источник

Исходник Гайд Простенький бот обратной связи TELEGRAM

Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно.
Вам необходимо обновить браузер или попробовать использовать другой.

Удалённый пользователь 439480

Гость

Привет юзеры! Не секрет что паблика БХ уже давно нет, я его удалил, но остались наработки бота обратной связи , которого мы юзали. Скажу честно — бот откровенная копипаста со всего инета, часть оттуда, часть оттуда и получилось то, что я называю «нашим».

from aiogram import Bot, Dispatcher, executor, types from aiogram import * from aiogram.types import * TOKEN = "0123456789:ABCDEFGanTOWLx9fJqvX2HR7iaekvyHVWYZ" # Токен бота admin_id = 1231231231 # ИД админа (узнать можно в боте @username_to_id_bot ) 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"Привет ! Если у тебя есть предложение, скриптик, новость или идея - напиши мне!") # пишет всем, кто не админ @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) await message.answer('Спасибо за сообщение! Я уже передал админам паблика эту инфу!') 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) await message.answer('Спасибо что с нами! Передал админам паблика!') @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) await message.answer('Файлик? Спасибо, передал админам паблика)') if __name__ == '__main__': print("starting") executor.start_polling(dp)

Объясню что да как для мега-чайников:

Читайте также:  Принцип работы spring java

1) Ставите лайк на теме и подписываетесь на чапо, армора, фипа, криптона и рвнг.
2) Копируете код
3) Вставляете себе
4) Берете токен своего бота и вставляете в 5-ю строчку.
5) Берете свой ид с @username_to_id_bot и вставляете в 6-ю строку.
6) В консоли пишем:
pip install aiogram
pip install asyncio
7) Корректируете под себя бота и запускаете!
8) Вуа-ля! Все работает!

Если хотите что бы бот работал вечно — нужно задеплоить его на хост. Как пример — бесплатный хероку. Видео с подробным деплойтом есть у хауди хо.

Критика не принимается , просто потому что это откровенная копипаста бота , просто с моими наработками. Гайд предназначен для » самых маленьких программистов «, поэтому идите ; заядлые программисты-критики =3

Источник

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

Пример бота обратной связи без использования БД: https://t.me/Groosha_bot

License

MasterGroosha/telegram-feedback-bot

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Когда-то давно в Telegram все пересланные сообщения содержали информацию об авторе, в частности, ID. Благодаря этому можно было легко делать ботов для обратной связи, когда юзер пишет боту, а автор бота через него отвечает. К сожалению, в марте 2019 года всё изменилось и пересланные сообщения от некоторых людей потеряли информацию об отправителях.

Читайте также:  Граница формы в html

Для решения этой проблемы разработчики ботов стали сохранять ID авторов сообщений на стороне бота, а затем провязывать эти айдишники, но я лично считаю такой подход избыточным, т.к. такие данные, по сути, должны храниться вечно (мало ли, на какое сообщение вы решите ответить). В результате появился этот бот. Из плюсов: элементарно контейнеризируется, поскольку хранит всё в оперативной памяти (например, списки блокировок). Из минусов: поддерживает только те сообщения от пользователей, где можно добавлять подпись или редактировать текст, не поддерживает возможность сделать «ответ» (reply) на сообщение (в теории, решаемо) и не позволяет корректно реагировать на редактирование сообщений. Лично меня устраивает такой расклад.

Сообщения от пользователей копируются методом copyMessage в чат к админу (или админам) с добавлением ID пользователя в виде хэштега, например, #id1234567, к тексту или подписи к медиафайлу. Когда администратор отвечает на сообщение, этот хэштег извлекается, парсится и используется в качестве получателя.

Как переписку видит пользователь:

Как переписку видит пользователь

В свою очередь, администратор видит так (и может пользоваться расширенным набором команд):

Как переписку видит администратор

  1. Python 3.9 и выше (не нужно при запуске с Docker);
  2. Linux (должно работать на Windows, но могут быть сложности с установкой);
  3. Systemd (для запуска через systemd);
  4. Docker (для запуска с Docker). Старые версии Docker требуют отдельно docker-compose.

Просто потестировать (не рекомендуется)

  1. Клонируйте репозиторий;
  2. Перейдите ( cd ) в склонированный каталог и создайте виртуальное окружение Python (Virtual environment, venv);
  3. Активируйте venv и установите все зависимости из requirements.txt ;
  4. Скопируйте env_example под именем .env (с точкой в начале), откройте его и заполните переменные;
  5. Внутри активированного venv: python -m bot .
  1. Выполните шаги 1-4 из раздела «просто потестировать» выше;
  2. Скопируйте feedback-bot.example.service в feedback-bot.service , откройте и отредактируйте переменные WorkingDirectory и ExecStart ;
  3. Скопируйте (или создайте симлинк) файла службы в каталог /etc/systemd/system/ ;
  4. Активируйте сервис и запустите его: sudo systemctl enable feedback-bot —now ;
  5. Проверьте, что сервис запустился: systemctcl status feedback-bot (можно без root-прав).
  1. Возьмите файл docker-compose.example.yml из репозитория и переименуйте как docker-compose.yml ;
  2. Возьмите файл env_example там же, переименуйте как .env (с точкой в начале), откройте и заполните переменные;
  3. Запустите бота: docker compose up -d (или docker-compose up -d на старых версиях Docker);
  4. Проверьте, что контейнер поднялся: docker compose ps

Если вы хотите изменить тексты в боте, ознакомьтесь с информацией в Wiki. В настоящий момент поддерживается только изменение текстов сообщений, но не описаний в меню команд

Папку bot/locales в случае с развертыванием бота в Docker можно переопределить, подсунув её снаружи как volume.

Источник

Оцените статью