python电报bot api。

pyTelegramBotA的Python项目详细描述


pytelegrambotapi

一个简单但可扩展的python实现,用于telegram bot api

下载月份构建状态

开始。

这个api是用python 2.6、python2.7、python 3.4、pypy和pypy3测试的。 安装库有两种方法:

  • 使用pip(python包管理器)安装)*:
$ pip install pyTelegramBotAPI
  • 从源安装(需要git):
$ git clone https://github.com/eternnoir/pyTelegramBotAPI.git
$ cd pyTelegramBotAPI
$ python setup.py install

一般建议使用第一个选项。

*虽然api已经准备好生产,但它仍在开发中,并且有定期更新,不要忘记通过调用pip install pytelegrambotapi--upgrade定期更新它

编写第一个机器人程序

先决条件

假设您已使用@botfather获得api令牌。我们将此令牌称为令牌。 此外,您还具备python编程语言的基本知识,更重要的是,telegrAM BOT API

一个简单的回声机器人

telebot类(在init.py中定义)将所有api调用封装在一个类中。它提供发送xyz发送消息发送文档等)等功能,并提供多种方式来监听传入消息。

创建一个名为echo\u bot.py的文件。 然后,打开文件并创建telebot类的实例。

importtelebotbot=telebot.TeleBot("TOKEN")

注意:请确保用您自己的API令牌实际替换令牌。

在声明之后,我们需要注册一些所谓的消息处理程序。消息处理程序定义消息必须传递的筛选器。如果消息通过筛选器,则调用修饰函数,并将传入消息作为参数传递。

让我们定义一个消息处理程序,它处理传入的/start/help命令。

@bot.message_handler(commands=['start','help'])defsend_welcome(message):bot.reply_to(message,"Howdy, how are you doing?")

由消息处理程序修饰的函数可以有任意名称,但是它必须只有一个参数(消息)

让我们添加另一个处理程序:

@bot.message_handler(func=lambdam:True)defecho_all(message):bot.reply_to(message,message.text)

这一个将所有传入的文本消息回传给发件人。它使用lambda函数来测试消息。如果lambda返回true,则消息由修饰函数处理。由于我们希望此函数处理所有消息,因此只需返回true即可。

注意:所有处理程序都按照声明的顺序进行测试

我们现在有了一个基本的bot,它可以回复一条静态消息到"/start"和"/help"命令,并回显其余发送的消息。要启动bot,请将以下内容添加到源文件中:

bot.polling()

好了,就这样!我们的源文件现在如下:

importtelebotbot=telebot.TeleBot("TOKEN")@bot.message_handler(commands=['start','help'])defsend_welcome(message):bot.reply_to(message,"Howdy, how are you doing?")@bot.message_handler(func=lambdamessage:True)defecho_all(message):bot.reply_to(message,message.text)bot.polling()

要启动bot,只需打开一个终端并输入python echo_bot.py即可运行bot!通过发送命令('/start'和'/help')和任意文本消息进行测试。

一般API文档

类型

