• Добро пожаловать на сайт - wlux.net!

    FAQ по форуму

    1. Все сообщения до группы местный проходят модерацию от 1 минуты до 24 часа

    2. Сообщения учитываються в следующих разделах: Читать

    3.Что-бы скачать вложение нужно 2 сообщения.

    4.Личные переписки работают только с Администрацией форума

    5. Запрещено: Просить скрытый текст , спам, реклама, скам, ддос, кардинг и другая чернуха, нарушать любые законы РФ/СНГ = бан аккаунта

    6. Внимание! Мы не удаляем аккаунты с форума! Будьте внимательны ДО регистрации! Как удалить аккаунт на форуме?!

    5.Не понимаю, как и что тут работает у вас?!Как создавать темы, писать сообщения, как получать реакции. Почему не засчитывает сообщения. Все ответы здесь

This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

C# Гайд Создаём Discord-бота с использованием C# и библиотеки Discord.net

Оффлайн

wlux.net

Где волчьи уши, там волчьи зубы.
Команда форума
LV
7
 
20.06.2022
23 849
218
36
Награды
10
Пол
Муж.

Репутация:

  • Автор темы
  • Администратор
  • Модератор
  • Команда форума
  • #1
В сегодняшнем гайде я покажу как создать своего Discord-бота, используя C# и библиотеку Discord.net.

Что понадобиться:
1. Установленная Visual Studio с набором для разработки классических .NET приложений
2. Доступ к интернету
3. Компьютер
4. Клавиатура
5, Компьютерная мышь
6. Монитор
7. [Желательно] Небольшой опыт работы с Visual Studio 2022/2019/2017 и C#

Создание бота:
Прежде всего нам нужен сам бот, к которому мы будем подключаться

1. Переходим на

Пожалуйста, войдите или зерегистрируйтесь, чтобы увидеть скрытый текст.


2. Даём имя будущему боту и создаём приложение
3. В новом окне довольно много всего, в чём вы можете самостоятельно разобраться. Нас же интересует "OAuth2" и "Bot"
4. Переходим в "Bot" и по нажатию кнопку в правой части экрана создаём самого бота
5. В новом окне включаем эти две галочки

а также в "Bot Permissions" снизу выбираем "Administrator"
6. Теперь переходим в "OAuth2", ставим галочки "Bot" и "Administrator" и копируем ссылку для приглашения бота
7. Переходим по этой ссылке и добавляем бота на сервер. Поздравляю! На данный момент у нас есть бот, который всегда в оффлайне и ничего не делает. Давайте его оживим

Создание проекта:
Создаём консольное приложение .NET Core (кроссплатформенное, не .NET Framework). Думаю тут справится каждый, но если надо могу сделать гайд по установке Visual Studio и созданию проекта в ней.

Установка необходимых компонентов:
Отлично! Теперь нам нужно установить необходимые пакеты для работы с библиотекой Discord.net. Клацаем правой кнопкой мыши по нашему проекту и ищем NuGet
В открывшемся окне устанавливаем Discord.Addons.Hosting. Discord.Net, Discord.Net.Core, Discord.Net.WebSocket, Discord.Net.Commands и Microsoft.Extensions.DependencyInjection, Microsoft.Extensions.Logging, Microsoft.Extensions.Hosting, Microsoft.Extensions.Configuration


Запускаем бота:
Сам код:

C#:
   static async Task Main()
        {
            var builder = new HostBuilder()
                .ConfigureAppConfiguration(x =>
                {
                    var config = new ConfigurationBuilder()
                        .SetBasePath(Directory.GetCurrentDirectory())
                        .AddJsonFile("config.json", false, true)
                        .Build();

                    x.AddConfiguration(config);
                })
                .ConfigureLogging(x =>
                {
                    x.AddConsole();
                    x.SetMinimumLevel(LogLevel.Debug); // вместо Debug можно поставить другие уровни, но в нашем случае это самый оптимальный вариант
                })
                .ConfigureDiscordHost((context, config) =>
                {
                    config.SocketConfig = new DiscordSocketConfig
                    {
                        LogLevel = LogSeverity.Debug,
                        AlwaysDownloadUsers = false,
                        MessageCacheSize = 200
                    };

                    config.Token = context.Configuration["token"];
                })
                .UseCommandService((context, config) =>
                {
                    config.CaseSensitiveCommands = false;
                    config.LogLevel = LogSeverity.Debug;
                    config.DefaultRunMode = RunMode.Async;
                })
                .ConfigureServices((context, services) =>
                {
                    // чуть позже мы это раскоментируем
                    //services
                    //    .AddHostedService<CommandHandler>();
                })
                // думаю тут понятно
                .UseConsoleLifetime();


            var host = builder.Build();
            using (host)
            {
                // запускаем бота
                await host.RunAsync();
            }
        }
