Git python telegram bot

Как разместить телеграм бота на сервере. Хостим бота через Push в GIT

В этой статье мы рассмотрим, как развернуть телеграм бота на python в облаке. В качестве облака будем использовать облачный провайдер Amvera. Для хостинга вашего проекта вы можете выбрать любого другого провайдера с возможностью деплоя через push в GIT. Данная статья написана скорее как инструкция для пользователей Amvera.

Пишем телеграм бота

На хабре и других ресурсах можно найти много туториалов, как писать телеграм ботов, начиная от простых и заканчивая сложными, поэтому не будем сильно углубляться в этот вопрос. Возьмем готовый пример эхо бота от создателя библиотеки для работы с телеграмом python-telegram-bot.

Перед запуском необходимо

  1. В телеграме через поиск найти бот «BotFather» и запросить у него создание нового телеграм бота. Он попросит ввести название и username для бота, после чего выдаст токен.
  2. Скопировать выданный токен и вставить его в файл примера эхо бота на место слова TOKEN в функции main()
  3. Создать файл requirements.txt в котором прописать строчку:
  1. Вызвать pip install -r requirements.txt чтобы установить этот пакет. Сейчас многие подумали, почему бы просто не установить пакет через pip install python-telegram-bot ? Так тоже можно, но файл requirements.txt все равно понадобится для разворачивания в облаке, поэтому лучше сразу его создать.
  2. Проверить, что все работает, можно запустив бот локально через python3 echobot.py и потыкав созданный бот в телеграм (ссылочку на бот можно найти у BotFather).
Читайте также:  Display year in html

Запускаем в облака. Как развернуть бота на хостинге

Перейдем теперь к самой интересной части данной статьи, а именно — как захостить бота.

Регистрация в сервисе

  1. На сайте Amvera нажимаем на кнопку «Регистрация» или пользуемся прямой ссылкой cloud.amvera.ru
  2. Нажимаем на кнопку «Регистрация» в нижней части окна и заполняем последовательно все поля. После заполнения поля «Номер телефона» нажимаем на кнопку «Отправить код» и вводим код из СМС.
  3. Подтверждаем, что мы не робот, и тыкаем на большую синюю кнопку «Регистрация»
  4. Остается только подтвердить указанную почту, перейдя по ссылке в письме.

