【发布时间】:2019-06-20 09:56:28
【问题描述】:
我想首先说这是我和我的朋友之间的小型服务器,我们所有人都同意使用这样的东西,因此我认为它不会违反任何不和谐的准则。
我首先编写了一些测试代码来测试机器人能够 DM 服务器上的所有用户,如下所示:
[Command("dm")]
public async Task DmAsync()
{
var guild = Program._client.GetGuild(Context.Guild.Id) as IGuild;
await Context.Guild.DownloadUsersAsync();
await Task.Delay(500);
var users = await guild.GetUsersAsync();
foreach (var user in users)
{
var u = user as IGuildUser;
if (!u.IsBot && !u.IsWebhook)
{
IUserMessage dm = await u.SendMessageAsync("Mass dm test", false);
if (dm == null)
{
continue;
}
}
}
}
我知道我的一个朋友阻止了我的机器人,所以我为什么要检查 dm 是否为空。我以为这会越过The server responded with error 50007: Cannot send messages to this user的错误,但我错了。
在给出此错误后,我将如何继续 foreach 循环,因为它完全停止了该过程,我希望机器人忽略它并继续发送 DM。
【问题讨论】:
-
你有什么问题?
-
在给出此错误后我将如何继续 foreach 循环,因为它完全停止了该过程,我希望机器人忽略它并继续发送 DM。也可以编辑到 OP 中。
-
你知道如何使用try and catch处理异常吗?
-
我想补充一点,
Context.Client可供您使用;避免将您的客户端作为全局静态变量。此外,DownloadUsersAsync可以通过在客户端配置中设置AlwaysDownloadUsers来省略。尽管如此,由于 API 上的大量垃圾邮件,通常不推荐这种设计和想法。
标签: c# discord.net