(НАВЕДИТЕСЬ НА ОШИБКУ ЕСЛИ ОНА ВОЗНИКАЕТ - СКОРЕЕ ВСЕГО ВЫ ПРОСТО НЕ ПОДКЛЮЧИЛИ В USING'АХ БИБЛИОТЕКИ, КОТОРЫЕ МЫ УСТАНАВЛИВАЛИ В НАЧАЛЕ ГАЙДА)

Но не спешите это запускать. Теперь нам нужно добавить файл конфигурации config.json, а также обработчик команд и сами команды.
Кликаем правой кнопкой мыши по проекту и создаём json файл и пишем в нем это:
JavaScript:
{
  "token": "ВАШ ТОКЕН",
  "prefix":  "!"
}

Чтобы получить токен переходим

Пожалуйста, войдите или зерегистрируйтесь, чтобы увидеть скрытый текст.


во вкладку "Bot" и нажимаем Copy. Вставляем его вместо "ВАШ ТОКЕН"
ВАЖНО! Клацаем по config.json (или как вы его там назвали) и переходим, в моем случае. в Properties. В открывшемся окне ставим вместо Do not copy -> Copy if newer
Теперь с помощью CTRL+F5 можно запустить нашего бота и он будет онлайн в дискорде до тех пор, пока вы не закроете приложение

Создание команд и обработчика:

В CommandHandler.cs:
Скрытое содержимое доступно для зарегистрированных пользователей!


Наш бот теперь может обрабатывать команды, почти готово! Осталось лишь добавить файл с командами. Опять же для удобства создадим папку Modules и добавим в нее файл класса General.cs
Кстати, раскоментируем-ка кое-что в Program.cs:
Скрытое содержимое доступно для зарегистрированных пользователей!


В General.cs:
C#:
public class General : ModuleBase<SocketCommandContext>
{

}

Класс и всё необходимое создано, как же добавить команды?
Создадим команду, которая повторяет сообщение пользователя:
C#:
 public class General : ModuleBase<SocketCommandContext>
    {
        [Command("echo")]
        private async Task Echo(string msg)
        {
            await Context.Channel.SendMessageAsync(msg);
        }
    }

Или что-нибудь поинтереснее, например, вывод информации о пользователе:
C#:
  [Command("info")]
        private async Task Info(SocketGuildUser socketGuildUser = null)
        {
            if (socketGuildUser == null)
            {
                var embed = new EmbedBuilder()
                    .WithColor(Color.Orange)
                    .WithTitle(Context.User.Username)
                    .WithImageUrl(Context.User.GetAvatarUrl())
                    .AddField("User ID:", Context.User.Id, true)
                    .AddField("Created at", Context.User.CreatedAt, true);

                await Context.Channel.SendMessageAsync(embed: embed.Build());
            }
            else
            {
                var embed = new EmbedBuilder()
                    .WithColor(Color.Orange)
                    .WithTitle(socketGuildUser.Username)
                    .WithImageUrl(socketGuildUser.GetAvatarUrl())
                    .AddField("User ID:", socketGuildUser.Id, true)
                    .AddField("Created at:", socketGuildUser.CreatedAt, true);

                await Context.Channel.SendMessageAsync(embed: embed.Build());
            }
        }


Завершение:
На этом пока что всё.
 
G Оффлайн

gfffg

Участник
LV
0
 
10.08.2024
2
0
6
26

Репутация:

Прикольный гайд, протестил у меня получилось за пастить
 
T Оффлайн

Timsadness

Участник
LV
2
 
15.05.2024
12
0
25
Награды
2
22

Репутация:

не особо в C# разбираюсь, бот не асинхронный?
 
A Оффлайн

AlexRandomUser

Местный
Участник
LV
2
 
25.10.2024
125
0
25
Награды
4

Репутация:

Интересно, спасибо за гайд, возьму на вооружение
 

Поиск по форуму

Данный сайт использует cookie. Вы должны принять их для продолжения использования. Узнать больше....