ctapu4ok / vk-messenger-sdk
PHP 实现VK Messenger LongPoll协议。
v1.1.1
2023-07-24 08:36 UTC
Requires
- php: ^8.2
- ext-curl: *
- amphp/amp: ^3
- amphp/file: ^3
- amphp/log: ^2
- amphp/mysql: ^3
- amphp/postgres: ^2
- amphp/redis: ^2
- guzzlehttp/guzzle: ^7.7
- psr/http-factory: ^1.0
- psr/log: ^3
- revolt/event-loop: ^1.0
- webmozart/assert: ^1.11
Requires (Dev)
- phpunit/phpunit: ^10.2
- squizlabs/php_codesniffer: 3.*
README
VK Messenger SDK 是一个系统,允许通过 LongPoll 异步模式与 VKontakte API 交互。
LongPoll 是 VKontakte API 提供的一种机制,允许实时接收来自社交网络的更新。
为了实现异步模式,该项目使用回调(callback/event loop)机制。当 VKontakte 系统发生新事件时,处理程序会接收到它并调用用户预先定义的相应回调。这样,用户可以创建自己的处理逻辑来处理接收到的事件。
PHP 库,用于与 VK API 交互,包括 LongPoll Server 和 API 方法
使用的 VK API 版本 version 5.81
1. 前提条件
- PHP 8.2^
2. 安装
可以使用 Composer 安装 VK Messenger SDK,执行以下命令
composer require ctapu4ok/vk-messenger-sdk
3. 示例
(逐步增加)
1. 消息
2. 群组
3. 其他
4. 机器人示例
<?php declare(strict_types=1); if (file_exists('vendor/autoload.php')) { require_once 'vendor/autoload.php'; } use ctapu4ok\VkMessengerSdk\EventHandler; use ctapu4ok\VkMessengerSdk\Logger; use ctapu4ok\VkMessengerSdk\Settings; enum Params { public const API_HASH = 'vk1.a.Qyw6zef4YQZmosPX5J.....'; public const GROUP_ID = 12345678; public const CONFIRM_STRING = 'c683e9eb12cebb65ce.....'; public const VERSION = '5.81'; } class MessengerEvent extends EventHandler { public function onStart(): void { $this->getAPI()->logger('The event handler was initialized'); } public function messageEvent(int $group_id, ?string $secret, array $object): void { $this->getAPI()->logger([ 'New message event received', $object ], Logger::LOGGER_CALLABLE); } public function messageNew(int $group_id, ?string $secret, array $object): void { $this->getAPI()->logger([ 'New message received: ', $object ], Logger::LOGGER_CALLABLE); /** * @var $this->getVk() The main VK API methods src/API/Actions */ $msg_id = $this->getVk()->messages()->send([ 'user_id' => $object['message']['from_id'], 'random_id' => floor(microtime(true) * 1000), 'peer_id' => $object['message']['peer_id'], 'message' => 'Hello World!' ]); $this->getAPI()->logger([ 'Getting Message ID: ', $msg_id ], Logger::LOGGER_CALLABLE); } public function messageTypingState(int $group_id, ?string $secret, array $object): void { $this->getAPI()->logger([ 'The user started typing a message', $object ], Logger::LOGGER_CALLABLE); } /** * Cron example */ #[Cron(period: 5)] public function testingCron5() { $this->getAPI()->logger([ 'THIS IS CRON 5!!!!!!' ], Logger::LOGGER_CALLABLE); } #[Cron(period: 1)] public function testingSome1() { $this->getAPI()->logger([ 'THIS IS CRON 1.0!!!!!!' ], Logger::LOGGER_CALLABLE); } } $Settings = new Settings(); $Settings->getAppInfo()->setApiHash(Params::API_HASH); $Settings->getAppInfo()->setGroupId(Params::GROUP_ID); $Settings->getAppInfo()->setConfirmString(Params::CONFIRM_STRING); $Settings->getAppInfo()->setApiVersion(Params::VERSION); // we say to output logs to a file (without console) //$Settings->getLogger() // ->setType(Logger::LOGGER_FILE) // ->setExtra('log.file') // ->setMaxSize(50*1024*1024); // Database settings //$Settings->setDb( // (new Settings\Database\Mysql()) // ->setUri('127.0.0.1:3306') // ->setDatabase('vk_messenger') // ->setUsername('root') // ->setPassword('root') //); MessengerEvent::loop($Settings);