1010111100100010011111000
@1010111100100010011111000
C#, Java, PHP, SQL

Discord бот поддерживает соединение, а затем отключается, что делать?

Здравствуй Toster! Не знаю ответят мне здесь или нет, но я попытаюсь задать здесь вопрос ибо на зарубежных форумах ответ на свой вопрос я не нашёл.

Я Занялся разработкой собственного Discord Бота на языке C#, используя пакеты: Discord.Net и Newtonsoft.Json. Я выбрал JSON в качестве хорошей альтернативы другим постоянным хранилищам данных. Создав заготовку для бота по разным учебникам, я решил попробовать его подключить к своему тестовому серверу в Discord. Запустив консольное приложение без отладки, бот по каким-то непонятным причинам пытался подключиться а позже отключался и так бесконечно продолжалось. (С библиотекой Discord.Net работаю впервые)

5a9a3dfc929c2076956633.png
- - - - - - - - - - - - - - - - - - - - - - - - - -
Главный скрипт Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Discord.WebSocket;
using Discord;

namespace DiscordPetyaBot
{
    class Program
    {
        DiscordSocketClient _client;
        CommandHandler _handler;

        static void Main(string[] args)
        => new Program().StartAsync().GetAwaiter().GetResult();

        public async Task StartAsync()
        {
            if (Config.bot.token == "" || Config.bot.token == null) return;
            _client = new DiscordSocketClient(new DiscordSocketConfig { LogLevel = LogSeverity.Verbose});
            _client.Log += Log;
            await _client.LoginAsync(TokenType.Bot, Config.bot.token);
            await _client.StartAsync();
            _handler = new CommandHandler();
            await _handler.InitializeAsync(_client);
            await Task.Delay(-1);
        }

        private async Task Log (LogMessage msg)
        {
            Console.WriteLine(msg.Message);
        }
    }
}
CommandHandler.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using Discord.Commands;
using Discord.WebSocket;

namespace DiscordPetyaBot
{
    class CommandHandler
    {
        DiscordSocketClient _client;
        CommandService _service;

        public async Task InitializeAsync(DiscordSocketClient client)
        {
            _client = client;
            _service = new CommandService();
            await _service.AddModulesAsync(Assembly.GetEntryAssembly());
            _client.MessageReceived += HandleCommandAsync;
        }

        private async Task HandleCommandAsync(SocketMessage s)
        {
            var msg = s as SocketUserMessage;
            if (msg == null) return;
            var context = new SocketCommandContext(_client, msg);
            int argPos = 0;

            if (msg.HasStringPrefix(Config.bot.cmdPrefix, ref argPos) || msg.HasMentionPrefix(_client.CurrentUser, ref argPos))
            {
                var result = await _service.ExecuteAsync(context, argPos);
                if (!result.IsSuccess && result.Error != CommandError.UnknownCommand)
                {
                    Console.WriteLine(result.ErrorReason);
                }
            }
        }
    }
}

Что может быть не так? Использую свежие версии библиотек, токен бота 100% верен...
Может я не один сталкивался с этой проблемой?)
Заранее Спасибо!
  • Вопрос задан
  • 1325 просмотров
Решения вопроса 1
1010111100100010011111000
@1010111100100010011111000 Автор вопроса
C#, Java, PHP, SQL
5a9aa18218d55860029384.png
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Спустя 6 часов, я наконец смог решить проблему самостоятельно!
Проблема заключалось в отсутствии в Windows 7 поставщика веб-узлов (WebSocket), используемый DiscordSocketClient. Для решения этой проблемы надо было загрузить библиотеку в решение. Называется он так: Discord.Net.Providers.WS4Net. После чего нужно изменить конструктор вашего клиента:
_client = new DiscordSocketClient(new DiscordSocketConfig { WebSocketProvider = Discord.Net.Providers.WS4Net.WS4NetProvider.Instance });
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы