ctapu4ok/vk-messenger-sdk

PHP 实现VK Messenger LongPoll协议。

安装: 16

依赖: 0

建议者: 0

安全: 0

星标: 2

关注者: 1

分支: 0

开放问题: 0

类型:项目

v1.1.1 2023-07-24 08:36 UTC

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

Packagist

1. 前提条件

  • PHP 8.2^

2. 安装

可以使用 Composer 安装 VK Messenger SDK,执行以下命令

composer require ctapu4ok/vk-messenger-sdk

3. 示例

(逐步增加)

简单机器人的示例

1. 消息

  1. 发送带按钮的消息
  2. 模拟机器人输入文本
  3. 发送带嵌入图片的消息

2. 群组

  1. 获取群组信息
  2. 编辑群组

3. 其他

  1. 执行 SQL 查询
  2. 执行事务
  3. 使用 Logger 模块的示例

更多示例

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);