コード例 #1
0
ファイル: CommandHandler.cs プロジェクト: MyouriAlter/Myouri
        /*
         * private async Task OnChannelUpdated(SocketChannel channelBefore, SocketChannel channelAfter)
         * {
         *  var guildId = await _servers.GetEventLogChannel(((SocketGuildChannel)channelBefore).Guild.Id);
         *  if (!(_client.GetChannel(guildId) is IMessageChannel logChannel)) return;
         *  if (((SocketGuildChannel)channelBefore).Name
         *      != ((SocketGuildChannel)channelAfter).Name)
         *      await EventReplyUtils.ChannelNameUpdatedEmbed(channelBefore, channelAfter, logChannel);
         *  if (!Equals(((SocketGuildChannel)channelBefore).PermissionOverwrites,
         *      ((SocketGuildChannel)channelAfter).PermissionOverwrites))
         *      await EventReplyUtils.ChannelPermUpdatedEmbed(channelBefore, channelAfter, logChannel);
         * }
         */
        private async Task OnChannelUpdated(SocketChannel channelBefore, SocketChannel channelAfter)
        {
            var guildId = await _servers.GetEventLogChannel(((SocketGuildChannel)channelBefore).Guild.Id);

            if (!(_client.GetChannel(guildId) is ISocketMessageChannel logChannel))
            {
                return;
            }
            // First, we want both SocketChannels to be converted to SocketGuildChannels
            var after = channelAfter as SocketGuildChannel;

            if (!(channelBefore is SocketGuildChannel before))
            {
                return;
            }
            var differences =
                after?.PermissionOverwrites.Except(before
                                                   .PermissionOverwrites); // Go through the PermissionOverwrites to extract only the differences

            if (differences != null)
            {
                foreach (var difference in differences) // Loop over every difference
                {
                    Console.WriteLine($"\n{difference.Permissions} test\n");
                    Console.WriteLine(
                        $"{difference.TargetType}: {difference.TargetId}"); // Let's you know what the TargetType is (a User or role) followed by their ID
                    Console.WriteLine("Allowed: " +
                                      string.Join(" ",
                                                  difference.Permissions
                                                  .ToAllowList())); // Get all the permissions that were changed to allow
                    Console.WriteLine("Denied: " +
                                      string.Join(" ",
                                                  difference.Permissions
                                                  .ToDenyList())); // Get all the permissions that were changed to denied
                }
            }

            if (((SocketGuildChannel)channelBefore).Name != ((SocketGuildChannel)channelAfter).Name)
            {
                await EventExtension.ChannelNameUpdatedEmbed(channelBefore, channelAfter, logChannel);
            }
        }