【发布时间】: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