所有类型都在types.py中定义。除了消息的from字段被重命名为from(因为from是python reserv)之外,它们都完全符合消息api对类型的定义(因为from是python reserv)令牌)。因此,可以使用message.message\u id直接访问message\u id等属性。请注意,message.chat可以是usergroupchat的一个实例(请参见如何区分用户和groupchat-in-message.chat?

消息对象还有一个content_type属性,该属性定义消息的类型。内容类型可以是以下字符串之一: 文本音频文档照片贴纸视频视频注释语音位置联系新聊天室成员左聊天室成员新聊天室标题新建聊天室照片删除聊天室照片创建群聊天室创建超级群聊天室创建频道聊天室将聊天室ID迁移到聊天室ID从聊天室ID迁移到聊天室ID固定消息

可以在一个函数中使用某些类型。例子:

内容类型=["文本"、"贴纸"、"固定信息"、"照片"、"音频"]

方法

所有api方法都位于telebot类中。它们被重命名以遵循常见的python命名约定。例如,get me被重命名为getmesend messagesend消息

API的一般用途

概述如下e API的一些通用用例。

消息处理程序

消息处理程序是用telebot实例的消息处理程序装饰器装饰的函数。消息处理程序由一个或多个筛选器组成。 为了使消息处理程序有资格处理某个消息,每个过滤器都会返回true。消息处理程序的声明方式如下(只要bot是telebot的一个实例):

@bot.message_handler(filters)deffunction_name(message):bot.reply_to(message,"This is a message handler")

函数名不受任何限制。消息处理程序允许使用任何函数名。函数最多只能接受一个参数,这将是函数必须处理的消息。 过滤器是关键字参数的列表。 过滤器的声明方式如下:name=argument。一个处理程序可能有多个筛选器。 Telebot支持以下过滤器:

<表><广告>名称参数 条件 < /广告><正文>内容类型 字符串列表(默认值['text']true如果message.content\u类型在字符串列表中。正则表达式作为字符串的正则表达式trueifre.search(regexp_arg)返回truemessage.content_type='文本'(请参见
python正则表达式命令 字符串列表true如果message.content\u type=='text'message.text以字符串列表中的命令开头。功能 函数(lambda或函数引用)true如果lambda或函数引用返回true

下面是使用筛选器和消息处理程序的一些示例:

importtelebotbot=telebot.TeleBot("TOKEN")# Handles all text messages that contains the commands '/start' or '/help'.@bot.message_handler(commands=['start','help'])defhandle_start_help(message):pass# Handles all sent documents and audio files@bot.message_handler(content_types=['document','audio'])defhandle_docs_audio(message):pass# Handles all text messages that match the regular expression@bot.message_handler(regexp="SOME_REGEXP")defhandle_message(message):pass#Handles all messages for which the lambda returns True@bot.message_handler(func=lambdamessage:message.document.mime_type=='text/plain',content_types=['document'])defhandle_text_doc(message):pass#Which could also be defined as:deftest_message(message):returnmessage.document.mime_type=='text/plain'@bot.message_handler(func=test_message,content_types=['document'])defhandle_text_doc(message)pass# Handlers can be stacked to create a function which will be called if either message_handler is eligible# This handler will be called if the message starts with '/hello' OR is some emoji@bot.message_handler(commands=['hello'])@bot.message_handler(func=lambdamsg:msg.text.encode("utf-8")==SOME_FANCY_EMOJI)defsend_something(message):pass

重要提示:所有处理程序都按照声明的顺序进行测试

编辑的消息处理程序

与消息处理程序相同

频道后处理器

与消息处理程序相同

编辑的频道后处理程序

与消息处理程序相同

回调查询处理程序

在Bot2.0更新中。您可以在update对象中获得回调查询。在Telebot中,使用回调查询处理程序来处理回调查询。

$ pip install pyTelegramBotAPI
0

遥控机器人

$ pip install pyTelegramBotAPI
1

回复标记

telebot的所有发送xyz函数都采用可选的回复标记参数。此参数必须是在types.py中定义的replykeyboardmarkupreplykeyboardremoveforcereply的实例。

$ pip install pyTelegramBotAPI
2

最后一个示例生成此结果:

replykeyboardmarkup

$ pip install pyTelegramBotAPI
3
$ pip install pyTelegramBotAPI
4

强制回复:

forcereply

内联模式

有关内联模式的更多信息。

内联处理器

现在,您可以使用inline_handler在telebot中获取inline_查询。

$ pip install pyTelegramBotAPI
5

选定的嵌入式处理器

使用selected_inline_handler在telebot中获取selected_inline_结果。别忘了添加/setinlinefeedback @botfather的命令。

更多信息:收集反馈

$ pip install pyTelegramBotAPI
6

回答内嵌查询

$ pip install pyTelegramBotAPI
7

使用实体:

此对象表示文本消息中的一个特殊实体。例如,标签、用户名、url等。 属性:

  • 键入
  • url
  • 偏移量
  • 长度
  • 用户

下面是一个示例:消息.实体[num].<;属性>;
这里num是回复中实体的编号或顺序,因为如果回复/消息中有多个实体。
message.entities返回实体对象列表。< BR>消息.实体[0].type将给出第一个实体的类型
有关更多详细信息,请参阅bot api

API的高级使用

消息的异步传递

有一个telebot的实现,它异步执行所有的send xyzget me函数。这会大大加快您的速度,但如果不小心使用,会产生不必要的副作用。 要启用此行为,请创建AsyncTelebot而不是Telebot的实例。

$ pip install pyTelegramBotAPI
8

现在,调用电报api的每个函数都在一个单独的线程中执行。修改这些函数以返回asynctask实例(在util.py中定义)。使用AsyncTelebot可以执行以下操作:

$ pip install pyTelegramBotAPI
9

注意:如果在不调用wait()的情况下在每个节点后执行send xyz函数,则消息传递的顺序可能是错误的。

发送大文本消息

有时您必须发送超过5000个字符的消息。电报api不能处理一个请求中的那么多字符,所以我们需要将消息分成多个部分。下面是如何使用api实现这一点:

$ git clone https://github.com/eternnoir/pyTelegramBotAPI.git
$ cd pyTelegramBotAPI
$ python setup.py install
0

控制telebot使用的线程数

telebot构造函数接受以下可选参数:

  • 线程:true/false(默认为true)。指示是否 telebot应该在其轮询线程上执行消息处理程序。

监听机制

作为消息处理程序的替代,还可以将函数注册为telebot的侦听器。例子:

$ git clone https://github.com/eternnoir/pyTelegramBotAPI.git
$ cd pyTelegramBotAPI
$ python setup.py install
1

使用网络挂钩

当使用webhooks电报时,每次呼叫发送一个更新,为了处理它,当您收到新的消息时,您应该调用process_messages([update.message])。

examples/webhook_examples目录中有一些使用webhook的示例。

日志记录

您可以使用telebot模块记录器记录有关telebot的调试信息。使用telebot.logger获取telebot模块的记录器。 可以向记录器添加自定义日志记录处理程序。有关更多信息,请参阅python日志模块页。

$ git clone https://github.com/eternnoir/pyTelegramBotAPI.git
$ cd pyTelegramBotAPI
$ python setup.py install
2

代理

您可以使用代理请求。apihelper.proxy对象将通过调用使用requestsproxies参数。

$ git clone https://github.com/eternnoir/pyTelegramBotAPI.git
$ cd pyTelegramBotAPI
$ python setup.py install
3

如果要使用Socket5代理,则需要安装依赖项pip install requests[socks]并确保您拥有最新版本的gunicornpysockspytelegrambotapi请求urllib3

$ git clone https://github.com/eternnoir/pyTelegramBotAPI.git
$ cd pyTelegramBotAPI
$ python setup.py install
4

F.A.Q.

机器人2.0

2016年4月9日,Telegram发布了新的Bot 2.0 API,该API有了一个重大的修订,特别是在方法接口的更改方面。如果您想更新到最新版本,请确保您已经将Bot的代码切换到Bot 2.0方法接口。

有关pytelegrambotapi支持bot2.0的更多信息

如何在message.chat中区分用户和群聊?

电报机器人API SU为消息支持新类型的聊天。聊天。

  • 检查chat中的type属性
$ git clone https://github.com/eternnoir/pyTelegramBotAPI.git
$ cd pyTelegramBotAPI
$ python setup.py install
5

电报聊天组

寻求帮助。讨论。聊天,

  • 加入pytelegrambotapi telegram聊天组
  • 我们现在也有电报频道了!随时了解API更改的最新情况,并加入它

更多示例

使用此API的机器人程序

想把你的机器人列在这里吗?向@eternnoir或@pevdh发送电报信息。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在SQL Server中使用TDE加密?   java如何从数学上证明Nginx平滑权重负载平衡算法?   Java将LinkedList插入现有LinkedList   每当我使用imageview时,java Android应用程序就会崩溃,而且该图标在Nexus AVD上不起作用   java如何将活动链接到菜单并访问它们   java根据第一个单词的长度反转字符串   java设置Neo4j缓存   java配置单元表在Spark 2.1.1中不可见   使用Selenium(Java),当下拉列表元素具有有限的可识别属性时,如何从下拉列表中选择值?   java能否使内部类的方法只能由外部类访问?   游戏引擎Java隐藏方法   JavaSQLLite平均分数   derby Java SQL异常无效游标状态无当前行   java如何处理相互依赖的JUnit测试?   在Java中重载和重写静态和非静态方法   排序如何在Java中按一列对二维数组进行排序   考虑到成本和性能,使用AWS调度器的最佳方法是什么   c#CRC643F46942D9DD1FF9。FormsSeekBar。设置按下的窗体seekbar。java,第63行java。互操作。JavaLocationException:在xamarin中抛出。形式   在Selenium 3 Java中启动Firefox线程本地驱动程序