telegeram自动回复机器人脚本详情

更新时间:2025 年 05 月 16 日

telegeram创建的自动回复机器人本身不支持直接的配置自动回复功能,如果想要利用Botfather进行自动回复,需要编写脚本,本文将为大家介绍telegeram自动回复机器人变成配置,以及具体的操作方法。

1、先选好合适的开发工具和框架。

2、向Bot Father 申请一个bot token

-首先在telegeram中搜索 botfather,并和botfather开始对话:

-按下"/start"之后,botfather会回复如下信息:

telegeram自动回复机器人脚本详情

-完成了这两项后,botfather会给你bot专属的token:

-紧接着回复"/newbot"开始创建你的bot,botfather会要求你输入bot的名字和bot用户名,bot名会显示在搜索界面,而bot的username在搜索bot和添加bot入group的时候会起作用(你无法通过搜索bot名来添加bot如群组)。username必须以bot或者_bot(不区分大小写)结尾:如ABCBot,ABC_bot。

telegeram自动回复机器人脚本详情

3、搭建基础

3.1、测试你的bot账户

你可以在python中输入如下语句来获取你的bot信息:

>>> import telepot #将telepot这个模组导入到Python中来

>>> bot = telepot.Bot('***** Your Token *****') #将bot这个在程序中使用的variable和你的bot token联系起来,在之后的程序中,每当要命令bot的时候可以直接call bot的instance

>>> bot.getMe() #getMe()是一个获取bot信息的function

{'first_name': 'Jean', 'username': 'MonsieurMadeleine', 'id': 24601} #在这里你的bot的信息将以一个dictionary的形式被print出来

telegeram自动回复机器人脚本详情

3.2 接收消息

telegeram bot是无法主动向用户发送消息的(主要的目的是防止spam),所以你需要主动地通过指令以获取用户的信息:

telegeram自动回复机器人脚本详情

>>> from pprint import pprint

>>> response = bot.getUpdates()

>>> pprint(response)

[{'message': {'chat': {'first_name': 'Jean',

'id': 24601.

'type': 'private'},

'date': 1564897562.

'from': {'first_name': 'Jean', 'id': 24601},

'message_id': 104152.

'text': 'I'm a stronger man by far!'},

'update_id': 100000000}]

3.3、持续地接受消息

在telepot中,MessageLoop是一个非常方便的处理信息的方式,如下:

>>> from telepot.loop import MessageLoop #导入MessageLoop

>>> def handle(msg): #在这里定义handle来告诉MessageLoop应该如何处理Message

... pprint(msg) #simply print message

...

>>> MessageLoop(bot, handle).run_as_thread()

MessageLoop需要两个argument,一个是你已经specify token的'bot',而另一个就是告诉MessageLoop如何处理信息的'method'(在这里我们将它命名为handle,可以将此method改成任意名字,只要在定义的时候,method只接收一个argument,那就是'msg')。

'run_as_thread'在这里起到了,只要启动了你的python file,那么这个MessageLoop就会永续不断地运行下去,除非遇到特殊情况(冲突或者恶性bug等等)

3.4、快速的Glance Message

telegram中的message作为一个json object,其中包含很多重要的而且可能会在一次Bot与用户的交互中多次使用的信息,而每次通过message对应的key来访问这些信息实在是有够麻烦,对此telepot提供了glance这一功能来快速获取message中的某些重要信息。

content_type, chat_type, chat_id = telepot.glance(msg)

在这条语句之后,telepot帮你快速查看了msg中的content type, chat type和chat id并且储存在了这三个variable中,在之后的代码里可以直接通过这些variable来访问相对应的信息。

Tip:glance的功能不限于只获取这三种信息(content type, chat type和chat id)而是所有在message中存在的legal key中的信息都可以获取。

3.5向用户发送信息

在telepot中,向用户发送信息这一功能是通过bot.sendMessage() 这一function实现的,sendMessage() take in 两个arguments,一个是你希望发送的用户的chat_id,另一个是你希望发送消息的文本。

bot.sendMessage(chat_id, text)

4、编写代码实现自动回复逻辑,如下:

from telegram.ext import Updater, CommandHandler, MessageHandler, Filters

# 定义命令处理函数

def start(update, context):

update.message.reply_text('Hi! I am your auto-reply bot.')

# 定义消息处理函数

def echo(update, context):

text = update.message.text

if "hello" in text:

context.bot.send_message(chat_id=update.message.chat_id, text="Hello! How can I help you?")

# 机器人主函数

def main():

TOKEN = 'YOUR_BOT_TOKEN' # 您的Telegram Bot Token

updater = Updater(TOKEN, use_context=True)

# 获取dispatcher来注册handler

dp = updater.dispatcher

# 注册命令handler

dp.add_handler(CommandHandler("start", start))

# 注册消息handler

dp.add_handler(MessageHandler(Filters.text & ~Filters.command, echo))

# 启动机器人

updater.start_polling()

updater.idle()

if __name__ == '__main__':

main()