获取频道并循环播放 discord.net
Posted
技术标签:
【中文标题】获取频道并循环播放 discord.net【英文标题】:Getting channels and looping through them discord.net 【发布时间】:2020-11-20 16:11:16 【问题描述】:我正在尝试使用 discord.net 创建一个命令,该命令将通过 id 获得一个公会,然后遍历频道角色和用户,允许我列出每个角色或频道拥有的名称或权限。但是,我遇到了一些问题。我目前获得公会的方式是使用
var guild = BotStuff._client.GetGuild(Global.guildid);
获得公会后,我能够获得使用的频道、角色或用户的数量
var channels = guild.Channels;
然后
Console.WriteLine(channles.Count);
但是,我的主要问题是我希望能够遍历通道或角色并更改权限或记录它们的名称,但我不确定如何实现这一点。我无法找到这方面的文档。任何帮助表示赞赏!
【问题讨论】:
是合集,用ForEach
【参考方案1】:
我将为您提供一些已经适用于您当前变量的示例。
您需要收集公会中的当前频道,但是由于类别仍被视为频道,您需要使用 LINQ 中的Where
方法将其过滤掉。这样,我们的枚举中将只有文本和语音通道,然后我们只需使用 foreach
关键字循环。
在下面的代码示例中,您可以修改频道(名称、职位、类别)并根据需要为用户和角色添加权限。
如果您只是想在控制台中输入他们的名字,只需在 foreach 中显示 Name
属性:
Console.WriteLine(channel.Name)
更改公会中每个频道的名称:
var guild = BotStuff._client.GetGuild(Global.guildid);
var channels = guild.Channels.Where(x => !(x is ICategoryChannel));
foreach (var channel in channels)
await channel.ModifyAsync(x =>
x.Name = "new name";
);
为用户添加权限覆盖:
var guild = BotStuff._client.GetGuild(Global.guildid);
var channels = guild.Channels.Where(x => !(x is ICategoryChannel));
foreach (var channel in channels)
var guilduser = guild.GetUser(554240045800882181);
await channel.AddPermissionOverwriteAsync(guilduser, new OverwritePermissions(sendMessages: PermValue.Allow, manageChannel: PermValue.Allow));
这样我们将让 ID 为 554240045800882181 的用户发送消息并管理频道。您可以在Allow
、Inherit
、Deny
之间进行选择。
权限添加方法是重载的,也接受一个角色作为参数,所以稍作修改我们就可以改变整个人群的频道权限。
var guildrole = guild.GetRole(202853174959144960);
await channel.AddPermissionOverwriteAsync(guildrole, new OverwritePermissions(manageMessages: PermValue.Allow, attachFiles: PermValue.Allow));
所使用的ID/变量只是示例,您应该在使用前理解并修改代码。
【讨论】:
【参考方案2】:对于列表频道:(使用机器人,否则只需根据您的 getguild 变量替换 Context.Guild.Channel
)
foreach (var channel in Context.Guild.Channels)
Console.WriteLine(channel.Name);
【讨论】:
以上是关于获取频道并循环播放 discord.net的主要内容,如果未能解决你的问题,请参考以下文章