使用 Python 编写 Telegram-Bot

请各位先看看代码部分,其实结构蛮清晰的。

如果还有兴趣,可以到博客,主要比这里多了注册和配置 Bot 的内容: Telegram-Bot 的注册和使用 Python 编写 机器人 - 承飞之咎 (vfly2.com)

没兴趣就划过吧。


顺便,tg 转发机器人 更新通知:

  1. 详细的 【部署流程】之 Telegram 转发机器人 ,流程清晰,然而原生部署,相当长。
  2. 添加了自定义路径 功能,只是还没上传代码
  3. Docker 版安装在月底推出

原文: 自荐一个 tg 转发机器人,也是一个利用网页记事本的例子 (nodeseek.com)

用浏览器直接查看(webhook)

Telegram 的 API 接口形式是 URL,它和我们平常使用的网址是类似的。

可以将以下的 URL 复制在浏览器的网址栏中,将 Your Token 替换为实际的 Token,然后访问:

https://api.telegram.org/botYour Token/getupdates

# 就比如,这样
https://api.telegram.org/bot6111111110:AAxxxxxxxxxxxxxx9iGxxLa_atxxxxxxuNU/getupdates

向 bot 发送一条消息之后,刷新浏览器,你会得到以下类似下面的 Message:

{'chat': {'first_name': 'Jean',
          'id': 24601,
          'last_name': 'Valjean',
          'type': 'private',
          'username': 'MonsierMadeleine'},
 'date': 17691833,
 'from': {'first_name': 'Jean',
          'id': 24601,
          'is_bot': False,
          'last_name': 'Valjean',
          'username': 'MonsierMadeleine'},
 'message_id': 7417,
 'text': 'I am warning you Javert'}

python-telegram-bot

选一种编程语言,和封装 API 的库,方便开发。

这里使用 Python ,库使用 python-telegram-bot ,方便快速操作官方 API,其相关网站如下:

  • GitHub 地址:  https://github.com/python-telegram-bot/python-telegram-bot

推荐创建三个文件,比如 extract_forward_tgbot.pytgbotBehavior.py ,前一个用来 设置路由和注册以启动路由,后一个放具体的函数(定义机器人动作)。

还有 config.py ,用来配置 token 等配置信息的。

流程图来了!

实际编写

我是看这个库 wiki 入门的: Extensions Your first Bot (github.com)

可以看一遍下面 AhFei 写的小例子,起码是中文,好理解一些。再看官方 wiki ,其实更多的也没必要写,官方的文档才是最好的参考。

这个例子只需要填入 bot_token ,剩下的完全复制粘贴就能运行(如果是国内网络,还需要配置代理地址)。

推荐有兴趣的可以先跑一遍,成功的话再修改。


先拉库(Python 3.7 )

pip3 install python-telegram-bot~=20.3

先看 config.py ,配置 bot_token ,还有代理地址即可。

# config.py
import platform
from enum import Enum
import os
import sys


# 将参数值赋给变量
bot_token = "6111111110:AAxxxxxxxxxxxxxx9iGxxLa_atxxxxxxuNU"


# 下面跟机器人没什么关系,主要作用方便开发,如果在 Windows ,则说明是开发环境,配置代理和修改一些变量的值,如果是 Linux,就是生产环境

system = platform.system()  # 获取操作系统名字

if system == 'Windows':
    # 处于开发环境
    os.environ["http_proxy"] = "http://127.0.0.1:10809"
    os.environ["https_proxy"] = "http://127.0.0.1:10809"
elif system == 'Linux':
    # 处于生产环境
    pass
else:
    # 直接退出
    sys.exit('Unknown system.')

再看 extract_forward_tgbot.py ,这里就导入三个动作,start, myid, transfer ,并配置路由,也就是

  1. 机器人收到 '/start' 后,就执行 start 函数
  2. 机器人收到 '/myid' 后,就执行 myid 函数
  3. 机器人收到指令之外的内容,就执行 transfer 函数

暂时从我的项目,转发机器人里抽出来的代码,以后有空改成简单又有实际应用的具体例子。

这个是我们的主程序,需要 python3 extract_forward_tgbot.py 启动程序。

# extract_forward_tgbot.py

from telegram import Update   # 获取消息队列的
from telegram.ext import filters, MessageHandler, ApplicationBuilder, CommandHandler,  ContextTypes

import config
# 从 tgbotBehavior.py 导入定义机器人动作的函数
from tgbotBehavior import start, transfer, myid

  
if __name__ == '__main__':  
    # 创建实例的,在这里放入 token
    application = ApplicationBuilder().token(config.bot_token).build()  
  
    # 类似路由,接收到 /start 执行哪个函数,左边是指令,右边是定义动作的函数
    start_handler = CommandHandler('start', start)  
    #   (~filters.COMMAND)  就是指令之外的消息
    transfer_handler = MessageHandler((~filters.COMMAND), transfer)  
    #   
    myid_handler = CommandHandler('myid', myid)  

  
    # 注册 start_handler ,以便调度  
    application.add_handler(start_handler)  
    application.add_handler(transfer_handler)  
    application.add_handler(myid_handler)  
  
    # 启动,直到按 Ctrl-C
    application.run_polling(allowed_updates=Update.ALL_TYPES)

最后看 tgbotBehavior.py ,就是定义机器人的各种动作。

# tgbotBehavior.py

from telegram import Update  
from telegram.ext import ContextTypes  

import config  


# 回复固定内容  
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):  
    # 定义一些行为
    
    # 向发来 /start 的用户发送消息
    await context.bot.send_message(chat_id=update.effective_chat.id,  
                                   text=f"这是一个转存机器人")  


# 返回 ID
async def myid(update: Update, context: ContextTypes.DEFAULT_TYPE):  
    # update.effective_chat.id  可以就是与机器人交流的用户的 chat id
    your_chat_id = update.effective_chat.id  

    await context.bot.send_message(chat_id=update.effective_chat.id, text=f'你的 chat id 是 {your_chat_id}')  


async def transfer(update: Update, context: ContextTypes.DEFAULT_TYPE):  
    # 定义一些行为
    # 省略
    pass

运行主程序后,

  • 发送 /start ,就会收到“这是一个转存机器人”,
  • 发送 /myid,就会收到“你的 chat id 是 123456789”
  • 其他信息则没有任何回应

其实结构蛮清晰的,先编写定义动作的函数,再配置路由和使能。
参考文档就能编写出功能丰富的机器人啦!


原文链接: https://blog.vfly2.com/2023/08/register-telegram-bot-and-build-a-bot-using-python/

版权声明:本博客所有文章除特別声明外,均为 AhFei 原创,采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 承飞之咎 (blog.vfly2.com)

点赞
  1. Stardust说道:

    技术贴支持,mark.

  2. 墨鱼说道:

    这个可以

  3. speculari说道:

    滋兹

发表回复

电子邮件地址不会被公开。必填项已用 * 标注

×
订阅图标按钮