获取频道并循环播放 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 的用户发送消息并管理频道。您可以在AllowInheritDeny 之间进行选择。

权限添加方法是重载的,也接受一个角色作为参数,所以稍作修改我们就可以改变整个人群的频道权限。

                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的主要内容,如果未能解决你的问题,请参考以下文章

从循环中一次发送一个 AJAX 请求

HTML 如何让几个视频连续并循环播放,给段代码

悬停并播放动画一次,而不是循环播放

在Qt中连续播放多首歌曲并实现多个歌曲循环播放

计算循环次数并停止播放音频

您如何使用 Objective-C 让声音文件自动播放到 iOS 应用程序并循环播放?