如何在Discord.NET命令中调用API?
How to call API in Discord.NET command?
我在我的 Discord Bot 中调用 API 时遇到问题,我正在尝试学习异步,等待,但似乎我卡住了。
这是我的呼叫 API class 我正在呼叫 API.
public async Task<Root> GetInfoAsync()
{
string path = "https://onemocneni-aktualne.mzcr.cz/api/v2/covid-19/zakladni-prehled.json";
Root data = null;
HttpResponseMessage response = await client.GetAsync(path);
if (response.IsSuccessStatusCode)
{
string json = await response.Content.ReadAsStringAsync();
data = JsonConvert.DeserializeObject<Root>(json);
}
return data;
}
public async Task<string> VypisAsync()
{
Root data = await this.GetInfoAsync();
int deaths = data.data[0].umrti,
recovered = data.data[0].vyleceni,
positive = data.data[0].aktivni_pripady,
hospitalized = data.data[0].aktualne_hospitalizovani;
return $"Aktualni situace v ČR:\n" +
$"vyleceni: {recovered}\n" +
$"aktualne nemocni: {positive}\n" +
$"hospitalizovani: {hospitalized}\n" +
$"zemreli: {deaths}";
}
这是我的 covid 命令
public class CovidModule : ModuleBase<SocketCommandContext>
{
// ~void -> current covid situation in CZ
[Command("covid")]
[Summary("shows current covid situation in CZ")]
public async Task<Task> CovidAsync()
{
CovidApi api = new CovidApi();
return ReplyAsync(await api.VypisAsync());
}
}
我知道所有其他命令 return 任务,但我不知道如何实现它。
ReplyAsync()
是一个异步方法,所以你需要等待它。
您的 CovidAsync()
方法不是 return 实际值,因此在同步世界中它的 return 值将是 void
。因为它是一个异步方法,所以你 return Task
代替。
public async Task CovidAsync()
{
CovidApi api = new CovidApi();
await ReplyAsync(await api.VypisAsync());
}
顺便说一句,让 CovidApi
成为您 CovidModule
的成员会更好。这样你就不需要在每个方法中不断更新它。
我在我的 Discord Bot 中调用 API 时遇到问题,我正在尝试学习异步,等待,但似乎我卡住了。
这是我的呼叫 API class 我正在呼叫 API.
public async Task<Root> GetInfoAsync()
{
string path = "https://onemocneni-aktualne.mzcr.cz/api/v2/covid-19/zakladni-prehled.json";
Root data = null;
HttpResponseMessage response = await client.GetAsync(path);
if (response.IsSuccessStatusCode)
{
string json = await response.Content.ReadAsStringAsync();
data = JsonConvert.DeserializeObject<Root>(json);
}
return data;
}
public async Task<string> VypisAsync()
{
Root data = await this.GetInfoAsync();
int deaths = data.data[0].umrti,
recovered = data.data[0].vyleceni,
positive = data.data[0].aktivni_pripady,
hospitalized = data.data[0].aktualne_hospitalizovani;
return $"Aktualni situace v ČR:\n" +
$"vyleceni: {recovered}\n" +
$"aktualne nemocni: {positive}\n" +
$"hospitalizovani: {hospitalized}\n" +
$"zemreli: {deaths}";
}
这是我的 covid 命令
public class CovidModule : ModuleBase<SocketCommandContext>
{
// ~void -> current covid situation in CZ
[Command("covid")]
[Summary("shows current covid situation in CZ")]
public async Task<Task> CovidAsync()
{
CovidApi api = new CovidApi();
return ReplyAsync(await api.VypisAsync());
}
}
我知道所有其他命令 return 任务,但我不知道如何实现它。
ReplyAsync()
是一个异步方法,所以你需要等待它。
您的 CovidAsync()
方法不是 return 实际值,因此在同步世界中它的 return 值将是 void
。因为它是一个异步方法,所以你 return Task
代替。
public async Task CovidAsync()
{
CovidApi api = new CovidApi();
await ReplyAsync(await api.VypisAsync());
}
顺便说一句,让 CovidApi
成为您 CovidModule
的成员会更好。这样你就不需要在每个方法中不断更新它。