Перейти к содержанию
  • Регистрация

Браузеры

  • 611
  • 4
Проверить

Промокоды | Купоны \\ Взаимообмен | Товарищество

  • 8 158
  • 6
Проверить

Кошелёк в Telegram | Wallet

  • 1 040
  • 1
Проверить

Создаём Discord-бота на PHP


Рекомендуемые сообщения

  • Aprel Team

Шаг 1: Подготовка бота

1. Переходим по ссылке и создаём новое приложение: https://discord.com/developers/applications.
2. Во вкладке Bot добавляем бота, подтверждаем выбор в появившемся окне.
3. Во вкладке OAuth2 -> URL Generator ставим галочку напротив пункта bot, ниже выбираем необходимые права доступа и копируем появившуюся внизу ссылку на инвайт бота.
4. Переходим по скопированной ссылке и приглашаем бота в нужный нам сервер.
5. Генерируем токен бота и сохраняем его у себя.
6. Включаем SERVER MEMBERS INTENT, дабы отслеживать события пользователей (например, вход на сервер).

Шаг 2: Скрипт

Подключаем библиотеку через composer:

composer require team-reflex/discord-php

Разберём только базовые вещи. 

Начинаем с подключения библиотеки, импортируем необходимые для работы классы:

<?php

require __DIR__ . '/vendor/autoload.php';


use Discord\Discord;
use Discord\WebSockets\Event;
use Discord\WebSockets\Intents;
use Discord\Parts\User\Member;
use Discord\Parts\Channel\Message;

Создаём экземпляр класса Discord:

$ds = new Discord( [
    'token' => '*****************', // Токен, который мы сгенерировали ранее
    'intents' => Intents::getDefaultIntents() | Intents::GUILD_MEMBERS, // Понадобится для отслеживания событий участников
] );

Далее вставляем конструкцию, внутри которой будем прописывать конкретные события для отслеживания. В конец сразу добавил $ds->run() для запуска бота:

$ds->on( 'ready', function( $ds )
{

    // Тут продолжим писать код

} );


$ds->run();

И первое событие, которое мы обработаем - так это входящие сообщения:

$ds->on( Event::MESSAGE_CREATE, function( Message $msg, Discord $ds )
{

    // Тут будем обрабатывать входящие

} );

Добавим тестовую команду:

if ( $msg->content == '/бот' )
{
    $msg->reply( 'Привет, ' . $msg->author->username );
}

Да, бот пока не запущен и не готов к работе, но я забегу наперёд.

С помощью метода ban() можно заблокировать участника. В первом параметре можно указать, за какой промежуток времени нужно удалить сообщения этого пользователя (я для примера удалю сообщения за последние сутки), а во втором - причину бана:

else if ( str_contains( $msg->content, 'админ лох' ) )
{
    $msg->member->ban( 1, 'reason' );
}

Такое условие на практике, конечно, использоваться никогда не будет, да и в принципе банить людей по ключевым словам - решение не шибко надёжное. Но сейчас я просто показываю, как можно банить юзеров средствами библиотеки.

В первом шаге мы включили Members Intent, поэтому теперь можем отслеживать вход новых участников на наш сервер:

$ds->on( Event::GUILD_MEMBER_ADD, function( Member $member, Discord $ds )
{

    // Тут продолжим писать код

} );

Давайте выдадим новым участникам какую-нибудь роль, а для этого нам понадобится получить ID этой самой роли. Чтобы его получить - включаем режим разработчика (Настройки -> Настройки приложения -> Расширенное).
Ну, и теперь копируем ID нужной роли.

Теперь мы можем воспользоваться методом addRole(), передав в него скопированный айдишник (в виде строки):

$member->addRole( '1007995229674156102' );

Ну, и ещё поменяем никнейм присоединившегося участника на сервере методом setNickname():

$member->setNickname( 'Новый никнейм' );

Весь код:

<?php

require __DIR__ . '/vendor/autoload.php';


use Discord\Discord;
use Discord\WebSockets\Event;
use Discord\WebSockets\Intents;
use Discord\Parts\User\Member;
use Discord\Parts\Channel\Message;




$ds = new Discord( [
    'token' => '******************',
    'intents' => Intents::getDefaultIntents() | Intents::GUILD_MEMBERS,
] );



$ds->on( 'ready', function( $ds )
{


    $ds->on( Event::MESSAGE_CREATE, function( Message $msg, Discord $ds )
    {

        if ( $msg->content == '/бот' )
        {
            $msg->reply( 'Привет, ' . $msg->author->username );
        }

        else if ( str_contains( $msg->content, 'админ лох' ) )
        {
            $msg->member->ban( 1, 'reason' );
        }

    } );

    $ds->on( Event::GUILD_MEMBER_ADD, function( Member $member, Discord $ds )
    {

        $member->addRole( '1007995229674156102' );
        $member->setNickname( 'Новый никнейм' );

    } );


} );


$ds->run();

Шаг 3: Запуск бота

Запустить бота можно на OpenServer. Для этого нужно перейти в консоль.

И ввести следующую команду (путь, естественно, указывать нужно свой):

php "D:\DiscordBOT\bot.php"

Если же у вас есть купленный хост, который предоставляет возможность юзать консоль, то запустить бота можно там. ISPManager принцип:

1. Переходим во вкладку Shell-клиент.
2. Вводим следующую команду.

/opt/php/8.1/bin/php www/site.ru/bot.php

Путь и версию PHP меняем под себя.

Чтобы быстро вставить команду в консоли - нажмите ПКМ -> Paste from browser:

На этом всё!

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...