美文网首页
在Cloud9 上运行 Telegram Bot

在Cloud9 上运行 Telegram Bot

作者: 已不再更新_转移到qiita | 来源:发表于2017-12-22 15:39 被阅读89次

    旧文新发 写于 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 试试哦.

    相关文章

      网友评论

          本文标题:在Cloud9 上运行 Telegram Bot

          本文链接:https://www.haomeiwen.com/subject/qkqxgxtx.html