Discord. NET Не отвечает на определенную команду (C#) - PullRequest
0 голосов
/ 01 августа 2020

Я пытаюсь создать Discord-бота с Discord. net, который захватывает все идентификаторы вариантов из магазина и отправляет сообщения Discord с ними в таком формате:

var1
var2
var3
etc

После тестирования я нашел способ захватить и десериализовать данные, однако из-за ограничений с дискордом мне пришлось бы использовать RunMode Asyn c, чтобы они не закрывали соединение. При использовании этого и попытке выполнить команду бот не возвращает ответа. Вот мой код для команды:

using System;
using System.Reflection;
using System.Threading.Tasks;
using Discord;
using Discord.Commands;
using Discord.WebSocket;
using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using QuickType;

namespace ShopifyATC.modules
{
    public class VariantScraper: ModuleBase<SocketCommandContext>
    {
        
        [Command("variant", RunMode = RunMode.Async)]
        public async Task Variant(string varUrl)
        {

            var shopifyId = await GrabShopifyVar(varUrl);
            var bip = "";
            

            
            while (shopifyId.Product != null)
                foreach (var variant in shopifyId.Product.Variants)
                {
                    bip += $"{variant}\n";
                }
            
            
            static async Task<Temperatures> GrabShopifyVar(string varUrl)
            {
                var httpClient = new HttpClient();

                var variantGrabRequest = new HttpRequestMessage
                {
                    RequestUri = new Uri(varUrl += ".json"),
                    Method = HttpMethod.Get
                };
                variantGrabRequest.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36");

                var variantGrabResponse = await httpClient.SendAsync(variantGrabRequest);

                var variantGrabContent = 
                    await variantGrabResponse.Content.ReadAsStringAsync();

                var variantGrabResponseData =
                    JsonConvert.DeserializeObject<Temperatures>(variantGrabContent);
                return variantGrabResponseData;
            }

            await Context.Channel.SendMessageAsync(bip);
            Console.WriteLine("n");
        }
    }


}

Есть идеи, как это исправить или почему это происходит? Если я не использую RunMode Asyn c, Discord закрывает соединение и возвращает следующее: «Обработчик MessageReceived блокирует задачу шлюза».

Спасибо,

  • Mo

1 Ответ

1 голос
/ 01 августа 2020

while l oop никогда не останавливается, поэтому ваша операция никогда не завершается. Вот почему блоки команд.

...