C# 获取频道并在discord.net中循环

C# 获取频道并在discord.net中循环,c#,discord,discord.net,C#,Discord,Discord.net,我正在尝试使用discord.net创建一个命令,该命令将通过id获得一个公会,然后通过通道角色和用户循环,允许我列出每个角色或通道的名称或权限。然而,我遇到了一些问题。我目前获得公会的方式是使用 var guild=BotStuff.\u client.GetGuild(Global.guildid) 在我获得公会后,我能够获得使用该公会的频道、角色或用户的数量 var channels=guild.channels 然后 Console.WriteLine(channles.Count) 然

我正在尝试使用discord.net创建一个命令,该命令将通过id获得一个公会,然后通过通道角色和用户循环,允许我列出每个角色或通道的名称或权限。然而,我遇到了一些问题。我目前获得公会的方式是使用

var guild=BotStuff.\u client.GetGuild(Global.guildid)

在我获得公会后,我能够获得使用该公会的频道、角色或用户的数量

var channels=guild.channels

然后

Console.WriteLine(channles.Count)


然而,我的主要问题是,我希望能够通过通道或角色循环,并更改权限或记录它们的名称,但我不确定如何实现这一点。我找不到这方面的文档。感谢您的帮助

我将为您提供一些已经适用于当前变量的示例

你需要收集公会中的当前频道,但是由于类别仍然被视为频道,你需要使用LINQ中的
Where
方法将其过滤掉。这样,我们的枚举表中只有文本和语音通道,然后使用
foreach
关键字循环遍历

在下面的代码示例中,您可以根据需要修改频道(名称、职位、类别),并添加用户和角色的权限

如果您只是想在控制台中键入它们的名称,只需在foreach中显示
Name
属性即可:
Console.WriteLine(频道名称)

更改公会中每个频道的名称:

var guild=BotStuff.\u client.GetGuild(Global.guildid);
var channels=guild.channels.Where(x=>!(x是ICategoryChannel));
foreach(通道中的var通道)
{
等待通道。ModifyAsync(x=>
{
x、 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的用户发送消息并管理通道。您可以在
允许
继承
拒绝
之间进行选择

权限添加方法是重载的,并且还接受角色作为参数,因此只需稍加修改,我们就可以更改整个人群的通道权限

var guildrole=guild.GetRole(202853174959144960);
wait channel.AddPermissionOverwriteAsync(Guidrole,新的OverwritePermissions(manageMessages:PermValue.Allow,attachFiles:PermValue.Allow));

使用的ID/变量只是示例,您应该在使用之前理解并修改代码。

我将为您提供一些已经适用于当前变量的示例

你需要收集公会中的当前频道,但是由于类别仍然被视为频道,你需要使用LINQ中的
Where
方法将其过滤掉。这样,我们的枚举表中只有文本和语音通道,然后使用
foreach
关键字循环遍历

在下面的代码示例中,您可以根据需要修改频道(名称、职位、类别),并添加用户和角色的权限

如果您只是想在控制台中键入它们的名称,只需在foreach中显示
Name
属性即可:
Console.WriteLine(频道名称)

更改公会中每个频道的名称:

var guild=BotStuff.\u client.GetGuild(Global.guildid);
var channels=guild.channels.Where(x=>!(x是ICategoryChannel));
foreach(通道中的var通道)
{
等待通道。ModifyAsync(x=>
{
x、 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的用户发送消息并管理通道。您可以在
允许
继承
拒绝
之间进行选择

权限添加方法是重载的,并且还接受角色作为参数,因此只需稍加修改,我们就可以更改整个人群的通道权限

var guildrole=guild.GetRole(202853174959144960);
wait channel.AddPermissionOverwriteAsync(Guidrole,新的OverwritePermissions(manageMessages:PermValue.Allow,attachFiles:PermValue.Allow));
所使用的ID/变量只是示例,在使用之前,您应该理解并修改代码。

对于列出通道:(使用bot,否则只需按照u'r getguild变量替换
Context.Guild.channel

对于列出频道:(使用bot,否则只需根据u'r getguild变量替换
Context.Guild.channel


这是一个集合,只需使用
ForEach
它是一个集合,只需使用
ForEach