簡體   English   中英

如何在雲端成功(免費)托管用Python編寫的Telegram機器人?

[英]How can I successfully host my Telegram bot written in Python on the cloud (for free)?

我按照本教程創建了使用Python創建的Telegram機器人。 最后,我使用ngrok在計算機上本地運行了它。 為了測試該機器人,我通過Telegram向它發送了消息,並且該機器人可以正常工作 ,因此這是一個很好的教程。

但是,現在我想將Bot托管在雲上,因為我當然不希望在運行終端的情況下始終打開PC。

我已經在網絡上閱讀了許多有關如何托管無服務器 Telegram機器人的教程。 我曾嘗試將其托管在AWS Lambda,Heroku,Google Cloud Platform和Glitch.com中。 但是我仍然沒有成功托管它。 總是有一些原因使我無法托管它:我的代碼沒有被正確接受,本教程沒有足夠的描述性,或者我不了解重要的內容。

在學習教程時,有時我不得不將代碼調整為試圖托管該機器人的平台。我仍然無法使其正常運行。

我究竟做錯了什么? 如何在雲端成功(免費)托管用Python編寫的Telegram機器人?

這是我的代碼:

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)

您可以讓它在家里的計算機上運行,​​並使用ngrok (我最喜歡的服務)之類的服務。 它有一個免費的層,可能適合您。

Google Cloud免費為您提供$ 300的注冊費用。 我對ngrok不熟悉,但是我會嘗試創建一個Google雲帳戶:

  1. 啟動“計算引擎” VM實例
  2. SSH進入計算機,安裝依賴項
  3. git clone(或任何您想做的事情)將您的項目放到機器上並從命令行運行它

您可以對AWS EC2(而不是lambda)執行相同的操作-只需確保選擇一個“免費套餐”機器映像-AWS每月就會為您提供750個免費小時的“免費套餐” EC2實例。

不知道您對雲計算有多熟悉,但您肯定希望查看AWS EC2或Google Cloud的“計算引擎”。 這些使您可以在雲中運行完全控制的文字計算機。 如果您從未使用過SSH,則通常將其作為“陷阱”任務。 SSH登錄后,您可以安裝/運行所需的任何東西。

AWS的SSH指示信息: https : //docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html

對於Google,啟動虛擬機后,可以單擊其旁邊的“ SSH”,它將允許您直接在Web瀏覽器中進行SSH(使用AWS,您必須下載用於啟動EC2的私鑰,然后在SSH中從您的本地終端)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM