Compare commits
No commits in common. "stable" and "1.0.0" have entirely different histories.
24
README.md
24
README.md
|
@ -1,23 +1,3 @@
|
|||
# Описание
|
||||
Бобби Мирзаев создан в первую очередь для тестирования моего публичного фрейворка для работы с API ВКонтакте
|
||||
Оба проекта полностью бесплатны и их код находятся в открытом доступе - можете экспериментировать!
|
||||
# vk-robot-bobby
|
||||
|
||||
Я хочу, чтобы он вывел ролевые игры в чате на совершенно новый уровень
|
||||
|
||||
[ВКонтакте](https://vk.com/bobby.mirzaev.sexy)<br/>
|
||||
[Документация](https://git.mirzaev.sexy/mirzaev/vk-robot-bobby/wiki/%D0%A0%D0%BE%D0%BB%D0%B5%D0%B2%D1%8B%D0%B5-%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B)
|
||||
|
||||
## Что делает Бобби?
|
||||
Помогает проводить ролевые игры: как групповые, так и приватные.
|
||||
|
||||
# План разработки
|
||||
* Набор людей в ролевую игру (в приоритете)
|
||||
* Создание персонажей: изображения, описание, характеристики и дополнительные поля
|
||||
* Генерация ролевых действий, которые могут быть написаны вручную под любой сценарий
|
||||
* Генерация NFT из персонажа, а так же его продажи продажи и переноса на другой аккаунт
|
||||
* Генерация сюжетных изображений с помощью нейросетей
|
||||
* Генерация сюжетных продолжений с помощью нейросетей
|
||||
* Запись статистики ролевой сессии (взаимодействия между персонажами, события с их участием...)
|
||||
* Возможность переноса своего персонажа в другие ролевые игры
|
||||
* Возможность выгружать персонажей в раздел "товары" группы ВКонтакте
|
||||
* Глобальный и локальный рейтинги персонажей и их авторов
|
||||
Бобби Мирзаев - чат-робот ВКонтакте для проведения ролевых игр
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "mirzaev/vk-robot-bobby",
|
||||
"description": "Чат-робот ВКонтакте для проведения ролевых игр",
|
||||
"description": "Бобби Мирзаев - чат-робот ВКонтакте для проведения ролевых игр",
|
||||
"readme": "README.md",
|
||||
"keywords": [
|
||||
"Bobby",
|
||||
|
@ -16,8 +16,8 @@
|
|||
{
|
||||
"name": "Arsen Mirzaev Tatyano-Muradovich",
|
||||
"email": "arsen@mirzaev.sexy",
|
||||
"homepage": "https://mirzaev.sexy",
|
||||
"role": "Programmer"
|
||||
"homepage": "https://hood.su/mirzaev",
|
||||
"role": "Father"
|
||||
}
|
||||
],
|
||||
"support": {
|
||||
|
@ -38,7 +38,7 @@
|
|||
"triagens/arangodb": "~3.8",
|
||||
"guzzlehttp/guzzle": "^7.4",
|
||||
"mirzaev/arangodb": "^1.0",
|
||||
"mirzaev/vk": "^4.4",
|
||||
"mirzaev/vk": "^4.2",
|
||||
"mirzaev/vk-arangodb": "^1.0.1",
|
||||
"mirzaev/vk-chat": "^1.0"
|
||||
},
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "6779413522c40533861a4ffbaf0c3eb2",
|
||||
"content-hash": "ab14cf737c9cf81d65b0e8bb20a7c4f8",
|
||||
"packages": [
|
||||
{
|
||||
"name": "guzzlehttp/guzzle",
|
||||
|
@ -500,25 +500,22 @@
|
|||
},
|
||||
{
|
||||
"name": "mirzaev/vk",
|
||||
"version": "4.4.0",
|
||||
"version": "4.2.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://git.mirzaev.sexy/mirzaev/vk",
|
||||
"reference": "e670be5816177260626f43d1795f6180320395b8"
|
||||
"reference": "5bd94e5ca3ceeb73aeaa5d6db9fdef1586cfb155"
|
||||
},
|
||||
"require": {
|
||||
"guzzlehttp/guzzle": "^7.5",
|
||||
"jasny/error-handler": "^0.2",
|
||||
"mirzaev/accounts": "^1.2.0",
|
||||
"monolog/monolog": "^1.6",
|
||||
"php": "^8.1",
|
||||
"psr/log": "^1.0"
|
||||
"guzzlehttp/guzzle": "~7.5",
|
||||
"jasny/error-handler": "~0.2",
|
||||
"mirzaev/accounts": "~1.2.0",
|
||||
"monolog/monolog": "~1.6",
|
||||
"php": "~8.1",
|
||||
"psr/log": "~1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^9.5"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-sodium": "Can be selected in some conditions to increase security"
|
||||
"phpunit/phpunit": "~9.5"
|
||||
},
|
||||
"type": "framework",
|
||||
"autoload": {
|
||||
|
@ -548,11 +545,11 @@
|
|||
"docs": "https://git.mirzaev.sexy/mirzaev/vk/wiki",
|
||||
"issues": "https://git.mirzaev.sexy/mirzaev/vk/issues"
|
||||
},
|
||||
"time": "2022-11-08T15:12:50+00:00"
|
||||
"time": "2022-11-07T16:06:13+00:00"
|
||||
},
|
||||
{
|
||||
"name": "mirzaev/vk-arangodb",
|
||||
"version": "1.0.x-dev",
|
||||
"version": "1.0.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://git.mirzaev.sexy/mirzaev/vk-arangodb",
|
||||
|
@ -606,11 +603,11 @@
|
|||
},
|
||||
{
|
||||
"name": "mirzaev/vk-chat",
|
||||
"version": "1.1.0",
|
||||
"version": "1.0.x-dev",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://git.mirzaev.sexy/mirzaev/vk-chat",
|
||||
"reference": "dae9b2b5b19796029e0e67f2194f74b21041741f"
|
||||
"reference": "40ceb7a86c38a0b878adca44c5729407631e7e82"
|
||||
},
|
||||
"require": {
|
||||
"php": "^8.1"
|
||||
|
@ -651,7 +648,7 @@
|
|||
"type": "funding"
|
||||
}
|
||||
],
|
||||
"time": "2022-11-08T15:10:17+00:00"
|
||||
"time": "2022-11-07T13:01:09+00:00"
|
||||
},
|
||||
{
|
||||
"name": "monolog/monolog",
|
||||
|
|
|
@ -1,39 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace mirzaev\vk\robot\bobby\programs;
|
||||
|
||||
// Фреймворк ВКонтакте
|
||||
use mirzaev\vk\robots\robot;
|
||||
|
||||
// Модуль чат-робота для фреймворка ВКонтакте
|
||||
use mirzaev\vk\chat\core,
|
||||
mirzaev\vk\chat\program;
|
||||
|
||||
/**
|
||||
* Программа: "генератор кнопок"
|
||||
*
|
||||
* Обрабатывает "[название|авторизованные|*ролевое действие*] в кнопку и
|
||||
* соответствующее ей действие или сообщение, в зависимости от параметров
|
||||
*
|
||||
* @package mirzaev\vk\robot\bobby\programs
|
||||
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
|
||||
*/
|
||||
class buttons_generator extends program
|
||||
{
|
||||
/**
|
||||
* Конструктор
|
||||
*
|
||||
* @param robot $robot Робот, который будет выполнять команду
|
||||
* @param array $accounts Реестр аккаунтов которым разрешено выполнять команду
|
||||
*/
|
||||
public function __construct(
|
||||
public robot $robot,
|
||||
public array $accounts = []
|
||||
) {
|
||||
parent::__construct(function (core $core, robot $robot, array &$update, string ...$buttons): void {
|
||||
var_dump($buttons); die;
|
||||
}, $robot, $accounts);
|
||||
}
|
||||
}
|
|
@ -1,66 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace mirzaev\vk\robot\bobby\programs;
|
||||
|
||||
// Фреймворк ВКонтакте
|
||||
use mirzaev\vk\robots\robot;
|
||||
|
||||
// Модуль чат-робота для фреймворка ВКонтакте
|
||||
use mirzaev\vk\chat\core,
|
||||
mirzaev\vk\chat\program;
|
||||
|
||||
/**
|
||||
* Программа: "экранирование символов"
|
||||
*
|
||||
* Находит символ "\" и конвертирует следующий за ним в HTML-код
|
||||
*
|
||||
* @package mirzaev\vk\robot\bobby\programs
|
||||
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
|
||||
*/
|
||||
class character_escaping extends program
|
||||
{
|
||||
/**
|
||||
* Конструктор
|
||||
*
|
||||
* @param callable $program Программа выполняемая командой
|
||||
* @param robot $robot Робот, который будет выполнять команду
|
||||
* @param array $accounts Реестр аккаунтов которым разрешено выполнять команду
|
||||
*/
|
||||
public function __construct(
|
||||
public robot $robot,
|
||||
public array $accounts = []
|
||||
) {
|
||||
parent::__construct(function (core $core, robot $robot, array &$update, string ...$text): void {
|
||||
// Инициализация буфера текста
|
||||
$buffer = '';
|
||||
|
||||
// Конвертация текста
|
||||
foreach ($text as $part) $buffer .= mb_substr($part, 0, 1) === '\\' ? self::convert($part = mb_substr($part, 1)) : $part;
|
||||
|
||||
// Запись текста из буфера в событие (для того, чтобы передать на выполнение следующим программам)
|
||||
$update['object']['message']['text'] = $buffer;
|
||||
}, $robot, $accounts);
|
||||
}
|
||||
|
||||
protected static function convert(string $text): string
|
||||
{
|
||||
// Инициализация буфера вывода
|
||||
$buffer = '';
|
||||
|
||||
foreach ([mb_convert_encoding($text, 'UTF-32', 'UTF-8')] as $symbol) {
|
||||
// Перебор символов
|
||||
|
||||
$c = 0;
|
||||
for ($i = 0; $i < 4; $i++) {
|
||||
$c |= ord($symbol[$i]) << (8 * (3 - $i));
|
||||
}
|
||||
|
||||
// Запись в буфер вывода
|
||||
$buffer .= "&#" . $c . ";";
|
||||
}
|
||||
|
||||
return $buffer;
|
||||
}
|
||||
}
|
|
@ -1,45 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace mirzaev\vk\robot\bobby\programs;
|
||||
|
||||
// Фреймворк ВКонтакте
|
||||
use mirzaev\vk\robots\robot;
|
||||
|
||||
// Модуль чат-робота для фреймворка ВКонтакте
|
||||
use mirzaev\vk\chat\core,
|
||||
mirzaev\vk\chat\program;
|
||||
|
||||
/**
|
||||
* Программа: "конвертер упоминаний"
|
||||
*
|
||||
* Принцип работы:
|
||||
*
|
||||
* 1. Пользователь отправляет: "@id123456789 (Имя)"
|
||||
* 2. Сервер получает: "[id123456789|Имя]"
|
||||
* 3. Программа конвертирует: "[id123456789|Имя]" в "@id123456789 (Имя)"
|
||||
*
|
||||
* Это нужно для того, чтобы упоминание понял препроцессор ВКонтакте
|
||||
*
|
||||
* @package mirzaev\vk\robot\bobby\programs
|
||||
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
|
||||
*/
|
||||
class mentions_converter extends program
|
||||
{
|
||||
/**
|
||||
* Конструктор
|
||||
*
|
||||
* @param robot $robot Робот, который будет выполнять команду
|
||||
* @param array $accounts Реестр аккаунтов которым разрешено выполнять команду
|
||||
*/
|
||||
public function __construct(
|
||||
public robot $robot,
|
||||
public array $accounts = []
|
||||
) {
|
||||
parent::__construct(function (core $core, robot $robot, array &$update): void {
|
||||
// Конвертация упоминаний
|
||||
$update['object']['message']['text'] = preg_replace_callback('/(*UTF8)(?=[^\[]+)[^\[]+|\[(id\d+)\|([^\]]+)\]/', fn (array $matches) => isset($matches[2]) ? '@' . $matches[1] . ' (' . $matches[2] . ')' : $matches[0] ?? $update['object']['message']['text'], $update['object']['message']['text'], 500);
|
||||
}, $robot, $accounts);
|
||||
}
|
||||
}
|
|
@ -1,69 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace mirzaev\vk\robot\bobby\programs;
|
||||
|
||||
// Фреймворк ВКонтакте
|
||||
use mirzaev\vk\robots\robot;
|
||||
|
||||
// Модуль чат-робота для фреймворка ВКонтакте
|
||||
use mirzaev\vk\chat\core,
|
||||
mirzaev\vk\chat\program;
|
||||
|
||||
/**
|
||||
* Программа: "ответ группе"
|
||||
*
|
||||
* Обрабатывает ответ напрвленный не пользователю, а группе
|
||||
*
|
||||
* @package mirzaev\vk\robot\bobby\programs
|
||||
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
|
||||
*/
|
||||
class reply_to_group extends program
|
||||
{
|
||||
/**
|
||||
* Конструктор
|
||||
*
|
||||
* @param robot $robot Робот, который будет выполнять команду
|
||||
* @param array $accounts Реестр аккаунтов которым разрешено выполнять команду
|
||||
*/
|
||||
public function __construct(
|
||||
public robot $robot,
|
||||
public array $accounts = []
|
||||
) {
|
||||
parent::__construct(function (core $core, robot $robot, array &$update): void {
|
||||
if (isset($update['object']['message']['reply_message'])) {
|
||||
// Найдено сообщение для ответа
|
||||
|
||||
if ($update['object']['message']['reply_message']['from_id'] < 0) {
|
||||
// Ответ на сообщение группы
|
||||
|
||||
// Инициализация данных аккаунта отправителя
|
||||
$sender = $robot->user()->get($update['object']['message']['from_id'], name_case: 'gen');
|
||||
|
||||
if ($update['object']['message']['reply_message']['from_id'] === -217012993) {
|
||||
// Ответ на сообщение Бобби Мирзаева
|
||||
|
||||
// Отправка сообщения с ролевым действием
|
||||
$core->message($robot->message()->destination($update['object']['message']['peer_id'])->text("@club217012993 (Бобби) избил @id$sender->id ($sender->first_name) до полусмерти")->mentions(false));
|
||||
} else if ($update['object']['message']['reply_message']['from_id'] === -191417381) {
|
||||
// Ответ на сообщение Шамиля Мирзаева
|
||||
|
||||
// Отправка сообщения с ролевым действием
|
||||
$core->message($robot->message()->destination($update['object']['message']['peer_id'])->text('Как дела, @club191417381 (брат)? Давай свалим отсюда?')->mentions(false));
|
||||
} else {
|
||||
// Ответ на сообщение другой группы
|
||||
|
||||
// Отправка сообщения с ролевым действием
|
||||
$core->message($robot->message()->destination($update['object']['message']['peer_id'])->text('@club' . $update['object']['message']['reply_message']['from_id'] . ' (Слышь), здристни отсюда')->mentions(false));
|
||||
}
|
||||
|
||||
// Завершение выполнения команд
|
||||
$core->break();
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
}, $robot, $accounts);
|
||||
}
|
||||
}
|
|
@ -1,163 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace mirzaev\vk\robot\bobby\programs;
|
||||
|
||||
// Фреймворк ВКонтакте
|
||||
use mirzaev\vk\robots\robot;
|
||||
|
||||
// Модуль чат-робота для фреймворка ВКонтакте
|
||||
use mirzaev\vk\chat\core,
|
||||
mirzaev\vk\chat\program;
|
||||
|
||||
// Встроенные библиотеки
|
||||
use Exception;
|
||||
|
||||
/**
|
||||
* Программа: "ролевое действие"
|
||||
*
|
||||
* Удаляет запрос и отправляет в чат выполняемое действие.
|
||||
* Можно использовать псевдонимы и падежи
|
||||
*
|
||||
* @package mirzaev\vk\robot\bobby\programs
|
||||
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
|
||||
*/
|
||||
class roleplay_action extends program
|
||||
{
|
||||
/**
|
||||
* Конструктор
|
||||
*
|
||||
* @param robot $robot Робот, который будет выполнять команду
|
||||
* @param array $accounts Реестр аккаунтов которым разрешено выполнять команду
|
||||
*/
|
||||
public function __construct(
|
||||
public robot $robot,
|
||||
public array $accounts = []
|
||||
) {
|
||||
parent::__construct(function (core $core, robot $robot, array &$update, string $original, string $text = ''): void {
|
||||
try {
|
||||
// Инициализация длины сообщения
|
||||
$original_length = strlen($update['object']['message']['text']);
|
||||
|
||||
// Инициализция длины распознанных команд
|
||||
$command_length = strlen($text) + 2; // +2 это два символа "*" - особенность регулярного выражения
|
||||
if (!empty($buttons)) $command_length += strlen($buttons);
|
||||
if (!empty($parameters)) $command_length += strlen($parameters);
|
||||
|
||||
// Удаление сообщения, если в нём нет лишнего текста
|
||||
if ($original_length === $command_length) $robot->message()->delete($update['object']['message']['conversation_message_id'], $update['object']['message']['peer_id']);
|
||||
} catch (Exception $e) {
|
||||
}
|
||||
|
||||
if (empty($text = trim($text))) {
|
||||
// Пустой текст сообщения
|
||||
|
||||
// Инициализация данных аккаунта отправителя
|
||||
$sender = $robot->user()->get($update['object']['message']['from_id']);
|
||||
|
||||
// Инициализация сообщения с ролевым действием
|
||||
$core->message($robot->message()->destination($update['object']['message']['peer_id'])->text("@id$sender->id ($sender->first_name) тупит")->disable_mentions(true));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Инициализация индикаторов наличия изменённого псевдонима у получателя и отпрвителя
|
||||
$sender_changed = $receiver_changed = false;
|
||||
|
||||
// Инициализация псевдонима получателя
|
||||
$receiver_alias = '';
|
||||
|
||||
if (isset($update['object']['message']['reply_message'])) {
|
||||
// Найдено сообщение для ответа
|
||||
|
||||
// Инициализация данных аккаунта получателя
|
||||
$receiver = $robot->user()->get($update['object']['message']['reply_message']['from_id']);
|
||||
|
||||
if (isset($receiver)) {
|
||||
// Найден получатель
|
||||
|
||||
// Обработка падежа получателя
|
||||
$text = preg_replace_callback('/(*UTF8)^(.*)\|([^$]+)$/', function (array $matches) use ($text, &$receiver_alias, $receiver): string {
|
||||
// Инициализация псевдонима отправителя
|
||||
$alias = preg_replace('/\)/', ')', $matches[2], 300);
|
||||
|
||||
// Инициализация псевдонима получателя
|
||||
$receiver_alias = " @id$receiver->id ($receiver->first_name" . (empty($alias) ? '' : $alias) . ')';
|
||||
|
||||
return $matches[1] ?? $matches[0] ?? $text;
|
||||
}, $text, 1);
|
||||
|
||||
if (empty($receiver_alias)) {
|
||||
// Не найден псевдоним получателя
|
||||
|
||||
// Обработка псевдонима получателя
|
||||
$text = preg_replace_callback('/(*UTF8)^(.*)\(([^\)]*)\)$/', function (array $matches) use ($text, &$receiver_alias, $receiver): string {
|
||||
// Инициализация псевдонима отправителя
|
||||
$alias = preg_replace('/\)/', ')', $matches[2], 300);
|
||||
|
||||
// Инициализация псевдонима получателя
|
||||
$receiver_alias = " @id$receiver->id (" . (empty($alias) ? $receiver->first_name : $alias) . ')';
|
||||
|
||||
return $matches[1] ?? $matches[0] ?? $text;
|
||||
}, $text, 1);
|
||||
}
|
||||
}
|
||||
|
||||
// Проверка на пустого получателя
|
||||
if (empty(trim($receiver_alias))) {
|
||||
// Пустой текст получателя
|
||||
|
||||
// Реинициализация текста получателя
|
||||
$receiver_alias = " @id$receiver->id ($receiver->first_name)";
|
||||
} else $receiver_changed = true;
|
||||
}
|
||||
|
||||
// Инициализация псевдонима отправителя
|
||||
$sender_alias = '';
|
||||
|
||||
// Инициализация данных аккаунта отправителя
|
||||
$sender = $robot->user()->get($update['object']['message']['from_id']);
|
||||
|
||||
// Обработка падежа отправителя
|
||||
$text = preg_replace_callback('/(*UTF8)^\|([^\s]+)(.*)$/', function (array $matches) use ($text, $sender, &$sender_alias): string {
|
||||
// Инициализация псевдонима отправителя
|
||||
$alias = preg_replace('/\)/', ')', $matches[1], 300);
|
||||
|
||||
// Инициализация ссылки на отправителя
|
||||
$sender_alias = "@id$sender->id ($sender->first_name" . (empty($alias) ? '' : $alias) . ') ';
|
||||
|
||||
return $matches[2] ?? $matches[0] ?? $text;
|
||||
}, $text, 1);
|
||||
|
||||
if (empty($sender_alias)) {
|
||||
// Не найден псевдоним отправителя
|
||||
|
||||
// Обработка псевдонима отправителя
|
||||
$text = preg_replace_callback('/(*UTF8)^\(([^\)]*)\)(.*)$/', function (array $matches) use ($text, $sender, &$sender_alias): string {
|
||||
// Инициализация псевдонима отправителя
|
||||
$alias = preg_replace('/\)/', ')', $matches[1], 300);
|
||||
|
||||
// Инициализация ссылки на отправителя
|
||||
$sender_alias = "@id$sender->id (" . (empty($alias) ? $sender->first_name : $alias) . ') ';
|
||||
|
||||
return $matches[2] ?? $matches[0] ?? $text;
|
||||
}, $text, 1);
|
||||
}
|
||||
|
||||
if (empty(trim($sender_alias))) {
|
||||
// Пустой текст отправителя
|
||||
|
||||
// Реинициализация текста отправителя
|
||||
$sender_alias = "@id$sender->id ($sender->first_name) ";
|
||||
} else $sender_changed = true;
|
||||
|
||||
// Удаление команд падежей из строки
|
||||
$text = preg_replace('/(*UTF8)\|[А-яё\w]+/', '', $text, 500);
|
||||
|
||||
// Инициализация сообщения с ролевым действием
|
||||
if (empty($text = trim($text)) && !$sender_changed && !$receiver_changed) $core->message($robot->message()->destination($update['object']['message']['peer_id'])->text("@id$sender->id ($sender->first_name) тупит")->mentions(false));
|
||||
else $core->message($robot->message()->destination($update['object']['message']['peer_id'])->text("$sender_alias$text$receiver_alias")->mentions(false), 'roleplay_action');
|
||||
}, $robot, $accounts);
|
||||
}
|
||||
}
|
|
@ -1,43 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace mirzaev\vk\robot\bobby\programs;
|
||||
|
||||
// Фреймворк ВКонтакте
|
||||
use mirzaev\vk\robots\robot;
|
||||
|
||||
// Модуль чат-робота для фреймворка ВКонтакте
|
||||
use mirzaev\vk\chat\core,
|
||||
mirzaev\vk\chat\program;
|
||||
|
||||
// Встроенные библиотеки
|
||||
use Closure,
|
||||
Exception;
|
||||
|
||||
/**
|
||||
* Программа: "переменные"
|
||||
*
|
||||
* Обрабатывает (название: значение) в переменные хранимые в ядре
|
||||
*
|
||||
* @package mirzaev\vk\robot\bobby\programs
|
||||
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
|
||||
*/
|
||||
class variables extends program
|
||||
{
|
||||
/**
|
||||
* Конструктор
|
||||
*
|
||||
* @param callable $program Программа выполняемая командой
|
||||
* @param robot $robot Робот, который будет выполнять команду
|
||||
* @param array $accounts Реестр аккаунтов которым разрешено выполнять команду
|
||||
*/
|
||||
public function __construct(
|
||||
public robot $robot,
|
||||
public array $accounts = []
|
||||
) {
|
||||
parent::__construct(function (core $core, robot $robot, array &$update, string ...$text): void {
|
||||
|
||||
}, $robot, $accounts);
|
||||
}
|
||||
}
|
|
@ -2,15 +2,6 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
// Файлы проекта
|
||||
use mirzaev\vk\robot\bobby\programs\roleplay_action,
|
||||
mirzaev\vk\robot\bobby\programs\character_escaping,
|
||||
mirzaev\vk\robot\bobby\programs\reply_to_group,
|
||||
mirzaev\vk\robot\bobby\programs\mentions_converter,
|
||||
mirzaev\vk\robot\bobby\programs\variables,
|
||||
mirzaev\vk\robot\bobby\programs\buttons_generator,
|
||||
mirzaev\vk\robot\bobby\programs\postprocessor;
|
||||
|
||||
// Фреймворк ВКонтакте
|
||||
use mirzaev\vk\core,
|
||||
mirzaev\vk\api\longpoll;
|
||||
|
@ -22,7 +13,8 @@ use mirzaev\arangodb\connection;
|
|||
use mirzaev\vk\arangodb\longpoll as database;
|
||||
|
||||
// Модуль чат-робота для фреймворка ВКонтакте
|
||||
use mirzaev\vk\chat\core as chat;
|
||||
use mirzaev\vk\chat\core as chat,
|
||||
mirzaev\vk\chat\command;
|
||||
|
||||
// Инициализация
|
||||
defined('SYSTEM_PATH_ROOT') or define('SYSTEM_PATH_ROOT', __DIR__ . '/../');
|
||||
|
@ -35,50 +27,42 @@ require SYSTEM_PATH_ROOT . '../../../../../vendor/autoload.php';
|
|||
$core = core::init();
|
||||
|
||||
// Инициализция робота
|
||||
$robot = $core->group(217012993)->key('');
|
||||
$robot = $core->group('group id here')->key('group key here');
|
||||
|
||||
// Инициализация обработчика LongPoll API
|
||||
$longpoll = new longpoll($robot);
|
||||
|
||||
// Инициализация базы данных ВКонтакте
|
||||
$vk = new database(new connection(require SYSTEM_PATH_ROOT . 'settings/vk.php'));
|
||||
// Инициализация базы данных
|
||||
$database = new database(new connection(require SYSTEM_PATH_ROOT . 'settings/arangodb.php'));
|
||||
|
||||
// Инициализация базы данных Бобби
|
||||
$bobby = new database(new connection(require SYSTEM_PATH_ROOT . 'settings/bobby.php'));
|
||||
|
||||
// Очистка базы данных ВКонтакте (тестирование)
|
||||
$vk->truncate();
|
||||
|
||||
// Очистка базы данных Бобби (тестирование)
|
||||
$bobby->truncate();
|
||||
// Очистка базы данных (тестирование)
|
||||
$database->truncate();
|
||||
|
||||
// Инициализация модуля "чат-робот"
|
||||
$chat = new chat;
|
||||
|
||||
// Инициализация программы "экранирование символов"
|
||||
$chat->command('/(*UTF8)\\\[^\\\]|[^\\\]+/', new character_escaping($robot));
|
||||
// Инициализация команды "ролевое действие"
|
||||
$chat->pattern('/\*([A-я\w\s]+)\*/', new command(function (array $update, string $text) use ($robot) {
|
||||
try {
|
||||
// Удаление сообщения
|
||||
$robot->message()->delete($update['object']['message']['conversation_message_id'], $update['object']['message']['peer_id']);
|
||||
} catch (Exception $e) {
|
||||
}
|
||||
|
||||
// Инициализация программ: "ответ на сообщение группы", "конвертация упоминаний" и "переменные"
|
||||
$chat->command(
|
||||
'/(*UTF8)^.*$/',
|
||||
new reply_to_group($robot),
|
||||
new mentions_converter($robot)
|
||||
);
|
||||
// Инициализация данных отправителя
|
||||
$sender = $robot->user()->get($update['object']['message']['from_id']);
|
||||
|
||||
// Инициализация программы "переменные"
|
||||
$chat->command('/(*UTF8)^\(.*\)$/', new variables($robot));
|
||||
// Отправка ответа
|
||||
$robot->message($update['object']['message']['peer_id'], "@id$sender->id ($sender->first_name) $text");
|
||||
}));
|
||||
|
||||
// Инициализация программы "ролевое действие"
|
||||
$chat->command('/(*UTF8)^\*([^\*]*)\*(?=\n|\r|$|\s*\[|\s*\()/', new roleplay_action($robot));
|
||||
|
||||
// Инициализация программы "генератор кнопок"
|
||||
$chat->command('/(*UTF8){.+\*[^}]+\*}/', new buttons_generator($robot));
|
||||
|
||||
$longpoll->handle(function (array $update) use ($robot, $vk, $bobby, $chat) {
|
||||
$longpoll->handle(function (array $update) use ($robot, $database, $chat) {
|
||||
// Обработка события
|
||||
|
||||
// Сохранение в базе данных
|
||||
$vk->save($update);
|
||||
// var_dump($update);
|
||||
|
||||
// Сохранение события в базе данных
|
||||
// $database->save($update);
|
||||
|
||||
// Обработка команды
|
||||
$chat->handle($update);
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'endpoint' => '',
|
||||
'database' => '',
|
||||
'name' => '',
|
||||
'password' => ''
|
||||
];
|
Loading…
Reference in New Issue