Compare commits
6 Commits
Author | SHA1 | Date | |
---|---|---|---|
09fe516871 | |||
9af555e757 | |||
234d7ea596 | |||
63643f812a | |||
4e81324845 | |||
cc7b34f64d |
@@ -5,7 +5,8 @@ declare(strict_types=1);
|
||||
namespace mirzaev\marina\controllers;
|
||||
|
||||
// Файлы проекта
|
||||
use mirzaev\marina\controllers\core;
|
||||
use mirzaev\marina\controllers\core,
|
||||
mirzaev\marina\controllers\traits\converters;
|
||||
|
||||
// Discord framework
|
||||
use Discord\Discord as discord,
|
||||
@@ -31,6 +32,10 @@ use exception;
|
||||
*/
|
||||
final class index extends core
|
||||
{
|
||||
use converters {
|
||||
utf8_to_extended_ascii as protected ascii;
|
||||
}
|
||||
|
||||
/**
|
||||
* Главная страница
|
||||
*
|
||||
@@ -44,7 +49,7 @@ final class index extends core
|
||||
// Запись в буфер вывода (терминал)
|
||||
echo "Marina is ready!", PHP_EOL;
|
||||
|
||||
// Сообщение: "марина"
|
||||
// Сообщение: создано
|
||||
$discord->on(event::MESSAGE_CREATE, function (message $message, discord $discord) {
|
||||
// Игнорирование чат-роботов
|
||||
if ($message->author->bot) return;
|
||||
@@ -52,12 +57,94 @@ final class index extends core
|
||||
// Запись в буфер вывода (терминал)
|
||||
echo "{$message->author->username}: {$message->content}", PHP_EOL;
|
||||
|
||||
if (mb_stristr($message->content, 'марина') !== false) {
|
||||
$message->reply(_message::new()->setContent('ЗДАРОВА'));
|
||||
if ($message->author->id === '490821645028687873' || mb_stristr($message->content, 'мимк') !== false) {
|
||||
// Сообщение от Дмитрия Демина (мимк) (vladimirbaryshkin) или содержит его псевдоним
|
||||
|
||||
// Добавление реакции на его сообщение
|
||||
$message->react('😬');
|
||||
}
|
||||
|
||||
if ($message->author->id === '380876873468608522' && rand(0, 100) < 6) {
|
||||
// Сообщение от Даниила Богданова (godandem) и шанс 5%
|
||||
|
||||
// Отправка изображения: "надругался над даниилом богдановым"
|
||||
$message->channel->sendMessage(_message::new()->addFile('images/daniil.png'));
|
||||
}
|
||||
|
||||
foreach (explode(' ', $message->content) as $word) {
|
||||
// Перебор слов из текста сообщения
|
||||
|
||||
// Инициализация буфера символов для конвертации: UTF-8 -> ASCII+
|
||||
$buffer = [];
|
||||
|
||||
// Конвертация проверяемых слов
|
||||
$arsen = self::ascii('арсен', $buffer);
|
||||
$arsenchik = self::ascii('арсенчик', $buffer);
|
||||
$senya = self::ascii('сеня', $buffer);
|
||||
|
||||
// Конвертация слова
|
||||
$_word = self::ascii(mb_strtolower($word), $buffer);
|
||||
|
||||
if (
|
||||
($mirzaev = $message->guild->members->get('id', '534633964737134623')) instanceof member
|
||||
&& ($mirzaev->status === 'offline' || $mirzaev->status === null)
|
||||
&& rand(0, 100) < 16
|
||||
and levenshtein($_word, $arsen, 2, 2, 1) < 3
|
||||
|| levenshtein($_word, $arsenchik, 2, 1, 2) < 4
|
||||
|| (levenshtein($_word, $senya, 2, 2, 1) < 2 && $word !== 'меня' && $word !== 'тебя')
|
||||
) {
|
||||
// Найдено обращение к Арсену, он не в сети и шанс 15%
|
||||
|
||||
// Отправка сообщения
|
||||
$message->reply(_message::new()->setContent(match (rand(0, 5)) {
|
||||
0 => 'батя спит',
|
||||
1 => 'арсен проломил себе голову и находится в реанимации',
|
||||
2 => '"МАРИНА ПЕРЕДАЙ ИМ ЧТО Я В БЕГАХ В ТАДЖИКИСТАНЕ"',
|
||||
3 => 'ему раздавили яйца и он лежит в соседней комнате без сознания',
|
||||
4 => 'папа меня бьёт за то, что я не удаляю такие сообщения :sob:',
|
||||
5 => '<:smart:1105401468019822643>',
|
||||
default => '<:smart:1105401468019822643>'
|
||||
}));
|
||||
} else {
|
||||
// Не найдено обращение к Арсену
|
||||
|
||||
// Инициализация буфера символов для конвертации: UTF-8 -> ASCII+
|
||||
$buffer = [];
|
||||
|
||||
// Конвертация проверяемых слов
|
||||
$marina = self::ascii('марина', $buffer);
|
||||
$marishka = self::ascii('маришка', $buffer);
|
||||
$marinochka = self::ascii('мариночка', $buffer);
|
||||
$marinushka = self::ascii('маринушка', $buffer);
|
||||
$marya = self::ascii('маря', $buffer);
|
||||
|
||||
// Конвертация слова
|
||||
$_word = self::ascii(mb_strtolower($word), $buffer);
|
||||
|
||||
if (
|
||||
rand(0, 100) < 31
|
||||
and levenshtein($_word, $marina, 2, 2, 1) < 3
|
||||
|| levenshtein($_word, $marishka, 2, 1, 2) < 4
|
||||
|| levenshtein($_word, $marinochka, 2, 1, 2) < 4
|
||||
|| levenshtein($_word, $marinushka, 2, 1, 2) < 4
|
||||
|| (levenshtein($_word, $marya, 3, 3, 1) < 3 && $word !== 'мария')
|
||||
) {
|
||||
// Найдено обращение к Марине и шанс 30%
|
||||
|
||||
// Отправка сообщения
|
||||
$message->reply(_message::new()->setContent('ЗДАРОВА'));
|
||||
}
|
||||
|
||||
// Деинициализация неактуальных переменных
|
||||
unset($buffer, $marina, $marishka, $marinochka, $marya, $_word);
|
||||
}
|
||||
|
||||
// Деинициализация неактуальных переменных
|
||||
unset($buffer, $arsen, $arsenchik, $senya, $_word);
|
||||
}
|
||||
});
|
||||
|
||||
// Пользователь: обновление роли
|
||||
// Пользователь: обновление
|
||||
$discord->on(event::GUILD_MEMBER_UPDATE, function (member $new, discord $discord, ?member $old = null) {
|
||||
// Запись в буфер вывода (терминал)
|
||||
|
||||
|
30
mirzaev/marina/system/controllers/traits/converters.php
Normal file
30
mirzaev/marina/system/controllers/traits/converters.php
Normal file
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace mirzaev\marina\controllers\traits;
|
||||
|
||||
/**
|
||||
* Заготовки для конвертации строк
|
||||
*
|
||||
* @package mirzaev\marina\controllers\traits
|
||||
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
|
||||
*/
|
||||
trait converters
|
||||
{
|
||||
private static function utf8_to_extended_ascii(string $target, &$map)
|
||||
{
|
||||
// find all multibyte characters (cf. utf-8 encoding specs)
|
||||
$matches = array();
|
||||
if (!preg_match_all('/[\xC0-\xF7][\x80-\xBF]+/', $target, $matches))
|
||||
return $target; // plain ascii string
|
||||
|
||||
// update the encoding map with the characters not already met
|
||||
foreach ($matches[0] as $mbc)
|
||||
if (!isset($map[$mbc]))
|
||||
$map[$mbc] = chr(128 + count($map));
|
||||
|
||||
// finally remap non-ascii characters
|
||||
return strtr($target, $map);
|
||||
}
|
||||
}
|
BIN
mirzaev/marina/system/public/images/daniil.png
Normal file
BIN
mirzaev/marina/system/public/images/daniil.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 390 KiB |
Reference in New Issue
Block a user