Приветствую, пишу бот для telegram на языке Python с использованием telebot. Хотелось бы добавить ему несколько языков помимо русского. Пытался сам обдумать логику бота, но пока у меня не получается. Создал файл конфигурации cons.py:
token = «427778629:-oWX9DXZgTX5TXi0I8e0N3s4» lang = ‘ru’ start_msg = ‘Здравствуйте, уважаемый клиент!nВас приветствует бот компании!nПожалуйста, выберите из меню то что вас интересует.’ order_menu = ‘Заказать такси’ info_menu = ‘Информация’ exit_menu = ‘Покинуть бота’
И main.py:
В моем случаи данный код работает, ну как работает 😀 приходится нажимать кнопку на «English» 2 раза и язык бота меняется, но ни только для одного пользователя как должен, и для всех остальных тоже меняется. Надеюсь на вашу помощь, благодарю за ранее.
Источник: ru.stackoverflow.com
Что Такое Chat GPT — Телеграм Бот на Python для общения с Нейросетью OpenAI
Как я Telegram бота на Go писал. Часть первая. Начало.
В этой серии заметок хотел бы немного коснуться данной темы. Серия будет включаться в себя три раздела:
- Разработка бота на Go для поиска заклинаний для Dungeon And Dragons
- Публикация бота на платформе heroku
- Добавление аналитики использования бота
Итак, начнём!
go get gopkg.in/telegram-bot-api.v4
И, наконец-то, в-пятых, написать код самого бота.
config.json
Создадим пустой Go-файл dndspellsbot.go в папке dndspellsbot. Туда же добавим конфигурационный файл config.json со следующим содержимым:
Конечно же, можно обойтись без этих усложнений и зашить токен прямо в коде бота, но в случае, если вы случайно зальетё код вашего бота в какой-то публичный репозиторий на github/bitbucket/whatever, то утечёт и токен, а это, согласитесь, неприятно. И это только сейчас у нас такой простой конфиг — в дальнейшем будут добавляться новые свойства и всё будет храниться в одном месте. Удобно, согласитесь? Получить этот токен из конфигурационного файла довольно просто стандартными средствами Go:
package main import ( «fmt» «gopkg.in/telegram-bot-api.v4» «log» «os» «encoding/json» ) type Config struct < TelegramBotToken string >func main() < file, _ := os.Open(«config.json») decoder := json.NewDecoder(file) configuration := Config<>err := decoder.Decode( log.Panic(err) >fmt.Println(configuration.TelegramBotToken) >
Теперь при добавлении в config.json новых свойств и модификации структуры Config можно получать необходимые параметры конфигурации.
ping?
В репозитории telegram-bot-api есть пример echo-бота — бота, который отвечает вам те же сообщением. Возьмём его за основу:
Какой язык программирования выбрать начинающим? (и первая практика кодирования — пишем бота)
bot, err := tgbotapi.NewBotAPI(configuration.TelegramBotToken) if err != nil < log.Panic(err) >bot.Debug = false log.Printf(«Authorized on account %s», bot.Self.UserName) u := tgbotapi.NewUpdate(0) u.Timeout = 60 updates, err := bot.GetUpdatesChan(u) if err != nil < log.Panic(err) >// В канал updates будут приходить все новые сообщения. for update := range updates < // Создав структуру — можно её отправить обратно боту msg := tgbotapi.NewMessage(update.Message.Chat.ID, update.Message.Text) msg.ReplyToMessageID = update.Message.MessageID bot.Send(msg) >
Вы уже добавила вашего бота в свой список контактов? Если нет — сейчас самое время. Теперь самое интересное — запускаем наше приложение командой go run dndspellsbot.go и пишем что-нибудь нашему боту. Если всё сделано правильно, то бот ответит вам вашим же сообщением: Однако, мы хотели не этого. Опустим подробности парсинга XML — пост не об этом (полный код можно будет найти по ссылке в конце статьи). Будем считать, что у нас есть слайс всех заклинаний и любой запрос пользователя к боту — это запрос на поиск подходящего заклинания по его имени (усложнять можно бесконечно, но на данный момент этого достаточно):
. query := update.Message.Text // Получим те заклинания, в имени которых есть искомое слово или фраза filteredSpells := Filter(spells.Spells, func(spell Spell) bool < return strings.Index(strings.ToLower(spell.Name), strings.ToLower(query)) >= 0 >) // Если не нашлось ни одного заклинания — скажем об этом пользователю if len(filteredSpells) == 0 < msg := tgbotapi.NewMessage(update.Message.Chat.ID, «No one spells matches») bot.Send(msg) >// Каждое заклинание отправляем отдельным сообщением for _, spell := range(filteredSpells) < text := «» for _, t := range(spell.Texts) < text = text + t + «n» >msg := tgbotapi.NewMessage(update.Message.Chat.ID, fmt.Sprintf(«%sn%s», spell.Name, text)) bot.Send(msg) > . // Функция фильтрации слайсов func Filter(spells []Spell, fn func(spell Spell) bool) []Spell < var filtered []Spell for _, spell := range(spells) < if fn(spell) < filtered = append(filtered, spell) >> return filtered >
Теперь, при любом запросе от пользователя, бот будет возвращать все подходящие заклинания из phb.xml . В следующей статье немного улучшим нашего бота: добавим форматирование сообщений, inline-режим и добавим пару команд. Код бота можно найти на bitbucket.
Если вам понравилась статья, то можете зайти в мой telegram-канал. В канал попадают небольшие заметки о Python, .NET, Go.
Источник: makesomecode.me
Telegram Bot на Python 3
В данной статье мы напишем telegram bot на python, который сможет отвечать на наши сообщения, взаимодействовать с нами, предлагая варианты ответов в виде кнопок и обрабатывать выбранный нами результат, выполняя команды на сервере. Взаимодействовать с Telegram Bot Api мы будем с помощью библиотеки pyTelegramBotAPI (telebot) написанной на Python.
- Создание бота
- Установка Python и библиотеки pyTelegramBotAPI
- Пишем Telegram Bot на Python
- Использование прокси в telebot
- Ответы бота на сообщения пользователя
- Клавиатура в Telegram Bot API
- InLine клавиатура
- Конечный листинг
Создание бота
Для регистрации нового бота необходимо обратиться к боту BotFather. Для этого в строке поиска наберите BotFather и в показанных результатах найдите интересующего нас бота:
Обратите внимание на его имя, изображение и знак в виде галочки, говорящий о том, что это действительно отец всех ботов.
Выберите его и в диалоговом окне напишите команду /start и бот в ответном сообщение пришлет список всех доступных команд:
Нас интересует создание нового бота, поэтому выбираем команду /newbot. Команду можно как напечатать самостоятельно, так и выбрать мышью в сообщении и она автоматически отправится:
Первым шагом нам предлагают дать имя новому боту, оно может быть произвольным. Мы назовем его PocketAdmin:
Теперь требуется указать идентификатор бота (username), он должен заканчиваться на _bot и быть уникальным в системе. Мы укажем PocketAdminTech_bot:
На этом создание бота завершено. В последнем сообщении нам пришла ссылка на нашего нового бота t.me/PocketAdminTech_bot и токен (закрашен), необходимый для взаимодействия с API.
Обязательно сохраните токен и храните его в тайне!
Установка Python и библиотеки pyTelegramBotAPI
Скачать Python можно с официального сайта (как установить пакет на Centos 8 можно ознакомиться в данной заметке) и мы не будем заострять внимание на данном вопросе.
Чтобы установить пакет pyTelegramBotAPI воспользуемся pip:
pip install pytelegrambotapi
На этом подготовительная работа завершена, приступаем непосредственно к написанию нашего бота.
Пишем Telegram Bot на Python
Так как наш бот создается в ознакомительных целях и не будет содержать много кода, то писать я его буду сразу на сервере с установленной Centos 8 используя обычный редактор nano. Создадим файл bot.py, открыв его nano:
nano bot.py
Для начала импортируем библиотеку pyTelegramBotAPI:
import telebot
Затем зададим переменную token равную нашему токену, который мы получили от BotFather для взаимодействия с Telegram Bot Api:
token = ‘ваш token api’
bot = telebot.TeleBot(token)
Далее задается декоратор. Пока наш бот будет обрабатывать только команду start:
и в ответ писать нам “Привет!”:
def start_message(message): bot.send_message(message.chat.id, ‘Привет!’)
Чтобы бот постоянно ожидал запрос от пользователя в конце пропишем:
bot.polling()
В итоге мы получим код:
python bot.py
Затем откроем нашего бота (можно найти по имени) и напишем ему команду /start:
Поздравлю с первыми словами нашего бота PocketAdmin!
Использование прокси в telebot
При запуске скрипта может появиться ошибка следующего вида:
requests.exceptions.ConnectionError: (‘Connection aborted.’, ConnectionResetError(104, ‘Connection reset by peer’))
Чтобы исправить её, можно попробовать подключиться через прокси:
Если при использовании прокси возникают ошибки, подобные: Not supported proxy scheme socks5 или Missing dependencies for SOCKS support, то необходимо установить модули:
pip install requests[socks] PySocks
Ответы бота на сообщения пользователя
Аналогично хэндлерам для команд, в telegram bot api есть возможность обрабатывать сообщения от пользователя. Для этого используется тип text. Например, мы можем запрограммировать бота отвечать на определенные фразы или слова пользователя:
Думаю тут все понятно. На слово “Привет” бот будет отвечать “Ещё раз привет!”, а на “Пока” – “Пока!”. Весь код нашего telegram bot на python теперь будет выглядеть следующим образом:
Перезапустим скрипт и пообщаемся с ботом:
Таким образом мы можем описывать различные диалоги с ботом.
Клавиатура в Telegram Bot на Python
Апи телеграма позволяет использовать свою клавиатуру, а точнее быстрые кнопки, позволяющие пользователю отправлять текст по их нажатию.
Добавим в обработчик команды /start клавиатуру с кнопками “Привет “и “Пока”:
И запустим измененный скрипт. Как только мы отправим боту команду /start у нас внизу появится наша клавиатура:
Теперь для отправки сообщений достаточно лишь нажать на соответствующую кнопку. Это очень удобно в мобильной версии телеграма.
InLine клавиатура
На мой взгляд, наиболее интересной является InLine клавиатура. Она позволяет вместе с сообщением отправлять пользователю интерактивные кнопки, например с вариантами ответов, а после их нажатия обрабатывать результат.
Давайте добавим простой вопрос от бота на команду /test:
Переменная markup объявляет новую переменную с inline keyboard, а markup.add – создает отдельную кнопку. Основные параметры при создании кнопки – text и callback_data: первый отвечает за текст на кнопке, второй – данные, которые будут переданы боту при выборе пользователем определенного варианта ответа.
Запустим скрипт и напишем /test:
Отлично, бот прислал нам варианты ответов. Но при нажатии на кнопку ничего не произойдет, т.к. мы не описали обработку результатов. Исправим это:
bot.answer_callback_quer – это всплывающее окно, которое будет показано пользователю после нажатия кнопки. А в call.data будет передано значение, которое мы указывали при создании клавиатуры в параметре callback_data. Ответим боту, выбрав один из ответов:
Отлично, все работает. Но будет лучше, если после ответа, клавиатура будет исчезать из чата. Это можно сделать добавив в конец функции query_handler следующую строку:
bot.edit_message_reply_markup(call.message.chat.id, call.message.message_id)
Это функция редактирования клавиатуры, вызванная без указания объекта клавиатуры. Теперь после ответа пользователя клавиатура будет убрана ботом: