【问题标题】:client.GetChannel(%channelID%) return nullclient.GetChannel(%channelID%) 返回 null
【发布时间】:2018-08-23 09:30:18
【问题描述】:

我正在通过 discord.Net v 1.0.2 创建不和谐机器人

我想从我的服务器获取特定频道我试图通过 Client.GetChannel(%channelID%) 获取该频道(客户端是我的机器人类中 DiscordSocketClient 类型的属性)但该方法只返回 null 和我只是想不通为什么。我在互联网上搜索了很多类似的帖子,但没有任何效果。有我的机器人的启动方法和我试图获取频道的方法:

public async Task StartAsync()
{
    await Client.StartAsync();
    Client.MessageReceived += Client_MessageReceived;
    Client.Connected += Client_Connected;
    Logger.WriteLog("Bot started");
    await Task.Delay(-1);
}

private async Task Client_Connected()
{
    var channel = Client.GetChannel(414543303187496962);
}

【问题讨论】:

  • 如何返回null?你在做什么检查?

标签: c# .net null discord discord.net


【解决方案1】:

改用Client.Ready 事件处理程序,并确保机器人确实在该特定频道中,并且这次应该可以工作。

所以它看起来像这样:

public async Task StartAsync()
{
    await Client.StartAsync();
    Client.MessageReceived += Client_MessageReceived;
    Client.Ready += Client_Ready;
    Logger.WriteLog("Bot started");
    await Task.Delay(-1);
}

private async Task Client_Ready()
{
    var channel = Client.GetChannel(414543303187496962);
}

【讨论】:

  • 非常感谢它对我的帮助:D。但我不明白 client.Ready 和 client.Connected 之间有什么区别:/
  • @PetrKotáb 我不是很清楚自己,所以如果我错了,有人可以纠正我。基本上客户端有ConnectedLoggedInReady eventhandler 状态供我们使用。每当您运行客户端时,它都会从Connected 变为LoggedIn,最后进入Ready 状态。我猜Connected 状态是指客户端设法建立与 Discord 的连接,但尚未登录。而ready 状态是指客户端在登录后成功加载了它自己的所有客户端-用户内容。
猜你喜欢
  • 1970-01-01
  • 2020-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-21
  • 2020-06-19
  • 2011-10-15
  • 2014-06-28
相关资源
最近更新 更多