【问题标题】:Discord.NET Not Responding to Certain Command (C#)Discord.NET 不响应某些命令 (C#)
【发布时间】:2020-11-21 20:14:41
【问题描述】:

我正在尝试使用 discord.net 创建一个不和谐机器人,该机器人从商店中获取所有变体 ID 并发送不和谐消息,其格式如下:

var1
var2
var3
etc

经过测试,我找到了一种获取和反序列化数据的方法,但是由于不和谐的限制,我不得不使用 RunMode Async 来防止它们关闭连接。当使用它并尝试执行命令时,机器人不返回任何响应。这是我的命令代码:

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 异步不和谐关闭连接并返回以下内容:“MessageReceived 处理程序正在阻止网关任务。”

谢谢,

【问题讨论】:

  • 简单地调试您的代码会显示无限循环问题。

标签: c# json discord discord.net


【解决方案1】:

while 循环永远不会停止,因此您的操作永远不会完成。这就是命令阻塞的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-13
    • 2017-11-11
    • 1970-01-01
    • 2018-07-21
    • 2021-07-07
    • 2018-01-25
    • 2017-03-05
    • 1970-01-01
    相关资源
    最近更新 更多