我如何在云端成功地托管我用Python编写的Telegram机器人程序(免费)



我遵循本教程在Python中创建了一个Telegram机器人。最后,我用ngrok在我的机器上本地运行了它。为了测试这个机器人,我在Telegram中向它发送了消息,它运行了,所以这是一个很好的教程。

然而,现在我想在云上托管机器人,因为我当然不想让我的电脑总是在终端运行的情况下打开。

我在网上读了很多关于如何托管无服务器Telegram机器人的教程。我尝试过在AWS Lambda、Heroku、谷歌云平台和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)

谷歌云通过注册免费为您提供300美元。我不熟悉ngrok,但我会尝试创建一个谷歌云帐户,然后:

  1. 启动"计算引擎"虚拟机实例
  2. SSH到机器中,安装您的依赖项
  3. gitclone(或您想做的任何事情(您的项目并从命令行运行

您可以使用AWS EC2(而不是lambda(进行同样的操作-只需确保您选择了一个"免费层"机器映像-AWS每月为您提供750小时的免费"免费级"EC2实例。

不确定你对云计算有多熟悉,但你肯定想看看AWS EC2或谷歌云的"计算引擎"。这些允许你在云中运行一台你完全可以控制的文字计算机。如果你以前从未做过,进入机器通常是一项"抓住"的任务。一旦你加入了SSH,你就可以安装/运行任何你想要的东西。

AWS的SSH说明:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html

对于谷歌,一旦你启动虚拟机,你可以点击它旁边的"SSH",它将允许你在网络浏览器中进行SSH(使用AWS,你必须下载用于启动EC2的私钥,然后从本地终端进行SSH(。

你可以让它在家里的机器上运行,然后使用ngrok(我最喜欢的(这样的服务。它有一个免费的层,可能对你有用。

最新更新