V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
xjp
V2EX  ›  分享创造

分享一个使用 telegram bot 创建报警工具

  •  
  •   xjp · 2018-03-11 15:35:44 +08:00 · 6546 次点击
    这是一个创建于 2443 天前的主题,其中的信息可能已经有所发展或是发生改变。

    个人的程序的报警很多人都用的 server 酱 之前我也是用这个的 个人使用的时候确实非常方便 但是因为 server 酱是基于微信公众号的 所以如果要发送个多人 或者分组发送消息 还是不是很方便 于是自己开始准备用 wepy 来做这个工具 结果发现貌似 itchat 接口被封掉了 issues 不得不寻求其他的方法

    最终找到了 telegram 不得不说 虽然是聊天工具 但是对开发者还是相当友好的 各种接口都有提供 而且提供了一个非常强大的机器人系统 可以进行各种操作 而且流程非常简单

    创建自己的机器人

    搜索BotFather 这个帐号 然后发送/start开始对话 BotFather是 telegram 的一个机器人帐号 用来管理所有用户创建的机器人 开始对话之后 会提示你进行各种操作 来创建和管理自己的机器人 设置机器人的用户名 创建完成之后会得到一个机器人 token 之后所有的操作都是使用这个 token 来做

    创建频道

    telegram 和微信不同 除了组之外还有频道的概念 频道里只有管理员可以发送消息 其他人可以订阅这个频道 接受消息 非常符合报警这个使用场景 创建完了之后设置频道的名称 并且将你的机器人设置为频道的管理员即可

    发送消息

    然后就可以测试了 用的是python-telegram-bot这个库

    from telegram import Bot
    
    bot = Bot(token = "tokenofyourtelegrambot")
    bot.send_message("@channelname", "测试内容测试内容")
    
    

    是不是简单到爆炸。。。。 然后在使用flask之类的封装一下成 http 接口简直好用到不行

    当然除了 使用 channel 外 send_message接口也是可以给普通的组或者单人聊天发送消息的 频道的名称是以@开头 如果是普通的聊天或者群聊的话参数是会话的 id 而且机器人可以接收数据和人进行交互 来进行各种操作

    我自己手动稍微搞了一下 建了个机器人 xjpin_bot 封了个 http 接口 大家感兴趣的话 可以建个频道 把这个机器人加一下管理员 然后请求 感受一下 真的非常非常非常非常方便好用

        curl -d "content=testfromtbot" http://tbot.xjp.in/@channelname
    

    然后分享下完整代码 二十行不到

    
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    from flask import Flask, request
    from telegram import Bot
    
    app = Flask(__name__)
    
    TOKEN = "xxxxxxxxx"
    bot = Bot(token = TOKEN)
    
    @app.route('/<chat_id>', methods = ["POST"])
    def alarm(chat_id):
        content = request.form["content"]
        try:
            bot.send_message(chat_id, content)
            return "ok"
        except Exception as e:
            return str(e)
    
    if __name__ == '__main__':
        app.run(port = 8000)
    
    

    另外 telegram 网站在国内并不能直接打开 桌面端要上一下梯子才能用 但是手机客户端却能直接用 所以还是非常方便的

    19 条回复    2018-03-13 13:03:04 +08:00
    creedowl
        1
    creedowl  
       2018-03-11 18:29:00 +08:00
    你确定手机没梯子能直连。。。
    cdwyd
        2
    cdwyd  
       2018-03-11 18:34:00 +08:00 via Android
    手机客户端并不能直接用(ー_ー)!!
    aheadlead
        3
    aheadlead  
       2018-03-11 18:36:37 +08:00
    头像好评… 日常其实很好看的嘛,为啥销量这么差
    haozi1986
        4
    haozi1986  
       2018-03-11 18:37:13 +08:00
    其实用 requests 就可以直接推送消息,这样可以少装一个库
    livc
        5
    livc  
       2018-03-11 19:21:38 +08:00
    看成了 xjping_bot
    xzl
        6
    xzl  
       2018-03-11 20:32:41 +08:00
    水一下,楼主的 id 吓我一跳
    xjp
        7
    xjp  
    OP
       2018-03-11 21:38:53 +08:00 via iPhone
    @creedowl @cdwyd 手机可以啊 ios 版和安卓都没有问题 但是桌面 mac 版访问不了 宽带是浙江电信 手机 4G 是中国移动
    xjp
        8
    xjp  
    OP
       2018-03-11 21:40:50 +08:00 via iPhone
    @haozi1986 对的 直接用 request 请求 telegram 的 api 也是可以的 但是我太懒 还是用第三方封装的比较方便 嘻嘻嘻
    cdwyd
        9
    cdwyd  
       2018-03-11 23:48:10 +08:00
    @xjp
    用的联通,试过几次直连没成功。
    logOo
        10
    logOo  
       2018-03-11 23:52:34 +08:00 via Android
    @xzl xjp xjb 我是看走眼了
    htfy96
        11
    htfy96  
       2018-03-11 23:55:47 +08:00
    最大的问题是 tg 是被墙的,所以服务器上还要跑代理有点麻烦(
    xjp
        12
    xjp  
    OP
       2018-03-12 00:20:52 +08:00
    @cdwyd mmmm....啊 我以为是都可以直连的 啊。。。。 原来不是。。。。
    ihciah
        13
    ihciah  
       2018-03-12 00:22:36 +08:00 via iPhone
    requests 支持 socks5,开一个$$就可以了。
    日常安利: https://github.com/ihciah/shadowsocks-with-socks-auth
    搭在国内机器上,手机只需要在 tg 里配置一个 socks 即可(已稳定运行 5 个月)。
    CloudnuY
        14
    CloudnuY  
       2018-03-12 02:40:04 +08:00
    Server 酱的推熊服务也可以一对多推送,还挺好玩的
    xmoiduts
        15
    xmoiduts  
       2018-03-12 09:32:06 +08:00 via Android
    感谢作者分享,这个包的官方例程有点迷,上来就是一堆 handler 创建回复机器人,看了这篇文章后茅塞顿开,原来直接 send_message 就行了。刚刚用框架成功创建了自己的通知通道。
    junbaor
        16
    junbaor  
       2018-03-12 17:38:00 +08:00
    用 Server 酱推到微信就可以了,国内服务器你用这玩意还要维护机器到 Telegram API 的连接稳定性
    junbaor
        17
    junbaor  
       2018-03-12 17:38:32 +08:00
    不是否定这东西的意思,各有所用,嗯~
    fakeJas0n
        18
    fakeJas0n  
       2018-03-13 11:11:44 +08:00
    服务器还要挂代理向 telegram 通信
    这就麻烦了
    GabrielChen
        19
    GabrielChen  
       2018-03-13 13:03:04 +08:00
    哇,你也逛 v 站啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6152 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 02:45 · PVG 10:45 · LAX 18:45 · JFK 21:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.