自建Telegram机器人/TG bot实现消息推送

之前一直用 server 酱配合微信实现消息推送,但是最近微信开始收紧,后期有无法使用的可能。于是在找替代品,常见的就是自建了,比如 iOS 平台使用 bark,安卓上的 gotify,更小众的有小米用自带的 mipush 等。但是用起来都需要自建服务,或者面临复杂的编写环境。一个合适的替代品是 telegram bot,支持多种语言,既操作简便又功能众多尤其是在 python 平台上,如果只想达到类似 server 酱的功能,那直接 post 即可。

以下使用 python3 环境为例,保姆级教程,从 bot 的申请到 python 脚本的 systemctl 配置都有。

 

申请 telegram bot

  1. 打开 bot 的生成链接 https://t.me/botfather (生成 bot 的地方叫 bot 之父而不是之母,可能预示了设计者是个俄罗斯人)。
  2. 点击 /newbot – create a new bot 生成新一个的 bot,系统会让你给它取一个名字,这里可以随便输入,反正方便记就可以了。
  3. 系统会再次让你取一个名字并输入,现在的名字必须以 bot 结尾,不可以和其他任何 bot 重名。这一步的名字类似于身份证号码,而前一布的名字类似于身份证上面的名字。身份证上的名字可以重复,但是身份证号码不允许重复。
  4. 一旦你输入的 bot 名字可用,系统会生成一个 token 给你,类似于 1689581149:AAGYVVjEHsaNjsnT8eQpWyshwr2o4PqU7u8,请务必保存好此 token 并且不泄露,这是唯一的用户凭证。
  5. 此时,你拥有了一个 bot,但是还无法使用,因为你知道它,它不知道你。这时候打开 https://t.me/iamthebot 这个链接,注意 iamthebot 为你刚才新建的 bot 的名字!点击 /start 进入对话框,发送 @userinfobot 后并点击它。userinfobot 的对话中,点击或者输入 /start,你将获取一个 Id/chat_id,具体表现为一串数字,比如 387980691。

至此,电报的机器人已经申请完成,你获得了机器人的 bot 名字,一个 token,还有一个 chat_id

 

python3 程序实现消息推送

  1. 电报机器人的功能众多,所以配置起来很复杂,好在我们只需要使用消息推送,所以选择使用 python3 和 pyTelegramBotAPI 来实现,程序写起来会很简单。
  2. 安装 pyTelegramBotAPI 方式为 pip3 install pyTelegramBotAPI,如果提示没有 pip 或者 pip3,请自行安装,每个 linux 系统可能都会有少许的差异,具体请百度 / 谷歌 / 必应 / 问别人都行,反正装上去就行了。
  3. 实例程序如下,其中 TOKEN 为你申请得到的 token,tb.send_message 中的数字为从 userinfobot 那里拿到的 ID/chat_id,text 为想要推送的消息。
import telebot
 
TOKEN = '1689581149:AAGYVVjEHsaNjsnT8eQpWyshwr2o4PqU7u8'
tb = telebot.TeleBot(TOKEN)
text = "I am the first telegram bot notification"
tb.send_message(387980691, text)

 

至此,运行这个 python3 程序,一个简单的消息推送已经实现了,你会在和这个机器人的对话框中收到机器人发送给你的消息。

 

电报机器人的实际使用案例

在树莓派上装了一个光敏传感器,用来判断是否有人开灯。每 10 秒检查一次光敏传感器的状态,如果发生开灯或者关灯动作,那就通过电报器人发送消息给我。程序依旧是 python3 和 pyTelegramBotAPI 配合,引入了 GPIO 读取光敏传感器反馈的状态,同时使用 systemctl 实现开机自启。能看到这一步或者有类似需求的,大概多少懂点程序和 linux 基础,我直接放出源码以供参考。

 

以下为主程序,为 GPIO 读取光敏传感器状态,以及电报机器人的消息推送部分。

#!/usr/bin/env python3
 
import RPi.GPIO as GPIO
import telebot
import time
 
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.IN)
 
TOKEN = '1689581149:AAGYVVjEHsaNjsnT8eQpWyshwr2o4PqU7u8'
tb = telebot.TeleBot(TOKEN)
 
# 0 is OFF
VALUE = 0
 
try:
    while True:
        nowtime=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
        if GPIO.input(17):
            if VALUE == 0:
                pass
            else:
                VALUE = 0
                text = "OFF!" + nowtime
                tb.send_message(387980691, text)
        else:
            if VALUE == 1:
                pass
            else:
                VALUE = 1
                text = "ON!" + nowtime
                tb.send_message(387980691, text)
        time.sleep(10)
except:
    text = "ERROR!"
    tb.send_message(387980691, text)

 

以下为 systemctl 的 service 配置文件,我习惯性放入 /etc/systemd/system 中,并将上述 python 程序放入 /etc/lightelebot 文件夹中。

[Unit]
Description=Light Sensor Service
After=multi-user.target
[Service]
WorkingDirectory=/etc/lightelebot
User=root
Type=idle
ExecStart=/usr/bin/python3 /etc/lightelebot/lightelebot.py
Restart=always
[Install]
WantedBy=multi-user.target

正文完
 
admin
版权声明:本文于2023-02-16转载自MJJ,共计2755字。
转载提示:此文章非本站原创文章,若需转载请联系原作者获得转载授权。