naftali100/async_bot

异步电报机器人库

v2.1.8 2023-10-06 12:29 UTC

README

simple flexible and async library based on amphp for telegram bot api.

注意:这是一个旧项目,编写得很差。我不推荐使用它。

安装

  • 运行 composer require naftali100/async_bot

入门

server.php

require_once './vendor/autoload.php';

use bot_lib\Server; 

$server = new Server("127.0.0.1:8080"); // create server instance listening to port 8080
$server->load_file("bot.php"); // load the handlers in "bot.php" and store them in "bot.php" path
$server->load_file("bot1.php", "index"); // you can add second param for different path
$server->load_folder("folder", true); // load all files in a folder. the second param is whether to load recursively or not
$server->run();

bot.php

require_once './vendor/autoload.php';

use bot_lib\Config;
use bot_lib\Handler;
use bot_lib\Update;
use bot_lib\Filter;

$config = new Config;
$config->load("conf.json"); // can store token
$config->server_url = "http://loadlhost:8081/bot"; // if you using local telegram-bot-api

$handler = new Handler;
$handler->on_message(
    fn(Update $u) => $u->reply("hello"),
    Filter::Message('/start')
);

将 webhook 设置为 127.0.0.1:8080/you_bot_file_name.php(或通过传递给 load_file 的第二个参数的自定义名称)。

你可以在 webhook URL 中添加 token 参数,服务器将设置此参数并使用此 token。

运行 php server.php

examples 文件夹中有更多处理程序、配置和服务器选项。

说明

库中有 5 个主要对象

  1. Server: 扩展 Loader。加载文件,运行 http-server 并激活处理程序。
  2. Config: 配置。
  3. Update: 扩展 API 和 HTTP。包含发送请求到机器人 API 的所有方法。
  4. Handler: 创建将异步运行的处理程序。
  5. Filter: 创建过滤器的静态方法。

Server

服务器加载所有您的机器人文件,获取处理程序,并运行一个服务器监听传入的请求。一旦服务器收到请求,它就会激活在请求路径中设置的处理程序。您可以将任何请求路径设置为任何文件。

Handler

所有处理程序都在每个来自机器人的请求上异步运行。您可以根据需要设置各种处理程序并控制它们激活的方式。

要创建处理程序,只需调用 Handler 实例上的方法,方法名即为您想要的处理程序名 $handler->handler_name()

您可以给它任何名称(除处理程序类方法外)。名称可以控制处理程序的激活时间。

处理程序接受 4 个参数

  • function (命名函数): 激活处理程序时运行的函数。接受 Update 实例作为参数。
  • filter: 必须是可调用的。如果您传递了一个函数,它应该接收一个参数 - Update 实例
  • last: 如果为 true 且处理程序被激活,则处理程序将是当前请求中最后运行的处理程序。
  • name: 处理程序名称,对调试很有用,可以知道哪个处理程序被激活。

您可以按顺序(函数、过滤器、last、name)或按名称传递参数

$handler->on_message(
    filter: "blabal", 
    func: fn($u) => $u->reply("bla"),
    last: true,
    name: 'reply bla to blabla'
);

特殊处理程序名称

此列表中的特殊处理程序将在特定 TBD 中激活。
  • before: 在任何其他处理程序之前激活。可以返回新数组中要运行的功能,以便通过返回空数组来禁用所有功能。
  • middle: 在每个处理程序之前运行。接受 2 个参数:Update 和 $next,它使用处理程序的功能。
  • after: 在所有处理程序完成后激活。用于清理或写入数据库。
  • fallback: 仅在没有其他处理程序激活时激活。
此列表中的特殊处理程序将在特定更新类型中激活。
  • on_update: 在每个更新上激活。接受更新类型/过滤器(message、callback_query 等)。
  • on_message: 在 'message' 更新上激活。接受消息/过滤器(/start、menu、word、test 等)。
  • on_edit: 在 'edited_message' 更新上激活。接受新消息/过滤器。
  • on_cbq: 在 'callback_query' 更新上激活。接受与 callback_data 匹配的文本作为过滤器。
  • on_file: 当请求中有文件时激活(无论更新类型如何)。接受文件类型/过滤器(photo、audio 等)。
  • on_service:在更新是服务消息时激活,不接受字符串或数组过滤器,只接受函数(字符串或数组会导致处理器不激活)。

配置

您可以配置各种内容,请参阅src/config.php文件。可以在json文件中设置,并使用上面显示的load方法加载。

更新

本类中所有bot API方法以及更多。此类实例传递给处理器。

Telegram API方法 - https://core.telegram.org/bots/api#available-methods

新增方法

  • reply:回复消息。
  • delete:删除消息。
  • ban:[仅在群组和频道中] 将用户从聊天中禁言。
  • leave:离开群组或频道。
  • edit:编辑消息。
  • forward:将消息转发到另一个聊天,带有或没有信用或作为副本。
  • alert:回复callback_query。
  • download:下载消息中的媒体。
  • editKeyboard:编辑内联键盘。
  • editButton:仅编辑一个内联按钮。

此外,还有很多预设变量可以用于许多更新部分。请参阅update.php文件。

变量

部分列表

  • chat:消息发送的聊天。
  • from:发送消息的用户。在私聊中与chat相同。
  • updateType:更新类型(消息、callback_query等)。
  • cb_answered:callback_query是否已回答。可以在after处理器中用于回答未回答的情况。
  • service:如果消息是服务消息。
  • media:包含来自消息的媒体。

您可以以对象或数组的形式访问更新。$u->message->chat->id$u['message']['chat']['id']

您可以跳过更新类型(如上面的例子中的message)。

$u->data将在回调更新中是回调数据。$u->message_id是消息_id。

加载器

Server类扩展了Loader。您不应直接使用它。

您可以加载文件、文件夹或处理器。

额外访问

带有更改其他机器人处理器能力的加载的文件。

加载的文件中的处理器使用bot_lib/Server的$this。

Server类中的files属性包含每个由服务器加载的文件的

  • 路径
    • 文件名
    • 处理器
    • 配置

您可以在examples文件夹中的示例中看到您可以用额外访问做什么。

辅助工具

包含静态辅助函数。

  • keyboard:轻松创建内联键盘。请参阅注释了解如何使用。
  • permissions:创建ChatPermissions json。

调试

启用服务器的调试日志

use Psr\Log\LogLevel;

$server->setLogLevel(LogLevel::DEBUG);

要为每个机器人启用日志记录,可以将此添加到机器人文件中

use Psr\Log\LogLevel;

$config->setLevel(LogLevel::DEBUG);