mirror of
https://github.com/danog/MadelineProto.git
synced 2024-12-04 07:47:48 +01:00
102 lines
3.0 KiB
PHP
102 lines
3.0 KiB
PHP
<?php declare(strict_types=1);
|
|
|
|
namespace MadelinePlugin\Danog;
|
|
|
|
use danog\MadelineProto\API;
|
|
use danog\MadelineProto\EventHandler\Attributes\Cron;
|
|
use danog\MadelineProto\EventHandler\Attributes\Handler;
|
|
use danog\MadelineProto\EventHandler\Filter\FilterText;
|
|
use danog\MadelineProto\EventHandler\Message;
|
|
use danog\MadelineProto\EventHandler\SimpleFilter\Incoming;
|
|
use danog\MadelineProto\PluginEventHandler;
|
|
use danog\MadelineProto\Settings\Database\Mysql;
|
|
use danog\MadelineProto\Settings\Database\Postgres;
|
|
use danog\MadelineProto\Settings\Database\Redis;
|
|
|
|
// MadelineProto is already loaded
|
|
if (\class_exists(API::class)) {
|
|
// Otherwise, if a stable version of MadelineProto was installed via composer, load composer autoloader
|
|
} elseif (\file_exists('vendor/autoload.php')) {
|
|
require_once 'vendor/autoload.php';
|
|
} else {
|
|
// Otherwise download an !!! alpha !!! version of MadelineProto via madeline.php
|
|
if (!\file_exists('madeline.php')) {
|
|
\copy('https://phar.madelineproto.xyz/madeline.php', 'madeline.php');
|
|
}
|
|
require_once 'madeline.php';
|
|
}
|
|
|
|
/**
|
|
* Plugin event handler class.
|
|
*
|
|
* All properties returned by __sleep are automatically stored in the database.
|
|
*/
|
|
class PingPlugin extends PluginEventHandler
|
|
{
|
|
private int $pingCount = 0;
|
|
|
|
private string $pongText = 'pong';
|
|
|
|
/**
|
|
* You can set a custom pong text from the outside of the plugin:
|
|
*
|
|
* ```
|
|
* if (!file_exists('madeline.php')) {
|
|
* copy('https://phar.madelineproto.xyz/madeline.php', 'madeline.php');
|
|
* }
|
|
* include 'vendor/autoload.php';
|
|
*
|
|
* $a = new API('bot.madeline');
|
|
* $plugin = $a->getPlugin(PingPlugin::class);
|
|
*
|
|
* $plugin->setPongText('UwU');
|
|
* ```
|
|
*
|
|
* This will automatically connect to the running instance of the plugin and call the specified method.
|
|
*/
|
|
public function setPongText(string $pong): void
|
|
{
|
|
$this->pongText = $pong;
|
|
}
|
|
|
|
/**
|
|
* Returns a list of names for properties that will be automatically saved to the session database (MySQL/postgres/redis if configured, the session file otherwise).
|
|
*/
|
|
public function __sleep(): array
|
|
{
|
|
return ['pingCount', 'pongText'];
|
|
}
|
|
/**
|
|
* Initialization logic.
|
|
*/
|
|
public function onStart(): void
|
|
{
|
|
$this->logger("The bot was started!");
|
|
$this->logger($this->getFullInfo('MadelineProto'));
|
|
|
|
$this->sendMessageToAdmins("The bot was started!");
|
|
}
|
|
|
|
/**
|
|
* This cron function will be executed forever, every 60 seconds.
|
|
*/
|
|
#[Cron(period: 60.0)]
|
|
public function cron1(): void
|
|
{
|
|
$this->sendMessageToAdmins("The ping plugin is online, total pings so far: ".$this->pingCount);
|
|
}
|
|
|
|
#[FilterText('ping')]
|
|
public function pingCommand(Incoming&Message $message): void
|
|
{
|
|
$message->reply($this->pongText);
|
|
$this->pingCount++;
|
|
}
|
|
}
|
|
|
|
// For users or bots
|
|
PingPlugin::startAndLoop('bot.madeline');
|
|
|
|
// For bots only
|
|
// PingPlugin::startAndLoopBot('bot.madeline', 'bot token');
|