Как я могу успешно разместить своего бота Telegram, написанного на Python, в облаке (бесплатно)? - PullRequest
0 голосов
/ 05 ноября 2018

Я следовал этому руководству , чтобы создать бота Telegram на Python. В конце концов, я запустил его локально на своей машине с ngrok . Чтобы протестировать бота, я отправлял ему сообщения в Telegram, и он работал , так что это было хорошее руководство.

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

Я читал в Интернете много учебных пособий о том, как разместить безсерверного бота Telegram. Я пытался разместить его в AWS Lambda, Heroku, Google Cloud Platform и Glitch.com. Но мне все еще не удалось успешно провести его. Всегда было что-то, что мешало мне его разместить: либо мой код не был принят должным образом, учебник не был достаточно описательным, либо я не понимал что-то важное.

Когда я следовал инструкциям, мне иногда приходилось адаптировать свой код к платформе, на которой я пытался разместить бота. Я все еще не мог заставить его работать.

Что я делаю не так? Как я могу успешно разместить своего бота Telegram, написанного на Python, в облаке (бесплатно)?

Это мой код:

import requests
import os
from bottle import Bottle, response, request as bottle_request
from unidecode import unidecode

# get credentials
bot_url = os.environ['BOT_URL']


class BotChangei:


    def get_chat_id(self, data):
        chat_id = data['message']['chat']['id']
        return chat_id


    def get_message(self, data):
        message_text = data['message']['text']
        return message_text


    def send_message(self, prepared_data):
        """
        Prepared data should be json which includes at least `chat_id` and `text`
        """
        message_url = self.bot_url + 'sendMessage'
        requests.post(message_url, json=prepared_data)


class TelegramBot(BotChangei, Bottle):


    def __init__(self, *args, **kwargs):
        super(TelegramBot, self).__init__()
        self.route('/', callback=self.post_handler, method="POST")


    def is_vowel(self, letter):
        return unidecode(letter) in {'a', 'e', 'o', 'u'}


    def is_capital(self, letter):
        return unidecode(letter) in {'A', 'E', 'O', 'U'}


    def change_text_message(self, text):
        mutable_list = list(text)
        i = 0
        for letter in mutable_list:
            if self.is_vowel(letter):
                mutable_list[i] = 'i'
            elif self.is_capital(letter):
                mutable_list[i] = 'I'
            i += 1
        return "".join(mutable_list)


    def prepare_data_for_answer(self, data):
        message = self.get_message(data)
        answer = self.change_text_message(message)
        chat_id = self.get_chat_id(data)
        json_data = {
            "chat_id": chat_id,
            "text": answer,
        }

        return json_data


    def post_handler(self):
        data = bottle_request.json
        answer_data = self.prepare_data_for_answer(data)
        self.send_message(answer_data)
        return response


if __name__ == '__main__':
    app = TelegramBot()
    app.run(host='localhost', port=8080)

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Google Cloud дает вам $ 300 бесплатно при регистрации. Я не знаком с ngrok, но тогда я попробую создать облачную учетную запись Google:

  1. запуск инстанса VM 'Compute Engine'
  2. SSH в машину, установите ваши зависимости
  3. git clone (или что вы хотите сделать), чтобы получить свой проект на машине и запустите его из командной строки

Вы можете сделать то же самое с AWS EC2 (не лямбда) - просто убедитесь, что вы выбрали образ машины «бесплатного уровня» - AWS предоставляет 750 бесплатных часов экземпляров «бесплатного уровня» EC2 в месяц.

Не уверен, насколько вы знакомы с облачными вычислениями, но вам наверняка захочется взглянуть на AWS EC2 или Google Cloud 'Compute Engine'. Они позволяют вам запускать буквальный компьютер в облаке, который вы полностью контролируете. SSH, входящий в машину, обычно является делом, если вы никогда не делали этого раньше. После входа в SSH вы можете установить / запустить все, что захотите.

Инструкции SSH для AWS: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html

Для Google, после того, как вы запустите виртуальную машину, вы можете нажать «SSH» рядом с ней, и это позволит вам войти в SSH прямо в веб-браузере (с AWS вам нужно скачать закрытый ключ, используемый для запуска EC2, затем SSH с вашего локального терминала).

0 голосов
/ 05 ноября 2018

Вы можете оставить его запущенным на компьютере, который установлен у вас дома, и использовать такой сервис, как ngrok (мой любимый). Имеется бесплатный уровень, который может работать для вас.

...