0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

在 Cloud9 上运行 Telegram Bot

Posted at

旧文新发 写于 2016-03-22 15:38:36

Telegram 是俄罗斯人开发的一款即时聊天工具, 详细的介绍请看 Rei 的 介绍Telegram.

Cloud9 是什么呢?
Cloud9 provides a development environment in the cloud that allows developers to get started with coding immediately and collaborate with their peers.

申请 Telegram Bot

添加 机器老爹-BotFather
输入指令 /newbot, 选好 nameusername 之后, 老爹会返回一串 Token:

Use this token to access the HTTP API:
161xxxx:xxxx_xxxx-xxxxxx

For a description of the Bot API, see this page: https://core.telegram.org/bots/api

Flask 运行 server

1 安装 Flask, pip install Flask, pip 类似于 gem

2 来个 hello world


from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run()

运行 python hello.py, 访问 http://localhost:5000/, 修改端口 app.run(port='xxxx')

使用 telegram python sdk

python-telegram-bot 简化开发.

代码如下, 适用于py 2.7


# coding=utf-8

import os
import logging
import telegram
import urlparse
from flask import Flask, render_template, request

HOST = "<Host>"
app = Flask(__name__)
logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')

global bot
bot = telegram.Bot(token = "<Token>")

botName = "@MustangBot"

@app.route("/", methods=["POST", "GET"])
def setWebhook():
    if request.method == "GET":
        logging.info("Hello, Telegram!")
        return "OK, Telegram Bot!"

@app.route("/set_webhook", methods=['GET'])
def setWebHook():
    result = bot.setWebhook("{}/bot_talk".format(HOST))
    if result:
        return "{} WebHook Setup OK!".format(botName)
    else:
        return "{} WebHook Setup Failed!".format(botName)

@app.route("/bot_talk", methods=["POST"])
def bot_talk():
    if request.method == "POST":
        update = telegram.Update.de_json(request.get_json(force=True))

        if update is None:
            return "Show me your TOKEN please!"
        logging.info("Calling {}".format(update.message))
        handdle_message(update.message)
        return "ok"

def handdle_message(msg):
    text = msg.text
    if "/echo" in text:
      bot.sendMessage(chat_id=msg.chat.id, text="Hello, I am a nerd")
    if "/photo" in text:
        bot.sendPhoto(chat_id=msg.chat.id, photo="<photo-url>")
    elif "/help" in text:
        helpInfo(msg)
    else:
        helpInfo(msg)

def helpInfo(msg):
    text ="""
/echo  - echo
/photo - photo
/help  - Help Info

--------------------------
在cloud9上跑了个telegram_bot
"""
    sendTxtMsg(msg, text)

########

def sendTxtMsg(msg, text):
    bot.sendMessage(chat_id=msg.chat.id, text=text)

if __name__ == "__main__":
  app.run(host=os.getenv('IP'),port=int(os.getenv('PORT')))

NOTICE

必须把应用设为 public, 获取cloud9的 IP 和 Port

os.getenv('IP')
os.getenv('PORT')

# 修改Flask
app.run(host=os.getenv('IP'), port=int(os.getenv('PORT')))

享用 Robot

访问 <cloud9-url>/set_webhook, 初始化bot, 添加机器人为好友, 发送 /echo /help /photo 试试哦.


参考:

TeleMe 是一款功能强大又方便好用的 Telegram 社群管理 Bot 机器人。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?