Создание проекта и размещение бота

  1. На появившейся после входа странице нажимаем на кнопку «Создать» или «Создать первый!». Страница проектов
  1. На данном шаге нам предлагают присвоить нашему проекту название и выбрать для него тариф. Лучше указывать название на английском языке, но русский также поддерживается. Может показаться, что тарифные планы предоставляют слишком мало ресурса по сравнению с VPS. Однако в VPS часть ресурсов используется операционной системой, а тут весь выделенный ресурс уходит только на развертываемое приложение. Для развертывания бота нам хватит самого простого тарифа. Стартового баланса в 1000 руб. вам хватит примерно на 3 месяца беспрерывной, бесплатной работы вашего бота 24/7. Окно создания нового проекта
  2. Сервис Amvera реализует удобный способ доставки кода в свое облако с помощью системы контроля версий git. Чтобы облако знало, что именно и как нужно запускать, требуется создать yml файл. Подробно о том, как самому составить этот файл описано в документации, однако я рекомендую воспользоваться автоматическим графическим инструментом генерации. Графический инструмент генерации .yaml файлов
    1. Выбираем окружение Python и версию.
    2. Указываем версию и путь до файла requirements.txt. Оченьважно указать все используемые в проекте пакеты в этом файле, чтобы облако смогло их скачать через pip.
    3. Указываем путь до файла, содержащего точку входа в программу (тот файл, который вы указываете интерпретатору питона, когда запускаете приложение). В нашем случае это файл echobot.py (если ваш файл находится не в корневой папке проекта, то нужно указывать путь относительно корня проекта. Если бы мой файл был в папке src, я бы указал в этом поле src/echobot.py)
    4. Если в процессе работы ваш бот собирает какие-то данные от пользователя, которые следует сохранять на диск, то их следует класть в папку data. В противном случае при перезапуске проекта все данные будут потеряны!
    5. Порт можно указать любой, так как в нашем случае он не играет никакой роли.
    6. Нажимаем на кнопку Generate YAML, после чего начинается загрузка файла amvera.yml.
  3. Скачанный файл кладем в корень нашего проекта
  4. Осталось инициализировать гит репозиторий и запушить наш проект. Как установить гит, если он ещё не установлен, описано тут.
    1. В корне нашего проекта даем команду: git init (если гит уже инициализирован в вашем проекте, то этого делать не нужно)
    2. Привязываем наш локальный гит репозиторий к удаленному репозиторию через команду, которая указана на странице проекта в amvera (имеет формат git remote add amvera https://git.amvera.ru/ваш_юзернейм/ваш_проект )
    3. Делаем git add . и git commit -m «Initial commit»
    4. И наконец-то пушим наш проект, выполняя команду git push amvera master вводя учетные данные, которые использовались при регистрации в сервисе.
  1. После того, как проект запушится в систему, на странице проекта статус поменяется на «Выполняется сборка». Проект в статусе сборки
  2. Как только проект соберется, он перейдет в стадию: «Выполняется развертывание», а после в статус «Успешно развернуто». Успешно развернутый проект
  3. Если по какой-то причине проект не развернулся, можно обратиться к логам сборки и логам приложения для отладки. Если Проект завис в статусе «Сборка» на долгое время, а логи сборки не отображаются, то стоит ещё раз проверить корректность amvera.yml файла.
Читайте также:  Hex to utf8 python

Вывод

Вот таким нехитрым способом, буквально за пять минут можно развернуть уже написанного бота в облаке. Стартовый баланс позволит работать боту, которого вы захостили, 24/7 примерно 3 месяца, а доставка обновлений через push в GIT — обновлять проект одной командой без даунтайма.

Источник

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.

A pure and modern telegram bot package for python

License

python-telegrambots/telegrambots

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

A pure and modern python package to communicate with telegram bot api.

This is an async wrapper over telegram bot api written using python ( + 3.10 ).

This package tries to be close to the bot api interface and there are almost nothing more than it. Of course the package is extendable and other features can be installed separately.

  • All objects and methods ( 6.0 ) are implemented in python using dataclass es.
  • Serialization stuff are done to convert api python objects to json-like ( dict , list ) objects and then json-string and reverse.
  • A simple and async http client is available that uses aiohttp to send requests.

This package contains no full-featured client or bound methods! there’re only some classes and a client.

This a raw wrapper! To add more functionality, you can use custom-telegrambots.

These two can be installed together ( and they should ).

All api methods are available under following namespace:

telegrambots.wrapper.types.methods
telegrambots.wrapper.types.methods

You can use our async client to make requests.

import asyncio from telegrambots.wrapper import TelegramBotsClient from telegrambots.wrapper.types.methods import SendMessage from telegrambots.wrapper.types.objects import ( InlineKeyboardButton, InlineKeyboardMarkup, ) async def main(): client = TelegramBotsClient("BOT_TOKEN") message = await client( SendMessage( 123456789, "Here is a message from python-telegrambots", reply_markup=InlineKeyboardMarkup( InlineKeyboardButton.with_url( "Repo", "https://github.com/python-telegrambots" ) ), ) ) print(message.message_id) if __name__ == "__main__": asyncio.run(main())

Everything is documented and well type hinted.

Send a file or even multiple files ( local or online ).

import asyncio from pathlib import Path from telegrambots.wrapper import TelegramBotsClient from telegrambots.wrapper.types.methods import SendMediaGroup from telegrambots.wrapper.types.objects import InputFile, InputMediaPhoto async def main(): client = TelegramBotsClient("BOT_TOKEN") file_path_1 = Path(__file__).parent.resolve().joinpath("test_photo_1.jpg") file_path_2 = Path(__file__).parent.resolve().joinpath("test_photo_2.jpg") with InputFile(file_path_1) as file: # You need to open files manually if you're using Path. with SendMediaGroup( # All sub files will be closed after this 123456789, [ InputMediaPhoto(file, "My first photo"), InputMediaPhoto(InputFile(open(file_path_2, "rb"), "test_photo_2.jpg")), # Directly open and use file. InputMediaPhoto("https://imgur.com/t/funny/MpMGFRQ"), ], ) as send_media_group: result = await client(send_media_group) print(result.__len__()) if __name__ == "__main__": asyncio.run(main())

Send multiple requests using one aiohttp.ClientSession .

import asyncio from telegrambots.wrapper import TelegramBotsClient from telegrambots.wrapper.types.methods import ( SendMessage, EditMessageText, DeleteMessage, ) async def main(): client = TelegramBotsClient("BOT_TOKEN") async with client: message = await client( SendMessage(12345678, "It's a long time that want to say . I love you.") ) edited_message = await client( EditMessageText( chat_id=message.chat.id, message_id=message.message_id, text="Oh sorry, how are you today. ", ) ) assert edited_message await client( DeleteMessage( chat_id=edited_message.chat.id, message_id=edited_message.message_id ) ) if __name__ == "__main__": asyncio.run(main())

Print things! usual way or pretty.

import asyncio from telegrambots.wrapper import TelegramBotsClient from telegrambots.wrapper.types.methods import SendMessage async def main(): client = TelegramBotsClient("BOT_TOKEN") async with client: message = await client(SendMessage(12345678, "It's Show Time.")) # let's see what we got. print(message) # Message(message_id=134, date=1651407978, chat=Chat(id=106296897, . # ---- A long story here ---- # make it more clear print(message.pretty_str()) # # "chat": # "first_name": "A̤̮ʀαՏH", # "id": 12345678, # "type": "private" # >, # "date": 1651407978, # "from": # "first_name": "TelegramBots Test", # "id": 87654321, # "is_bot": true, # "username": "TestBot" # >, # "message_id": 134, # "text": "It's Show Time." # > if __name__ == "__main__": asyncio.run(main())

Manually serialize or deserialize any object.

import json from telegrambots.wrapper.types.objects import Update from telegrambots.wrapper.serializations import serialize, deserialize json_object = """   "update_id":10000, "callback_query":  "id": "4382bfdwdsb323b2d9", "from":  "last_name":"Test Lastname", "type": "private", "id":1111111, "first_name":"Test Firstname", "username":"Testusername", "is_bot":false >, "chat_instance":"4382bfdwdsb323b2d9", "data": "Data from button callback", "inline_message_id": "1234csdbsk4839" > > """ update = deserialize(Update, json.loads(json_object)) # type of Update dict_like = json.dumps(serialize(update)) print(dict_like) # , 'chat_instance': '4382bfdwdsb323b2d9', 'inline_message_id': '1234csdbsk4839', 'data': 'Data from button callback'>>

The preview package is available at PYPI.

Источник

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