Как я могу сохранить мой бот Discord в системе без обращения к Task.Delay? - PullRequest
0 голосов
/ 04 февраля 2020

В настоящее время у меня работает бот Discord, но он не останется в системе, если я не добавлю await Task.Delay(-1) к методу, который я использую для входа. Я подозреваю, что это вызывает у меня некоторые проблемы в последующих частях моего кода.

Вот как я подключаюсь:

        public override async Task ConnectToClientAsync()
        {
            await this._client.LoginAsync(TokenType.Bot, this.Token);
            await this._client.StartAsync();
            await Task.Delay(-1);
        }

Как мне сохранить моего бота в сети, не прибегая к помощи к использованию Task.Delay(-1)? Он просто входит в систему и после успешного завершения останавливает программу (поскольку она не остается в системе без этой задержки).

Main

    class Program
    {
        static async Task Main(string[] args)
        {
            var newBot = new WelcomeBot(674094599903641628);
            await newBot.LaunchBot();
        }
    }

WelcomeBot

    public class WelcomeBot : BasicBot, IMessageWriter, IMessageReader
    {

        private ulong _channelId;

        public WelcomeBot(ulong channelId) : base()
        {
            this._client = new DiscordSocketClient();
            this._channelId = channelId;

            ConfigureBotFunctionality();

        }

        private void ConfigureBotFunctionality()
        {
            Interact_UserEntryAndExit();
        }

        private void Interact_UserEntryAndExit()
        {
            this._client.UserJoined += AnnounceUserJoiningAsync;
            this._client.UserLeft += AnnounceUserLeavingAsync;
            this._client.Connected += OnConnectAnnouncementAsync;
        }

        public async Task LaunchBot()
        {
            await ConnectToClientAsync();
        }

        public override async Task ConnectToClientAsync()
        {
            await this._client.LoginAsync(TokenType.Bot, this.Token);
            await this._client.StartAsync();
            await Task.Delay(-1);
        }

        private async Task OnConnectAnnouncementAsync()
        {
            // ..
        }

        private async Task AnnounceUserLeavingAsync(SocketGuildUser leavingUser)
        {
            //..
        }

        private async Task AnnounceUserJoiningAsync(SocketGuildUser joinedUser)
        {
            //..
        }

        // Other functions.
   }

1 Ответ

0 голосов
/ 07 февраля 2020

Просто добавьте небольшую задержку, 300 или 400 или что-то еще.

...