Compare commits

...

6 Commits

3 changed files with 232 additions and 18 deletions

View File

@ -14,6 +14,7 @@ use Discord\Discord as discord,
Discord\Parts\Guild\Role as role, Discord\Parts\Guild\Role as role,
Discord\Parts\Guild\CommandPermissions as permissions, Discord\Parts\Guild\CommandPermissions as permissions,
Discord\Parts\User\Member as member, Discord\Parts\User\Member as member,
Discord\Parts\Guild\ScheduledEvent as schedule,
Discord\Parts\Interactions\Interaction as interaction, Discord\Parts\Interactions\Interaction as interaction,
Discord\WebSockets\Event as event, Discord\WebSockets\Event as event,
Discord\Parts\Interactions\Command\Command as command, Discord\Parts\Interactions\Command\Command as command,
@ -22,7 +23,9 @@ use Discord\Discord as discord,
Discord\Parts\Interactions\Command\Option as option; Discord\Parts\Interactions\Command\Option as option;
// Встроенные библиотеки // Встроенные библиотеки
use exception; use exception,
datetime,
datetimezone;
/** /**
* Контроллер головного управления * Контроллер головного управления
@ -64,8 +67,8 @@ final class index extends core
$message->react('😬'); $message->react('😬');
} }
if ($message->author->id === '380876873468608522' && rand(0, 100) < 6) { if ($message->author->id === '380876873468608522' && rand(0, 100) < 2) {
// Сообщение от Даниила Богданова (godandem) и шанс 5% // Сообщение от Даниила Богданова (godandem) и шанс 1%
// Отправка изображения: "надругался над даниилом богдановым" // Отправка изображения: "надругался над даниилом богдановым"
$message->channel->sendMessage(_message::new()->addFile('images/daniil.png')); $message->channel->sendMessage(_message::new()->addFile('images/daniil.png'));
@ -77,6 +80,40 @@ final class index extends core
// Инициализация буфера символов для конвертации: UTF-8 -> ASCII+ // Инициализация буфера символов для конвертации: UTF-8 -> ASCII+
$buffer = []; $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) < 26
and levenshtein($_word, $arsen, 2, 2, 1) < 3
|| levenshtein($_word, $arsenchik, 2, 1, 2) < 4
|| (levenshtein($_word, $senya, 2, 2, 1) < 2 && $word !== 'меня' && $word !== 'тебя')
) {
// Найдено обращение к Арсену, он не в сети и шанс 25%
// Отправка сообщения
$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); $marina = self::ascii('марина', $buffer);
$marishka = self::ascii('маришка', $buffer); $marishka = self::ascii('маришка', $buffer);
@ -88,14 +125,30 @@ final class index extends core
$_word = self::ascii(mb_strtolower($word), $buffer); $_word = self::ascii(mb_strtolower($word), $buffer);
if ( if (
levenshtein($_word, $marina, 2, 2, 1) < 3 rand(0, 100) < 31
and
match ($word) {
'машинка', 'мария', 'малинка', 'машина', 'малина' => false,
default => true
}
&& (levenshtein($_word, $marina, 2, 2, 1) < 3)
|| levenshtein($_word, $marishka, 2, 1, 2) < 4 || levenshtein($_word, $marishka, 2, 1, 2) < 4
|| levenshtein($_word, $marinochka, 2, 1, 2) < 4 || levenshtein($_word, $marinochka, 2, 1, 2) < 4
|| levenshtein($_word, $marinushka, 2, 1, 2) < 4 || levenshtein($_word, $marinushka, 2, 1, 2) < 4
|| (levenshtein($_word, $marya, 3, 3, 1) < 3 && $word !== 'мария') || (levenshtein($_word, $marya, 3, 3, 1) < 3)
) { ) {
$message->reply(_message::new()->setContent('ЗДАРОВА')); // Найдено обращение к Марине и шанс 30%
// Отправка сообщения
$message->reply(_message::new()->setContent(rand(0, 100) < 10 ? '🥺' : 'ЗДАРОВА'));
} }
// Деинициализация неактуальных переменных
unset($buffer, $marina, $marishka, $marinochka, $marya, $_word);
}
// Деинициализация неактуальных переменных
unset($buffer, $arsen, $arsenchik, $senya, $_word);
} }
}); });
@ -242,13 +295,166 @@ final class index extends core
*/ */
}); });
foreach ($discord->guilds as $guild) {
// Перебор серверов
if (!($guild->guild_scheduled_events->get('name', 'Saturdaynik 🧹') instanceof schedule)) {
// Не найдено событие: "субботник"
// Инициализация даты субботника
$date = new datetime('next saturday', new datetimezone('UTC'));
if ($trash = $guild->channels->get('name', 'trash')) {
// Найден канал: "trash"
if ($saturdaynik = $trash->threads->get('name', 'Saturdaynik 🧹')) {
// Найден канал для субботников
$saturdaynik->sendMessage("Next saturdaynik starts on <t:{$date->format('U')}:D>")
->then(function ($message) use ($discord, $date, $guild, $saturdaynik) {
// Закрепление сообщения
$saturdaynik->pinMessage($message, 'Notification about the next saturdaynik')
->then(function ($message) use ($saturdaynik) {
$saturdaynik->getMessageHistory(['limit' => 1])->then(function ($messages) {
// Удаление сообщения о том, что Марина закрепила сообщение
$messages->first()->delete();
});
});
// Создание события
$guild->guild_scheduled_events->save(
new schedule($discord, [
'name' => 'Saturdaynik 🧹',
'description' => "Global saturday cleaning on our server - saturdaynik!\nYour keyboards will be shine! 😼✨",
'scheduled_start_time' => $date->format(datetime::ATOM),
'scheduled_end_time' => (clone $date)->modify('+1 day')->format(datetime::ATOM),
'image' => \Discord\imageToBase64('images/saturdaynik/cover.jpg'),
'entity_type' => 3,
'entity_metadata' => [
'location' => $message->getLinkAttribute()
],
'privacy_level' => 2
])
)->then(function ($event) use ($guild) {
if ($events = $guild->channels->get('name', 'events')) {
// Найден канал: "events
// Инициализация буфера идентификатора роли для оповещения о событиях
$id = '';
foreach ($guild->roles as $role) {
// Чтение ролей
if ($role->name === "Events") {
// Найдена роль для оповещения о событиях
// Запись идентификатора роли
$id = $role->id;
}
}
// Отправка сообщения с приглашением присоединиться к субботнику
$events->sendMessage((empty($id) ? '' : "<@&{$id}> ") . "https://discord.gg/pMZaxvH4?event={$event->id}");
}
});
});
} else {
// Не найден канал для субботников (подразумевается)
// Создание канала (ветки) для субботников
$trash->startThread([
'name' => 'Saturdaynik 🧹'
], 'Thread for saturdaynik')
->then(function ($thread) use ($discord, $date, $guild, $trash) {
// Отправка первого сообщения в ветке с полной версией обложки
$thread->sendMessage(
_message::new()
->addFile('images/saturdaynik/source.jpg')
)
->then(function ($message) use ($discord, $date, $guild, $trash) {
if ($saturdaynik = $trash->threads->get('name', 'Saturdaynik 🧹')) {
// Найден канал для субботников
$saturdaynik->sendMessage("Next saturdaynik starts on <t:{$date->format('U')}:D>")
->then(function ($message) use ($discord, $date, $guild, $saturdaynik) {
// Закрепление сообщения
$saturdaynik->pinMessage($message, 'Notification about the next saturdaynik')
->then(function ($message) use ($saturdaynik) {
$saturdaynik->getMessageHistory(['limit' => 1])->then(function ($messages) {
// Удаление сообщения о том, что Марина закрепила сообщение
$messages->first()->delete();
});
});
// Создание события
$guild->guild_scheduled_events->save(
new schedule($discord, [
'name' => 'Saturdaynik 🧹',
'description' => "Global saturday cleaning - saturdaynik!\nYour keyboards will be shine! 😼✨",
'scheduled_start_time' => $date->format(datetime::ATOM),
'scheduled_end_time' => (clone $date)->modify('+1 day')->format(datetime::ATOM),
'image' => \Discord\imageToBase64('images/saturdaynik/cover.jpg'),
'entity_type' => 3,
'entity_metadata' => [
'location' => $message->getLinkAttribute()
],
'privacy_level' => 2
])
)->then(function ($event) use ($guild) {
if ($events = $guild->channels->get('name', 'events')) {
// Найден канал: "events
// Инициализация буфера идентификатора роли для оповещения о событиях
$id = '';
foreach ($guild->roles as $role) {
// Чтение ролей
if ($role->name === "Events") {
// Найдена роль для оповещения о событиях
// Запись идентификатора роли
$id = $role->id;
}
}
// Отправка сообщения с приглашением присоединиться к субботнику
$events->sendMessage((empty($id) ? '' : "<@&{$id}> ") . "https://discord.gg/pMZaxvH4?event={$event->id}");
}
});
});
} else {
// Не найден канал для субботников (подразумевается)
}
});
});
}
}
}
}
$discord->on(event::GUILD_SCHEDULED_EVENT_CREATE, function (schedule $schedule, Discord $discord) {
/* var_dump($schedule); */
});
$discord->application->commands->save(new command($discord, [ $discord->application->commands->save(new command($discord, [
'name' => 'dreamers', 'name' => 'dreamers',
'description' => 'BEBRA DREAMERS', 'description' => 'BEBRA DREAMERS',
'options' => [(new option($discord)) 'options' => [
(new option($discord))
->setName('invite') ->setName('invite')
->setDescription('Send an invitation link to "BEBRA DREAMERS"') ->setDescription('Link to "BEBRA DREAMERS"')
->setType(option::SUB_COMMAND)] ->setType(option::SUB_COMMAND),
(new option($discord))
->setName('rules')
->setDescription('Rules of "BEBRA DREAMERS"')
->setType(option::SUB_COMMAND)
]
])); ]));
$discord->listenCommand(['dreamers', 'invite'], function (interaction $interaction) { $discord->listenCommand(['dreamers', 'invite'], function (interaction $interaction) {
@ -258,6 +464,14 @@ final class index extends core
// Отправка ссылки с приглашением присоединиться на сервер BEBRA DREAMERS // Отправка ссылки с приглашением присоединиться на сервер BEBRA DREAMERS
if ($interaction->data->options->has('invite')) $interaction->respondWithMessage(_message::new()->setContent('https://discord.bebra.team')); if ($interaction->data->options->has('invite')) $interaction->respondWithMessage(_message::new()->setContent('https://discord.bebra.team'));
}); });
$discord->listenCommand(['dreamers', 'rules'], function (interaction $interaction) {
// Игнорирование чат-роботов
if ($interaction->user->bot) return;
// Отправка ссылки с приглашением присоединиться на сервер BEBRA DREAMERS
if ($interaction->data->options->has('rules')) $interaction->respondWithMessage(_message::new()->setContent('https://rules.bebra.team'));
});
}); });
$this->discord->run(); $this->discord->run();

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 KiB