gpt4 book ai didi

python - 我如何才能在云端成功托管用 Python 编写的 Telegram 机器人(免费)?

转载 作者:行者123 更新时间:2023-12-05 05:13:49 25 4
gpt4 key购买 nike

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

但是,现在我想在云端托管机器人,因为我当然不希望我的 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)

最佳答案

注册 Google Cloud 即可免费赠送 300 美元。我不熟悉 ngrok,但我会尝试创建一个谷歌云帐户:

  1. 启动“Compute Engine”虚拟机实例
  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,启动 VM 后,您可以单击它旁边的“SSH”,它将允许您在 Web 浏览器中使用 SSH(使用 AWS,您必须下载用于启动 EC2 的私钥,然后从您的本地终端 SSH 登录)。

关于python - 我如何才能在云端成功托管用 Python 编写的 Telegram 机器人(免费)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53161316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com