Перейти к содержанию
  • Язык

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

Featured Replies

Опубликовано
  • Граждане

Шаг 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:

На этом всё!

Для публикации сообщений создайте учётную запись или авторизуйтесь

Последние посетители 0

  • Ни одного делегата форума не просматривает данную страницу

Важная сводка

Мы разместили cookie-файлы на твоё устройство, чтобы помочь сделать этот форум лучше. Ты можешь корректировать своё управление cookie-файлами, или же продолжить без каких-либо корректировок.

Иконка перчаток с несколькими звуками
Иконка перчаток

Досье

Навигация

Розыск

Розыск

Настройка push-извещений браузера

Chrome (Android)
  1. Нажми на значок замка рядом с адресной строкой.
  2. Нажми Разрешения → Извещения.
  3. Корректируй свои предпочтения.
Chrome (Desktop)
  1. Нажми на значок замка в адресной строке.
  2. Выбери Управление сайта.
  3. Разыщи Изввещения и корректируй свои предпочтения.