コード例 #1
0
 /// <inheritdoc/>
 /// <remarks>
 ///     <b>This method is not supported in threads.</b>
 /// </remarks>
 public override Task AddPermissionOverwriteAsync(IUser user, OverwritePermissions permissions, RequestOptions options = null)
 => throw new NotSupportedException("This method is not supported in threads.");
コード例 #2
0
 async Task IGuildChannel.AddPermissionOverwriteAsync(IUser user, OverwritePermissions permissions, RequestOptions options)
 => await AddPermissionOverwriteAsync(user, permissions, options).ConfigureAwait(false);
コード例 #3
0
 public Task AddPermissionOverwriteAsync(IUser user, OverwritePermissions permissions, RequestOptions options = null)
 {
     throw new NotImplementedException();
 }
コード例 #4
0
 /// <summary>
 ///     Adds or updates the permission overwrite for the given role.
 /// </summary>
 /// <param name="role">The role to add the overwrite to.</param>
 /// <param name="permissions">The overwrite to add to the role.</param>
 /// <param name="options">The options to be used when sending the request.</param>
 /// <returns>
 ///     A task representing the asynchronous permission operation for adding the specified permissions to the channel.
 /// </returns>
 public virtual async Task AddPermissionOverwriteAsync(IRole role, OverwritePermissions permissions, RequestOptions options = null)
 {
     await ChannelHelper.AddPermissionOverwriteAsync(this, Discord, role, permissions, options).ConfigureAwait(false);
 }
コード例 #5
0
        /// <summary>
        ///     Adds or updates the permission overwrite for the given user.
        /// </summary>
        /// <param name="user">The user to add the overwrite to.</param>
        /// <param name="permissions">The overwrite to add to the user.</param>
        /// <param name="options">The options to be used when sending the request.</param>
        /// <returns>
        ///     A task representing the asynchronous permission operation for adding the specified permissions to the channel.
        /// </returns>
        public virtual async Task AddPermissionOverwriteAsync(IUser user, OverwritePermissions permissions, RequestOptions options = null)
        {
            await ChannelHelper.AddPermissionOverwriteAsync(this, Discord, user, permissions, options).ConfigureAwait(false);

            _overwrites = _overwrites.Add(new Overwrite(user.Id, PermissionTarget.User, new OverwritePermissions(permissions.AllowValue, permissions.DenyValue)));
        }
コード例 #6
0
        public static async Task Browse(DiscordSocketClient _client, ulong category, ulong serverid) // Browsing - do every time a new channel is made.
        {
            ulong     mchannel     = _client.GetGuild(serverid).Channels.Where(x => x.Name.ToLower() == "gllobbies").First().Id;
            ListItems currentlobby = List.Where(x => x.CategoryId == category).First();

            #region make embed
            var se = new EmbedBuilder();
            se.WithColor(Color.Blue).WithTitle("Lobby Information:").AddField("Owner:", _client.GetUser(currentlobby.OwnerId).Mention).AddField("Game:", currentlobby.Game);
            if (currentlobby.Bio != null)
            {
                se.AddField("Bio:", currentlobby.Bio);
            }
            se.AddField("Access:", currentlobby.Access).WithFooter("To join this lobby, click the green reaction below. It may take a few seconds, so be paitent.");
            #endregion
            var message = await(_client.GetChannel(mchannel) as SocketTextChannel).SendMessageAsync("", false, se.Build());
            var aa      = new EmbedBuilder();

            var emote = _client.GetGuild(406657890921742336).Emotes.First() as IEmote;
            await message.AddReactionAsync(emote);

            List <ulong> joined = new List <ulong>
            {
                _client.CurrentUser.Id,
                currentlobby.OwnerId
            };
            var guild = _client.GetGuild(currentlobby.GuildId);
            // Create permissions
            OverwritePermissions denyall = new OverwritePermissions(PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny); OverwritePermissions inall = new OverwritePermissions(PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit); OverwritePermissions fairuser = new OverwritePermissions(PermValue.Inherit, PermValue.Inherit, PermValue.Allow, PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Deny, PermValue.Allow, PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Allow, PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Allow, PermValue.Deny, PermValue.Deny);

            await Task.Delay(5000);

            while (true) // Goes until break;
            {
                // Updates browser
                try
                {
                    var exists = List.Where(x => x.CategoryId == category);
                    if (exists.Count() == 0) // Does not exist anymore.
                    {
                        await message.DeleteAsync();

                        break;
                    }
                    else // Still exists.
                    {
                        // Set currentlobby to be the actual current lobby.
                        currentlobby = exists.First();

                        // Create correct embed
                        var eb = new EmbedBuilder();
                        eb.WithColor(Color.Blue).WithTitle("Lobby Information:").AddField("Owner:", _client.GetUser(currentlobby.OwnerId).Mention).AddField("Game:", currentlobby.Game);
                        if (currentlobby.Bio != null)
                        {
                            eb.AddField("Bio:", currentlobby.Bio);
                        }
                        eb.AddField("Access:", currentlobby.Access).WithFooter("To join this lobby, click the green reaction below. It may take a few seconds, so be paitent.");

                        if (currentlobby.Bio != null)
                        {
                            if (eb.Build().Fields[1].Value == message.Embeds.First().Fields[1].Value && eb.Build().Fields[2].Value == message.Embeds.First().Fields[2].Value &&
                                eb.Build().Fields[3].Value == message.Embeds.First().Fields[3].Value)
                            {
                                // do nothing
                            }
                            else
                            {
                                await message.ModifyAsync(x => { x.Embed = eb.Build(); });
                            }
                        }
                        else
                        {
                            if (eb.Build().Fields[1].Value == message.Embeds.First().Fields[1].Value && eb.Build().Fields[2].Value == message.Embeds.First().Fields[2].Value)
                            {
                                // do nothing
                            }
                            else
                            {
                                await message.ModifyAsync(x => { x.Embed = eb.Build(); });
                            }
                        }
                    }
                }
                catch (Exception)
                {
                }



                // Checks for new users
                try
                {
                    var users = await message.GetReactionUsersAsync(emote);

                    List <IUser> newu = new List <IUser>();
                    foreach (var user in users)
                    {
                        if (joined.Contains(user.Id))
                        {
                        }
                        else
                        {
                            newu.Add(user);
                        }
                        if (user.Id != _client.CurrentUser.Id)
                        {
                            await Task.Delay(1000);                         // Try to not ratelimit.

                            await message.RemoveReactionAsync(emote, user); // Removes reaction
                        }
                    }
                    foreach (var user in newu) // Does something for every new user that has joined.
                    {
                        joined.Add(user.Id);   // Adds to list so it counts as new user.
                        // Join Lobby
                        var chnls = guild.Channels.Where(x => x.CategoryId == category);
                        foreach (var chnl in chnls) // Apply new permissions and such.
                        {
                            if (currentlobby.Access.ToLower() == "private")
                            {
                                var keyc = chnls.Where(chn => !(chn.Name.ToLower().Contains("text") || chn.Name.ToLower().Contains("voice"))).First();
                                await keyc.AddPermissionOverwriteAsync(user, fairuser);

                                await(keyc as SocketTextChannel).SendMessageAsync(user.Mention + " please input the lobby key.\n\nDo this by doing `joinkey: {key}`\n\n(If you do not know the key, you can do `leavelobby:` to exit.)");
                                break;
                            }
                            else
                            {
                                await(_client.GetChannel(currentlobby.CategoryId) as SocketCategoryChannel).AddPermissionOverwriteAsync(user, fairuser);
                                await(chnls.Where(x => x.Name.ToLower().Contains("text")).First() as SocketTextChannel).SendMessageAsync($"{user.Mention} has joined the lobby! You can do `leavelobby:` at any time to leave it.");
                                break;
                            }
                        }
                    }
                }
                catch (Exception)
                {
                }
                await Task.Delay(5000); // Just so it slows down a bit - not as frantic checking. Saves my PC.
            }
        }
コード例 #7
0
        protected async Task <Discord.Rest.RestTextChannel> CreateSuggestionChannel(SuggestionType type, string shortName, IUser owner,
                                                                                    Func <IMessageChannel, Task <IUserMessage> > messageGenerator)
        {
            await Context.Message.DeleteAsync();

            var user      = Context.User;
            var guildUser = (IGuildUser)user;

            if (!guildUser.IsStaffOrConsultant())
            {
                throw new Exception("Only staff can suggest new features.");
            }

            var guild  = Context.Guild;
            var config = guild.GetGovernanceConfig();

            var channel = await guild.CreateSuggestionChannel(config.Category, type, shortName);

            await channel.AddPermissionOverwriteAsync(user,
                                                      new OverwritePermissions(viewChannel : PermValue.Allow, sendMessages : PermValue.Allow));

            var message = await messageGenerator(channel);

            if (message == null)
            {
                await channel.DeleteAsync();

                return(null);
            }

            await channel.ModifyAsync(props =>
            {
                props.Topic = message.Embeds.First().Description;
            });

            var msg = GetBillboardMessage(type);
            var voteBillboardMessage = await channel.SendMessageAsync(msg);

            await message.PinAsync();

            await voteBillboardMessage.PinAsync();

            await Database.UNSAFE_AddGovernanceVoteAsync(new GovernanceVote
            {
                UserId          = owner.Id,
                MessageId       = message.Id,
                ChannelId       = channel.Id,
                VoteBillboardId = voteBillboardMessage.Id
            });

            var perms       = channel.GetPermissionOverwrite(guild.EveryoneRole) ?? new OverwritePermissions();
            var targetPerms = new OverwritePermissions(
                (perms.AllowValue | config.EveryonePermissionsAfterSubmission.AllowValue) &
                ~config.EveryonePermissionsAfterSubmission.DenyValue,
                (perms.DenyValue | config.EveryonePermissionsAfterSubmission.DenyValue) &
                ~config.EveryonePermissionsAfterSubmission.AllowValue
                );
            await channel.AddPermissionOverwriteAsync(guild.EveryoneRole, targetPerms);

            var letUberDoTimerStuff = new OverwritePermissions(
                readMessageHistory: PermValue.Allow,
                sendMessages: PermValue.Allow,
                viewChannel: PermValue.Allow
                );

            await channel.AddPermissionOverwriteAsync(guild.GetUser(85614143951892480 /* uber bot */), letUberDoTimerStuff);

            return(channel);
        }
コード例 #8
0
        public async Task <bool> TryMuteUserAsync(SocketGuild guild, SocketGuildUser moderator, SocketGuildUser user, TimeSpan timeToRevert, string reason = null)
        {
            try
            {
                IRole role;

                if (guild.Roles.Any(x => x.Name == "Muted"))
                {
                    role = guild.Roles.First(x => x.Name == "Muted");
                }
                else
                {
                    OverwritePermissions Permissions = new OverwritePermissions(addReactions: PermValue.Deny, sendMessages: PermValue.Deny, attachFiles: PermValue.Deny, useExternalEmojis: PermValue.Deny, speak: PermValue.Deny);

                    role = await guild.CreateRoleAsync("Muted", GuildPermissions.None, Color.Default);

                    await role.ModifyAsync(x => x.Position = guild.GetUser(_client.CurrentUser.Id).Roles.OrderBy(y => y.Position).Last().Position);

                    foreach (var channel in (guild as SocketGuild).TextChannels)
                    {
                        if (!channel.PermissionOverwrites.Select(x => x.Permissions).Contains(Permissions))
                        {
                            await channel.AddPermissionOverwriteAsync(role, Permissions);
                        }
                    }
                }

                if (user.Roles.Contains(role))
                {
                    return(false);
                }

                await user.AddRoleAsync(role);

                await user.ModifyAsync(x => x.Mute = true);

                DateTime reverseAfter;
                if (timeToRevert == TimeSpan.MaxValue)
                {
                    reverseAfter = DateTime.MaxValue;
                }
                else
                {
                    reverseAfter = DateTime.UtcNow.Add(timeToRevert);
                }

                await AddModerationActionAsync(new ModerationAction
                {
                    Type         = ModerationAction.ActionType.Mute,
                    GuildId      = guild.Id,
                    UserId       = user.Id,
                    ModeratorId  = moderator.Id,
                    ReverseAfter = reverseAfter,
                    Reason       = reason ?? "no reason given"
                });

                return(true);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                return(false);
            }
        }
コード例 #9
0
        private Task SetRolePermissions(ChannelContext channel, DiscordServerContext server, OverwritePermissions permissions, IRole role)
        {
            var guildChannel = (IGuildChannel)this.GetChannel(channel.Id, server.Id);

            if (guildChannel == null)
            {
                Log.Warning("{channel} after casting to IGuildChannel is null", channel.Name);
                return(Task.CompletedTask);
            }
            if (guildChannel.PermissionOverwrites.Any(x => x.TargetId == role.Id))
            {
                Log.Warning("Channel {channel} has already assigned this role {roleName}", channel.Name, role.Name);
                return(Task.CompletedTask);
            }
            return(guildChannel.AddPermissionOverwriteAsync(role, permissions)
                   .ContinueWith(_ => Log.Information("{roleName} set for {channel}", role.Name, channel.Name)));
        }
コード例 #10
0
 /// <summary> Creates a new Overwrite with provided target information and modified permissions. </summary>
 public Overwrite(ulong targetId, PermissionTarget targetType, OverwritePermissions permissions)
 {
     TargetId    = targetId;
     TargetType  = targetType;
     Permissions = permissions;
 }
コード例 #11
0
        public async Task <RestTextChannel> CreateChannelForMission(SocketGuild guild, Mission mission, SignupsData signups)
        {
            // Sort channels by date
            signups.Missions.Sort((x, y) =>
            {
                return(x.Date.CompareTo(y.Date));
            });

            var signupChannel = await guild.CreateTextChannelAsync(mission.Title, x =>
            {
                x.CategoryId = _config.SignupsCategory;
                // Kurwa dlaczego to nie działa
                var index = (int)(mission.Date - new DateTime(2019, 1, 1)).TotalMinutes;
                // really hacky solution to avoid recalculating indexes for each channel integer should have
                // space for around 68 years, and this bot is not going to work this long for sure
                x.Position = index;
            });

            var everyone   = guild.EveryoneRole;
            var armaforces = guild.GetRole(_config.SignupRole);
            var botRole    = guild.GetRole(_config.BotRole);

            var banPermissions = new OverwritePermissions(
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny);

            var botPermissions = new OverwritePermissions(
                PermValue.Deny,
                PermValue.Allow,
                PermValue.Allow,
                PermValue.Allow,
                PermValue.Allow,
                PermValue.Deny,
                PermValue.Allow,
                PermValue.Allow,
                PermValue.Allow,
                PermValue.Allow,
                PermValue.Allow,
                PermValue.Allow,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Allow,
                PermValue.Deny);

            var everyoneStartPermissions = new OverwritePermissions(
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny,
                PermValue.Deny);

            try
            {
                await signupChannel.AddPermissionOverwriteAsync(botRole, botPermissions);

                await signups.BanAccess.WaitAsync(-1);

                try
                {
                    foreach (var ban in signups.SpamBans)
                    {
                        await signupChannel.AddPermissionOverwriteAsync(_client.GetGuild(_config.AFGuild).GetUser(ban.Key), banPermissions);
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
                finally
                {
                    signups.BanAccess.Release();
                }

                await signupChannel.AddPermissionOverwriteAsync(everyone, everyoneStartPermissions);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }


            return(signupChannel);
        }
コード例 #12
0
 public virtual Task AddPermissionOverwriteAsync(IUser user, OverwritePermissions permissions, RequestOptions?options = null)
 {
     return(_socketGuildChannel.AddPermissionOverwriteAsync(user, permissions, options));
 }
コード例 #13
0
        public async Task ElectronicLockAnswerPart1()
        {
            var user   = Context.User as SocketGuildUser;
            var RoleID = user.Guild.GetRole(Room1.Study.Id);

            if (!user.Roles.Contains(RoleID))
            {
                return;
            }
            if (States.StudyState == States.StatesListStudy[1] && studyDoorOpen == false)
            {
                EmbedBuilder embed = new EmbedBuilder();
                embed.WithDescription("I input the code");
                embed.AddField("The lock flashes a green light", "I think I got this password right");
                password1 = true;
                await Room1.StudyChannel.SendMessageAsync("", false, embed.Build());

                if (password1 == true && password2 == true && password3 == true && password4 == true)
                {
                    studyDoorOpen = false;
                    EmbedBuilder embed1 = new EmbedBuilder();
                    embed1.WithDescription("The door cracks open ");
                    embed1.AddField("Yes, I got all of the passwords right", "Time to move out of the study, looks like the next room is a !kitchen");
                    await Room1.StudyChannel.SendMessageAsync("", false, embed1.Build());

                    Room3.Kitchen = await Context.Guild.CreateRoleAsync("Kitchen", null, Color.Green, false, null);

                    var user2 = Context.User as SocketGuildUser;
                    await user2.AddRoleAsync(Room3.Kitchen);

                    Room3.KitchenChannel = await Context.Guild.CreateTextChannelAsync("Kitchen", null, null);

                    await Room3.KitchenChannel.AddPermissionOverwriteAsync((IRole)Context.Guild.EveryoneRole, OverwritePermissions.DenyAll(Room3.KitchenChannel));

                    await Room3.KitchenChannel.AddPermissionOverwriteAsync((IRole)Room3.Master_Bedroom, OverwritePermissions.DenyAll(Room3.KitchenChannel));

                    await Room3.KitchenChannel.AddPermissionOverwriteAsync((IRole)Room3.Kitchen, OverwritePermissions.AllowAll(Room3.KitchenChannel));

                    Room3.PlatesWrong = false;
                    Room3.LightonCans = false;
                    Room3.PlaqueGoop  = true;
                    Room3.ClockOpen   = false;
                    Room3.needlesIn   = false;
                    Room3.nooseDown   = false;
                }
            }
        }
コード例 #14
0
        public async Task ElectronicLock1Answer()
        {
            var user   = Context.User as SocketGuildUser;
            var RoleID = user.Guild.GetRole(Room1.Kids_Bedroom.Id);

            if (!user.Roles.Contains(RoleID))
            {
                return;
            }

            if (States.KidRoomState == States.StatesListKids[1])
            {
                EmbedBuilder embed = new EmbedBuilder();
                embed.WithDescription("I input the code");
                embed.AddField("YES, it's the right code.", "The door cracks open as the codelock flashes its green light. Looks like the next room is the !masterbedroom");
                await Room1.BedroomChannel.SendMessageAsync("", false, embed.Build());

                Room3.Master_Bedroom = await Context.Guild.CreateRoleAsync("Master-Bedroom", null, Color.Red, false, null);

                Room3.MasterBedChannel = await Context.Guild.CreateTextChannelAsync("Master-Bedroom", null, null);

                var user2 = Context.User as SocketGuildUser;
                await user2.AddRoleAsync(Room3.Master_Bedroom);

                await Room3.MasterBedChannel.AddPermissionOverwriteAsync((IRole)Room3.Master_Bedroom, OverwritePermissions.AllowAll(Room3.MasterBedChannel));

                await Room3.MasterBedChannel.AddPermissionOverwriteAsync((IRole)Context.Guild.EveryoneRole, OverwritePermissions.DenyAll(Room3.MasterBedChannel));

                await Room3.MasterBedChannel.AddPermissionOverwriteAsync((IRole)Room3.Kitchen, OverwritePermissions.DenyAll(Room3.MasterBedChannel));

                Room3.ensuiteLocked   = true;
                Room3.writingRevealed = false;
                Room3.mirrorClean     = true;
                Room3.bathDrained     = false;
            }
        }
コード例 #15
0
        /// <summary>
        /// Create a Text Channel using the name and roles provided
        /// </summary>
        public static async Task CreateChannel(CommandContext Context, string Channel, [Optional] List <Permissions> Roles, [Optional] string Description, [Optional] string Category, [Optional] int?Position)
        {
            await Task.Delay(1000);

            // Get the list of channels
            IReadOnlyCollection <IGuildChannel> channels = await Context.Guild.GetChannelsAsync();

            // Check if the channel exists
            bool exists = false;

            Discord.ITextChannel newchannel = null;
            foreach (var channelname in channels)
            {
                try
                {
                    if (channelname.Name.ToString().ToLower().Trim() == Channel.ToString().ToLower().Trim())
                    {
                        // If the channel exists exit
                        exists     = true;
                        newchannel = channelname as ITextChannel;
                        break;
                    }
                }
                catch { }
            }
            if (exists == false)
            {
                newchannel = await Context.Guild.CreateTextChannelAsync(Channel);
            }
            // Wait for Channel to Generate
            await Task.Delay(1000);

            if (newchannel != null)
            {
                // Check if roles were passed
                if (Roles != null)
                {
                    // Parse in the roles to add them to the channel
                    foreach (Permissions role in Roles)
                    {
                        // Before we go any further let's see if the role already exists
                        // If the role exists exit the task
                        foreach (Discord.IRole existingrole in Context.Guild.Roles)
                        {
                            // Compare the list of roles in the discord with the Role
                            if (existingrole.Name.ToLower().Trim() == role.Role.ToLower().Trim())
                            {
                                // Add the selected roles to the channel using inhert as its base
                                await newchannel.AddPermissionOverwriteAsync(existingrole, role.ChannelPermType);

                                break;
                            }
                        }
                    }
                    // Remove the everyone permission if it's not in the list
                    bool permfound = false;
                    foreach (Permissions perm in Roles)
                    {
                        if (perm.Role.ToLower().Contains("everyone") == true)
                        {
                            permfound = true;
                            break;
                        }
                    }
                    if (permfound == false)
                    {
                        foreach (Discord.IRole existingrole in Context.Guild.Roles)
                        {
                            // Compare the list of roles in the discord with the Role
                            if (existingrole.Name.ToLower() == "@everyone")
                            {
                                OverwritePermissions denypermissions = new OverwritePermissions(createInstantInvite: PermValue.Deny, manageChannel: PermValue.Deny, addReactions: PermValue.Deny, viewChannel: PermValue.Deny, sendMessages: PermValue.Deny, sendTTSMessages: PermValue.Deny, manageMessages: PermValue.Deny, embedLinks: PermValue.Deny, attachFiles: PermValue.Deny, readMessageHistory: PermValue.Deny, mentionEveryone: PermValue.Deny, useExternalEmojis: PermValue.Deny, connect: PermValue.Deny, speak: PermValue.Deny, muteMembers: PermValue.Deny, deafenMembers: PermValue.Deny, moveMembers: PermValue.Deny, useVoiceActivation: PermValue.Deny, manageRoles: PermValue.Deny, manageWebhooks: PermValue.Deny);
                                // Remove Everyones permissions
                                await newchannel.AddPermissionOverwriteAsync(existingrole, denypermissions);

                                break;
                            }
                        }
                    }
                }
                // Check if a description was passed, if it was update the description
                if (Description != null)
                {
                    // Modify the new channel created description
                    await newchannel.ModifyAsync(x =>
                    {
                        x.Topic = Description;
                    });
                }
                // Check if a category was passed
                if (Category != null)
                {
                    // Get the list of categories
                    IReadOnlyCollection <IGuildChannel> categories = await Context.Guild.GetCategoriesAsync();

                    ulong categoryId = 000000;
                    // Check if the category name matches the id if it does return the ID
                    foreach (var categoryname in categories)
                    {
                        if (categoryname.Name.ToLower().Trim() == Category.ToLower().Trim())
                        {
                            categoryId = categoryname.Id;
                            break;
                        }
                    }

                    // Add it to the category
                    await newchannel.ModifyAsync(x =>
                    {
                        x.CategoryId = categoryId;
                    });
                }
                // Check if a position was provided
                if (Position != null)
                {
                    // Update its position
                    await newchannel.ModifyAsync(x =>
                    {
                        x.Position = Position.Value;
                    });
                }
                if (Roles == null)
                {
                    await newchannel.SyncPermissionsAsync();
                }
            }
        }
コード例 #16
0
 /// <inheritdoc />
 public Task AddPermissionOverwriteAsync(IRole role, OverwritePermissions permissions, RequestOptions options = null)
 => SocketGuildChannel.AddPermissionOverwriteAsync(role, permissions, options);
コード例 #17
0
        public static async Task NewLobby(DiscordSocketClient _client, SocketMessage message, bool DeleteMessage = true)
        {
            if (DeleteMessage)
            {
                await message.DeleteAsync();
            }
            if (OwnsLobby.Contains(message.Author.Id))
            {
                var del = await message.Channel.SendMessageAsync("You already own a lobby somewhere! Please do `deletelobby:` in the " +
                                                                 "lobby channel before you make another one."); await Task.Delay(5000); await del.DeleteAsync(); return;
            }
            if (message.Content.Split(' ').Length < 2)
            {
                var del = await message.Channel.SendMessageAsync("Please put a game. (Spaces not allowed in game name.)"); await Task.Delay(8500); await del.DeleteAsync(); return;
            }

            var guild = (message.Author as SocketGuildUser).Guild;

            ListItems finalOutput = new ListItems
            {
                GuildId = guild.Id,
                OwnerId = message.Author.Id
            };
            // {ServerId[0], CateoryId[1], OwnerId[2], Game Name[3], Bio[4], Access[5], Key[6] }

            // Check syntax - Correct syntax = newlobby: {game} {public/private} {200 char max bio}

            string game = message.Content.Split(' ')[1]; // Game

            finalOutput.Game = game;
            if (game.Length >= 80)
            {
                var del = await message.Channel.SendMessageAsync($"Game name is 80 characters max. \nWhat game even has such a long name?"); await Task.Delay(5000); await del.DeleteAsync(); return;
            }
            if (game.Contains("text") || game.Contains("voice"))
            {
                var del = await message.Channel.SendMessageAsync("Sorry, but games cannot contain the phrase " + game.ToLower() + "."); await Task.Delay(5000); await del.DeleteAsync(); return;
            }
            string access = "public";

            if (message.Content.Split(' ').Length > 2)
            {
                access = message.Content.Split(' ')[2];                               // Public/Private
                if (!(access.ToLower() == "private" || access.ToLower() == "public")) // Makes sure syntax is correct.
                {
                    var del = await message.Channel.SendMessageAsync("Something went wrong. \nPlease do not use spaces in game names (I.e don't do Rainbow 6, instead do Rainbow6)," +
                                                                     "\nand please say if the lobby is public or private before putting your lobby bio. " +
                                                                     "\n(For instance, don't do `newlobby: Rainbow6 Play some games`, and instead do `newlobby: Rainbow6 Public Play some games`)"); await Task.Delay(12000); await del.DeleteAsync(); return;
                }
                if (message.Content.Split(' ').Length > 3)        // Check if bio exists. If it doesn't, don't do anything.
                {
                    string[] getBio = message.Content.Split(' '); // Create array of all the stuff in Message.Content - Seperated by spaces.
                    getBio[0] = ""; getBio[1] = ""; getBio[2] = "";
                    if (string.Join(" ", getBio).Length > 200)
                    {
                        var del = await message.Channel.SendMessageAsync("The lobby bio can only be 200 characters max."); await Task.Delay(5000); await del.DeleteAsync(); return;
                    }
                    finalOutput.Bio = string.Join(" ", getBio).Trim();
                }
            }
            finalOutput.Access = access;
            // Create the permissions variables, category, and channels -- add permissions to all.
            OverwritePermissions denyall = new OverwritePermissions(PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny); OverwritePermissions inall = new OverwritePermissions(PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit); OverwritePermissions fairuser = new OverwritePermissions(PermValue.Inherit, PermValue.Inherit, PermValue.Allow, PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Deny, PermValue.Allow, PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Allow, PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Allow, PermValue.Deny, PermValue.Deny);

            var newcat = await guild.CreateCategoryChannelAsync($"{@message.Author.Username}'s Lobby LB");

            await newcat.AddPermissionOverwriteAsync(guild.EveryoneRole, denyall); await newcat.AddPermissionOverwriteAsync((message.Author as IUser), fairuser);

            var newvoicechannel = await guild.CreateVoiceChannelAsync($"{game} Voice Channel LB");

            await newvoicechannel.AddPermissionOverwriteAsync(guild.EveryoneRole, denyall); await newvoicechannel.AddPermissionOverwriteAsync((message.Author as IUser), fairuser);

            await(newvoicechannel as IVoiceChannel)?.ModifyAsync(x => { x.CategoryId = newcat.Id; });
            var newtextchannel = await guild.CreateTextChannelAsync($"{game} Text Channel LB");

            await newtextchannel.AddPermissionOverwriteAsync(guild.EveryoneRole, denyall); await newtextchannel.AddPermissionOverwriteAsync((message.Author as IUser), fairuser);

            await(newtextchannel as ITextChannel)?.ModifyAsync(x => { x.CategoryId = newcat.Id; });
            var keychannel = await guild.CreateTextChannelAsync($"key-channel-lb");

            await keychannel.AddPermissionOverwriteAsync(guild.EveryoneRole, denyall);

            await(keychannel as ITextChannel)?.ModifyAsync(x => { x.CategoryId = newcat.Id; });
            // Apply permissions to each channel, excluding main user.


            finalOutput.CategoryId = newcat.Id; // Add newcat to finalOutput

            List.Add(finalOutput);
            OwnsLobby.Add(message.Author.Id);
            var eb = new EmbedBuilder();

            if (access.ToLower() == "private")
            {
                eb.WithColor(Color.Blue).WithTitle("Welcome to your new lobby!").WithDescription("Because this lobby is private, you must create a key before users can join. " +
                                                                                                 "Please do `lobbykey: key` (no spaces allowed, 12 char max.).\n\nFor additional commands, do `lobbyhelp:`");
            }
            else
            {
                eb.WithColor(Color.Blue).WithTitle("Welcome to your new lobby!").WithDescription("If you want to change it at all, just do `lobbyhelp:` to get a list of commands.");
            }
            await newtextchannel.SendMessageAsync($"{message.Author.Mention}", false, eb.Build());

            var ebmm = new EmbedBuilder();

            ebmm.WithColor(Color.Blue).WithTitle("How to use the GameLobby system:");
            ebmm.AddField("LobbyKey:", "Sets the key in a private lobby to something.\n12 characters maximum.\nTo use, do: `lobbykey: NewKeyHere`");

            ebmm.AddField("LobbyAccess:", "Change the access from public to private, or private to public.\nTo use, do `lobbyaccess: Public/Private`");

            ebmm.AddField("LobbyGame:", "Sets the game of the lobby.\nTo use, do: `lobbygame: NewGameHere`");

            ebmm.AddField("LobbyBio:", "Sets the lobby bio to something new. 200 characters maximum.\nTo use, do: `lobbybio: Write a short bio here.`");

            ebmm.AddField("DeleteLobby:", "Deletes the lobby.\nTo use, just do: `deletelobby:`");

            ebmm.AddField("LobbyInfo:", "Gets the current lobby information. Can only be used from within a lobby.\n" +
                          "To use, just do: \n`lobbyinfo:` in a lobby.");
            await newtextchannel.SendMessageAsync("", false, ebmm.Build());

#pragma warning disable CS4014
            Browse(_client, newcat.Id, guild.Id);
            AutoDelete(_client, newtextchannel.Id, newvoicechannel.Id, newcat.Id);
#pragma warning restore CS4014
        }
コード例 #18
0
 /// <inheritdoc />
 public Task AddPermissionOverwriteAsync(IUser user, OverwritePermissions permissions, RequestOptions options = null)
 => SocketGuildChannel.AddPermissionOverwriteAsync(user, permissions, options);
コード例 #19
0
        //public static async Task JoinLobby(DiscordSocketClient _client, SocketMessage message, bool DeleteMessage = true)
        //{
        //    // PLEASE NOTE: This is kept here for no real reason. The system is no longer in use.
        //    if (DeleteMessage) await message.DeleteAsync();
        //    if (message.Content.Split(' ').Length > 2)
        //    {
        //        var del = await message.Channel.SendMessageAsync($"Please use the correct syntax. Do `lobbyhelp:` if you need help."); await Task.Delay(5000); await del.DeleteAsync(); return;
        //    }
        //    if (message.MentionedUsers.Count == 0)
        //    {
        //        var del = await message.Channel.SendMessageAsync($"Hey! Please only use @ mentions for this command."); await Task.Delay(5000); await del.DeleteAsync(); return;
        //    }
        //    var oid = message.MentionedUsers.First().Id;
        //    ListItems lobby;
        //    try
        //    {
        //        lobby = List.Where(x => x.OwnerId == oid).First();
        //    }
        //    catch (Exception)
        //    {
        //        var del = await message.Channel.SendMessageAsync($"Sorry, that user does not seem to own a lobby."); await Task.Delay(5000); await del.DeleteAsync(); return;
        //    }
        //    if (lobby.GuildId != (message.Author as SocketGuildUser).Guild.Id)
        //    {
        //        var del = await message.Channel.SendMessageAsync($"Sorry, that user does not seem to own a lobby in this server."); await Task.Delay(5000); await del.DeleteAsync(); return;
        //    }
        //    if (message.Author.Id == lobby.OwnerId)
        //    {
        //        var del = await message.Channel.SendMessageAsync($"You cannot join your own lobby."); await Task.Delay(5000); await del.DeleteAsync(); return;
        //    }
        //    var chnls = (message.Author as SocketGuildUser).Guild.Channels.Where(x => x.CategoryId == lobby.CategoryId);
        //    // Create permissions
        //    OverwritePermissions denyall = new OverwritePermissions(PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny); OverwritePermissions inall = new OverwritePermissions(PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit); OverwritePermissions fairuser = new OverwritePermissions(PermValue.Inherit, PermValue.Inherit, PermValue.Allow, PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Deny, PermValue.Allow, PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Allow, PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Allow, PermValue.Deny, PermValue.Deny);

        //    if (lobby.Access.ToLower() == "private")
        //    {
        //        var keyc = chnls.Where(chn => !(chn.Name.ToLower().Contains("text") || chn.Name.ToLower().Contains("voice"))).First();
        //        await keyc.AddPermissionOverwriteAsync((message.Author as IUser), fairuser);
        //        await (keyc as SocketTextChannel).SendMessageAsync(message.Author.Mention + " please input the lobby key.\n\nDo this by doing `joinkey: {key}`");
        //        return;
        //    }
        //    else
        //    {
        //        await (_client.GetChannel(lobby.CategoryId) as SocketCategoryChannel).AddPermissionOverwriteAsync((message.Author as IUser), fairuser);
        //        await (chnls.Where(x => x.Name.ToLower().Contains("text")).First() as SocketTextChannel).SendMessageAsync($"{message.Author.Username} has joined the lobby!");
        //        return;
        //    }
        //} // User joining lobby. Starting command

        public static async Task JoinPrivate(DiscordSocketClient _client, SocketMessage message)
        {
            await message.DeleteAsync();

            // Make sure key is correct
            if (message.Content.Split(' ').Length > 2)
            {
                var del = await message.Channel.SendMessageAsync($"Please use the correct syntax. Do `lobbyhelp:` if you need help."); await Task.Delay(5000); await del.DeleteAsync(); return;
            }
            ListItems lobby;

            try
            {
                lobby = List.Where(x => x.CategoryId == (message.Channel as SocketTextChannel).CategoryId).First();
            }
            catch (Exception)
            {
                var del = await message.Channel.SendMessageAsync($"Sorry, that user does not seem to own a lobby."); await Task.Delay(5000); await del.DeleteAsync(); return;
            }
            if (lobby.GuildId != (message.Author as SocketGuildUser).Guild.Id)
            {
                var del = await message.Channel.SendMessageAsync($"Sorry, that user does not seem to own a lobby in this server."); await Task.Delay(5000); await del.DeleteAsync(); return;
            }
            if (message.Content.Split(' ')[1] != lobby.Key)
            {
                var del = await message.Channel.SendMessageAsync($"It appears that you have the incorrect key. Please try again."); await Task.Delay(5000); await del.DeleteAsync(); return;
            }

            // Give permissions. Take key permissions.
            var chnls = (message.Author as SocketGuildUser).Guild.Channels.Where(x => x.CategoryId == (message.Channel as SocketTextChannel).CategoryId);
            OverwritePermissions denyall = new OverwritePermissions(PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny); OverwritePermissions inall = new OverwritePermissions(PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit, PermValue.Inherit); OverwritePermissions fairuser = new OverwritePermissions(PermValue.Inherit, PermValue.Inherit, PermValue.Allow, PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Deny, PermValue.Allow, PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Allow, PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Allow, PermValue.Deny, PermValue.Deny);

            await(_client.GetChannel(Convert.ToUInt64((message.Channel as SocketTextChannel).CategoryId)) as SocketCategoryChannel).AddPermissionOverwriteAsync((message.Author as IUser), fairuser);
            foreach (var chn in chnls)
            {
                if (!(chn.Name.ToLower().Contains("text") || chn.Name.ToLower().Contains("voice")))
                {
                    await chn.AddPermissionOverwriteAsync((message.Author as IUser), denyall);
                }
            }
            await(chnls.Where(x => x.Name.ToLower().Contains("text")).First() as SocketTextChannel).SendMessageAsync($"{message.Author.Mention} has joined the lobby!");
            return;
        } // Called when somebody types in the key channel. (joinkey:)
コード例 #20
0
        private async Task Complaint()
        {
            var channelList = Context.Guild.GetChannelsAsync().Result;
            var hash        = Context.User.Id.ToString().GetSHA256().Substring(0, 8);
            var channelName =
                ParseToDiscordChannel(
                    $"{_settings.ComplaintChannelPrefix}-{hash}");
            var categoryExists = false;
            var categoryList   = Context.Guild.GetCategoriesAsync().Result;
            var categoryName   = _settings.ComplaintCategoryName;

            var everyonePerms = new OverwritePermissions(viewChannel: PermValue.Deny);
            var userPerms     = new OverwritePermissions(viewChannel: PermValue.Allow);

            ulong?categoryId = null;

            await Context.Message.DeleteAsync();

            foreach (var category in categoryList)
            {
                if (string.Equals(category.Name, categoryName, StringComparison.CurrentCultureIgnoreCase))
                {
                    categoryId     = category.Id;
                    categoryExists = true;
                    break;
                }
            }

            if (!categoryExists)
            {
                var category = Context.Guild.CreateCategoryAsync(categoryName);
                categoryId = category.Result.Id;
            }

            if (channelList.Any(channel => channel.Name == channelName))
            {
                await ReplyAsync($"{Context.User.Mention}, you already have an open complaint! Please use that channel!")
                .DeleteAfterSeconds(15);

                return;
            }

            var newChannel = await Context.Guild.CreateTextChannelAsync(channelName, x =>
                                                                        x.CategoryId = categoryId
                                                                        );

            await newChannel.AddPermissionOverwriteAsync(Context.Guild.EveryoneRole, everyonePerms);

            await newChannel.AddPermissionOverwriteAsync(Context.User, userPerms);

            await newChannel.AddPermissionOverwriteAsync(Context.Guild.Roles.First(r => r.Name == "Staff"), userPerms);

            await newChannel.AddPermissionOverwriteAsync(Context.Guild.Roles.First(r => r.Name == "Bot"), userPerms);

            await newChannel.SendMessageAsync(
                $"The content of this conversation will stay strictly between you {Context.User.Mention} and the staff.\n" +
                "Please stay civil, any insults or offensive language could see you punished.\n" +
                "Do not ping anyone and wait until a staff member is free to examine your complaint.");

            await newChannel.SendMessageAsync($"An administrator will be able to close this chat by doing !close.");

            /*await newChannel.SendMessageAsync(
             *  $"{Context.User.Mention}, this is your chat to voice your complaint to the staff members. When everything is finished between you and the staff, please do !close!");*/
        }
コード例 #21
0
ファイル: Program.cs プロジェクト: Morphyum/RogueBot
        // Anemone221 - what does Large Collection of Mechs - by Eternus do?
        // Raza5 - It adds a large collection of new mechs @Anemone221
        private async Task MessageReceived(SocketMessage message)
        {
            foreach (SocketUser user in message.MentionedUsers)
            {
                if (user.Mention.Equals(client.CurrentUser.Mention))
                {
                    await message.Channel.TriggerTypingAsync();

                    await message.Channel.SendMessageAsync("Woof!");
                }
            }

            if (message.Content == "!bot")
            {
                await message.Channel.TriggerTypingAsync();

                await message.Channel.SendMessageAsync(

                    "!assets - Link to asset bundle\n" +
                    "!beta - Asks for any unwanted installs\n" +
                    "!cache - Manual to delete all saved data\n" +
                    "!faq - Link to the FAQ page\n" +
                    "!logs - Log locations\n" +
                    "!map - Link to the ongoing mapping progress\n" +
                    "!output - output log locations\n" +
                    "!pins - Let people know about the pins\n" +
                    "!rt - Link to the mod download\n" +
                    "!rtfm - Link to the RogueTech manual\n" +
                    "!saves - Link to Savefiles\n" +
                    "!ticket - Tell people to open a ticket\n" +
                    "!warmap - Link to the Online Map\n" +
                    "!wiki - Link to the wiki\n" +
                    "!rafflecount - Shows number of rafflers\n" +
                    "!rafflereset - Resets Raffle, Admin only\n" +
                    "!raffle - enters the raffle\n" +
                    "!traits - traits bug\n" +
                    "!winner - draws the raffle winner, Admin only\n"
                    );
            }
            else if (message.Content == "!ticket")
            {
                await message.Channel.TriggerTypingAsync();

                await message.Channel.SendMessageAsync("Please enter a support ticket regarding your issue, \ntickets can be opened by typing \"!openticket\"");
            }
            else if (message.Content == "!traits")
            {
                await message.Channel.TriggerTypingAsync();

                await message.Channel.SendMessageAsync("As per <#565112288315703316>: - Item effects descriptions/Traits are not displayed in the mechlab - restart the game without updating, happens after update");
            }
            else if (message.Content == "!jf")
            {
                await message.Channel.TriggerTypingAsync();

                await message.Channel.SendMessageAsync("Who?");
            }
            else if (message.Content == "!assets")
            {
                await message.Channel.TriggerTypingAsync();

                await message.Channel.SendMessageAsync("https://www.nexusmods.com/battletech/mods/393");
            }
            else if (message.Content == "!beta")
            {
                await message.Channel.TriggerTypingAsync();

                await message.Channel.SendMessageAsync("Are you on any beta?\nHave you installed anything not in the installer?\nDid you delete mods folder before install?");
            }
            else if (message.Content == "!faq")
            {
                await message.Channel.TriggerTypingAsync();

                await message.Channel.SendMessageAsync("https://roguetech.gamepedia.com/FAQ");
            }
            else if (message.Content == "!wiki")
            {
                await message.Channel.TriggerTypingAsync();

                await message.Channel.SendMessageAsync("https://roguetech.gamepedia.com/");
            }
            else if (message.Content == "!cache")
            {
                await message.Channel.TriggerTypingAsync();

                await message.Channel.SendMessageAsync(
                    "DELETE C:\\Users[USERNAME]\\AppData\\LocalLow\\Harebrained Schemes\\BATTLETECH\\profiles.dat (best delete it all)\n" +
                    "DELETE C:\\Users[USERNAME]\\AppData\\Local\\HarebrainedSchemes (delete it all too)\n" +
                    "DELETE C:\\Users[USERNAME]\\AppData\\Local\\Temp\\Harebrained Schemes\n" +
                    "DELETE steam\\steamapps\\shadercache\\637090\n" +
                    "DELETE steam\\userdata[USERID]\\637090\\remote\\C0\\settings_cloud.sav\n" +
                    "\n" +
                    "also delete in your registry HKEY_CURRENT_USER\\Software\\Harebrained Schemes\\BATTLETECH"
                    );
            }
            else if (message.Content == "!pins")
            {
                await message.Channel.TriggerTypingAsync();

                await message.Channel.SendMessageAsync("Please check the pins located at the top right (the little pin needle symbol).");
            }
            else if (message.Content == "!map")
            {
                await message.Channel.TriggerTypingAsync();

                await message.Channel.SendMessageAsync("https://docs.google.com/spreadsheets/d/1FXDZMTEZwp71qCxqnaW3MpaB1ZfovaJudvZrM6pnOGk/edit?usp=sharing");
            }
            else if (message.Content == "!ping")
            {
                await message.Channel.TriggerTypingAsync();

                await message.Channel.SendMessageAsync("Pong!");
            }
            else if (message.Content.Contains("!rtfm") || message.Content == "<:RTFM:807604052325826631>")
            {
                string[] topic = message.Content.Split(' ');
                string   extra = "";
                if (topic.Length > 1)
                {
                    extra = topic[1];
                }
                await message.Channel.TriggerTypingAsync();

                await message.Channel.SendMessageAsync("https://roguetech.gamepedia.com/" + extra);
            }
            else if (message.Content == "!rt")
            {
                await message.Channel.TriggerTypingAsync();

                await message.Channel.SendMessageAsync("https://www.nexusmods.com/battletech/mods/79");
            }
            else if (message.Content == "!warmap")
            {
                await message.Channel.TriggerTypingAsync();

                await message.Channel.SendMessageAsync("https://roguetech.org");
            }
            else if (message.Content.StartsWith("!factionstats "))
            {
                await message.Channel.TriggerTypingAsync();

                string   payload = message.Content.Substring(14);
                string[] datas   = payload.Split(' ');
                string   minutes = datas[1];
                string   faction = datas[0].ToLower();
                string   html    = string.Empty;
                var      user    = message.Author as SocketGuildUser;
                var      role    = (user as IGuildUser).Guild.Roles.FirstOrDefault(x => x.Name == "Admin");

                string url = @"http://roguetech.org:8000/warServices/Factions/" + faction + "/Companies/?MinutesBack=" + minutes;

                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.AutomaticDecompression = DecompressionMethods.GZip;

                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                    using (Stream stream = response.GetResponseStream())
                        using (StreamReader reader = new StreamReader(stream)) {
                            html = reader.ReadToEnd();
                        }
                List <string> companies = JsonConvert.DeserializeObject <List <string> >(html);
                var           output    = "Active Companies for " + faction + " in the last " + minutes + " minutes:\n";
                if (!faction.Equals("wordofblake") || user.Roles.Contains(role))
                {
                    foreach (string company in companies)
                    {
                        output += company + "\n";
                    }
                }
                await message.Channel.SendMessageAsync(output);
            }

            /* else if (message.Content.StartsWith("!warstats ")) {
             *   await message.Channel.TriggerTypingAsync();
             *   string minutes = message.Content.Substring(10);
             *   string html = string.Empty;
             *   string url = @"http://roguetech.org:8000/warServices//Factions/Active/?MinutesBack=" + minutes;
             *
             *   HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
             *   request.AutomaticDecompression = DecompressionMethods.GZip;
             *
             *   using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
             *   using (Stream stream = response.GetResponseStream())
             *   using (StreamReader reader = new StreamReader(stream)) {
             *       html = reader.ReadToEnd();
             *   }
             *   JArray a = JArray.Parse(html);
             *   var Resultobject = new Dictionary<string, int>();
             *   foreach (JObject o in a.Children<JObject>()) {
             *       Resultobject.Add(o.GetValue("Key").ToString(), (int)o.GetValue("Value"));
             *   }
             *   var sortedDict = from entry in Resultobject orderby entry.Value descending select entry;
             *   var output = "Active Players per Faction in the last " + minutes + " minutes:\n";
             *   var user = message.Author as SocketGuildUser;
             *   var role = (user as IGuildUser).Guild.Roles.FirstOrDefault(x => x.Name == "Admin");
             *   foreach (KeyValuePair<string, int> pair in sortedDict) {
             *       if (!pair.Key.Equals("WordOfBlake") || user.Roles.Contains(role)) {
             *           output += pair.Key + ": " + pair.Value + "\n";
             *       }
             *   }
             *   await message.Channel.SendMessageAsync(output);
             * }*/
            else if (message.Content.StartsWith("!warstats "))
            {
                await message.Channel.TriggerTypingAsync();

                string minutes = message.Content.Substring(10);
                string html    = string.Empty;
                string url     = @"https://161.97.74.91:16001/api/roguewarservices/getwarstats/?MinutesBack=" + minutes;

                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.ServerCertificateValidationCallback = (sender, certificate, chain, policyErrors) => { return(true); };
                request.AutomaticDecompression = DecompressionMethods.GZip;

                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                    using (Stream stream = response.GetResponseStream())
                        using (StreamReader reader = new StreamReader(stream)) {
                            html = reader.ReadToEnd();
                        }
                JObject a            = JObject.Parse(html);
                var     Resultobject = new Dictionary <string, int>();
                foreach (var pair in a)
                {
                    Resultobject.Add(pair.Key, (int)pair.Value);
                }
                var sortedDict = from entry in Resultobject orderby entry.Value descending select entry;
                var output     = "Active Players per Faction in the last " + minutes + " minutes:\n";
                var user       = message.Author as SocketGuildUser;
                foreach (KeyValuePair <string, int> pair in sortedDict)
                {
                    output += pair.Key + ": " + pair.Value + "\n";
                }
                await message.Channel.SendMessageAsync(output);
            }
            else if (message.Content == "!logs" || message.Content == "<:logs:655931426792931349>")
            {
                await message.Channel.TriggerTypingAsync();

                await message.Channel.SendMessageAsync("For <:logs:655931426792931349> just press the \"Gather Logs\" button in the launcher, then drag and drop the zip in here.");
            }
            else if (message.Content == "!output")
            {
                await message.Channel.TriggerTypingAsync();

                await message.Channel.SendMessageAsync("BATTLETECH\\Mods\\cleaned_output_log.txt\nJust drag and drop it in here.");
            }
            else if (message.Content == "!saves")
            {
                await message.Channel.TriggerTypingAsync();

                await message.Channel.SendMessageAsync("Saves can be found here:\nBattletech/RogueTechSaves");
            }
            else if (message.Content == "!pone")
            {
                await message.Channel.TriggerTypingAsync();

                await message.Channel.SendMessageAsync("<@248490263457038336>");

                await message.Channel.SendMessageAsync("\n▒▒▒▒░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓\n▒▒▒░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓\n▒▒░▐▌░▒░░░░░░▒▒▒▒▒▒▒▒▒\n▒▒░░▌░░░░░░░░░░▒▒▒▒▒▒▒\n▒▒▒▒░░░░░░░░░░░░▓▓▓▒▒▒\n▒▒▒▒▒▒░░▀▀███░░░░▓▒▒▒▓\n▒▒▒▒▒▒░▌▄████▌░░░▓▒▒▒▓\n▒▒▒▒▒░░███▄█▌░░░▓▓▒▓▓▓\n▒▒▒▒▒▒▒░▀▀▀▀░░░░▓▓▒▒▓▓\n▒▒▒▒▒▒▒▒░░░░░░░░░▓▓▓▓▓\n▒▒▒▒▒▒▒░░░░░░▐▄░▓▓▓▓▓▓\n▒▒▒▒▒▒░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓");
            }
            else if (message.Content == "!soda")
            {
                await message.Channel.TriggerTypingAsync();

                await message.Channel.SendFileAsync("C:/Users/Administrator/Desktop/soda.jpg");
            }
            else if (message.Content.Contains("!support"))
            {
                await message.Channel.TriggerTypingAsync();

                await message.Channel.SendMessageAsync("Thank you for using skynet!\nPlease explain your problem in detail and standby while we fetch our underpaid staff to help you.\nWhile you wait please press the gather logs button in the launcher and upload the zip here.\n\nAlso please check <#565112288315703316> if your question is already listed.\n\nThank you for your patience!");
            }
            else if (message.Content == "!raffle")
            {
                await message.Channel.TriggerTypingAsync();

                if (AddRaffler(message.Author.Mention))
                {
                    await message.Channel.SendMessageAsync("Thanks " + message.Author.Mention + " you have entered the raffle!");
                }
            }
            else if (message.Content == "!rafflecount")
            {
                await message.Channel.TriggerTypingAsync();

                await message.Channel.SendMessageAsync("There is currently " + rafflers.Count + " rafflers!");
            }
            else if (message.Content == "!rafflereset")
            {
                await message.Channel.TriggerTypingAsync();

                var user = message.Author as SocketGuildUser;
                var role = (user as IGuildUser).Guild.Roles.FirstOrDefault(x => x.Name == "Admin");
                if (user.Roles.Contains(role))
                {
                    if (ResetRaffle())
                    {
                        await message.Channel.SendMessageAsync("Raffle has been reset!");
                    }
                }
            }
            else if (message.Content == "!winner")
            {
                await message.Channel.TriggerTypingAsync();

                var user = message.Author as SocketGuildUser;
                var role = (user as IGuildUser).Guild.Roles.FirstOrDefault(x => x.Name == "Admin");
                if (user.Roles.Contains(role))
                {
                    var random = new Random();
                    int index  = random.Next(rafflers.Count);
                    await message.Channel.SendMessageAsync("Winner is " + rafflers[index]);
                }
            }
            else if (message.Content == "!openticket")
            {
                await message.Channel.TriggerTypingAsync();

                var user       = message.Author as SocketGuildUser;
                var server     = (user as IGuildUser).Guild;
                var categories = await server.GetCategoriesAsync();

                var targetCategory = categories.FirstOrDefault(x => x.Name.ToLower() == "support") as SocketCategoryChannel;

                if (targetCategory.Channels.Count >= 50)
                {
                    bool searchCategory = true;
                    for (int i = 2; searchCategory; i++)
                    {
                        targetCategory = categories.FirstOrDefault(x => x.Name.ToLower() == "support" + i) as SocketCategoryChannel;
                        if (targetCategory == null)
                        {
                            var role5 = (user as IGuildUser).Guild.Roles.FirstOrDefault(x => x.Name.ToLower() == "moderator");
                            var role4 = (user as IGuildUser).Guild.Roles.FirstOrDefault(x => x.Name.ToLower() == "admin");
                            await message.Channel.SendMessageAsync(role5.Mention + role4.Mention + " Plx Halp, the ticket list is full please create: support" + i + " for me. Thanks <3");

                            return;
                        }
                        else if (targetCategory.Channels.Count < 50)
                        {
                            searchCategory = false;
                        }
                    }
                }

                ticketnr++;
                var channel = await server.CreateTextChannelAsync("RogueTicket-" + ticketnr, x => {
                    x.CategoryId = targetCategory.Id;
                    x.Topic      = $"This channel was created at {DateTimeOffset.UtcNow} by {user}.";
                });

                OverwritePermissions permissions = new OverwritePermissions(PermValue.Deny, PermValue.Deny,
                                                                            PermValue.Allow, PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Deny,
                                                                            PermValue.Allow, PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Allow,
                                                                            PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Allow, PermValue.Deny, PermValue.Deny);
                var role = (user as IGuildUser).Guild.Roles.FirstOrDefault(x => x.Name.ToLower() == "rt-crew");
                OverwritePermissions permissions3 = new OverwritePermissions(PermValue.Deny, PermValue.Deny,
                                                                             PermValue.Allow, PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Deny,
                                                                             PermValue.Allow, PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Allow,
                                                                             PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Allow, PermValue.Deny, PermValue.Deny);
                var role3 = (user as IGuildUser).Guild.Roles.FirstOrDefault(x => x.Name.ToLower() == "modder");
                OverwritePermissions permissions2 = new OverwritePermissions(PermValue.Deny, PermValue.Allow,
                                                                             PermValue.Allow, PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Deny,
                                                                             PermValue.Allow, PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Allow,
                                                                             PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Allow, PermValue.Deny, PermValue.Deny);
                var role2 = (user as IGuildUser).Guild.Roles.FirstOrDefault(x => x.Name.ToLower() == "moderator");
                await channel.AddPermissionOverwriteAsync(role, permissions);

                await channel.AddPermissionOverwriteAsync(role2, permissions2);

                await channel.AddPermissionOverwriteAsync(role3, permissions3);

                await channel.AddPermissionOverwriteAsync(user, permissions);

                await channel.SendMessageAsync("Thank you for using skynet!\nPlease explain your problem in detail and standby while we fetch our underpaid staff to help you.\nWhile you wait please press the gather logs button in the launcher and upload the zip here.\n\nAlso please check <#565112288315703316> if your question is already listed.\n\nThank you for your patience!");

                await channel.SendMessageAsync(user.Mention);

                await message.Channel.SendMessageAsync("Ticket opened: " + channel.Mention);

                SaveTickets(ticketnr);
            }

            else if (message.Content == "!close" && message.Channel.Name.ToLower().StartsWith("rogueticket"))
            {
                var channel    = message.Channel as ITextChannel;
                var user       = message.Author as SocketGuildUser;
                var server     = (user as IGuildUser).Guild;
                var categories = await server.GetCategoriesAsync();

                var targetCategory = categories.FirstOrDefault(x => x.Name.ToLower() == "support - shit to be investigated");
                var originalname   = channel.Name;
                await channel.ModifyAsync(x => {
                    x.Name       = originalname + "-closed";
                    x.CategoryId = targetCategory.Id;
                });

                await channel.SyncPermissionsAsync();

                OverwritePermissions permissions = new OverwritePermissions(PermValue.Deny, PermValue.Deny,
                                                                            PermValue.Allow, PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Deny,
                                                                            PermValue.Allow, PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Allow,
                                                                            PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Allow, PermValue.Deny, PermValue.Deny);
                var role = (user as IGuildUser).Guild.Roles.FirstOrDefault(x => x.Name.ToLower() == "rt-crew");
                OverwritePermissions permissions2 = new OverwritePermissions(PermValue.Deny, PermValue.Allow,
                                                                             PermValue.Allow, PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Deny,
                                                                             PermValue.Allow, PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Allow,
                                                                             PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Allow, PermValue.Deny, PermValue.Deny);
                var role2 = (user as IGuildUser).Guild.Roles.FirstOrDefault(x => x.Name.ToLower() == "moderator");
                OverwritePermissions permissions3 = new OverwritePermissions(PermValue.Deny, PermValue.Deny,
                                                                             PermValue.Allow, PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Deny,
                                                                             PermValue.Allow, PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Allow,
                                                                             PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Allow, PermValue.Deny, PermValue.Deny);
                var role3 = (user as IGuildUser).Guild.Roles.FirstOrDefault(x => x.Name.ToLower() == "modder");
                await channel.AddPermissionOverwriteAsync(role, permissions);

                await channel.AddPermissionOverwriteAsync(role2, permissions2);

                await channel.AddPermissionOverwriteAsync(role3, permissions3);
            }

            else if (message.Content == "!delete" && message.Channel.Name.ToLower().StartsWith("rogueticket") && message.Channel.Name.ToLower().EndsWith("closed"))
            {
                var channel = message.Channel as ITextChannel;
                await channel.DeleteAsync();
            }

            //AUTO HELPER

            else if (message.Content.ToLower().Contains("pink") && message.Content.ToLower().Contains("mech") && message.Content.ToLower().Contains("mission"))
            {
                var user = message.Author as SocketGuildUser;
                if (!user.IsBot)
                {
                    await message.Channel.TriggerTypingAsync();

                    await message.Channel.SendMessageAsync(PINKMECHMISSION);
                }
            }
            else if (message.Content.ToLower().Contains("pink") && message.Content.ToLower().Contains("mech") && message.Content.ToLower().Contains("battle"))
            {
                var user = message.Author as SocketGuildUser;
                if (!user.IsBot)
                {
                    await message.Channel.TriggerTypingAsync();

                    await message.Channel.SendMessageAsync(PINKMECHMISSION);
                }
            }
        }
コード例 #22
0
ファイル: ChannelHelper.cs プロジェクト: yebafan/Discord.Net
 //Permission Overwrites
 public static async Task AddPermissionOverwriteAsync(IGuildChannel channel, BaseDiscordClient client,
                                                      IUser user, OverwritePermissions perms, RequestOptions options)
 {
     var args = new ModifyChannelPermissionsParams((int)PermissionTarget.User, perms.AllowValue.ToString(), perms.DenyValue.ToString());
     await client.ApiClient.ModifyChannelPermissionsAsync(channel.Id, user.Id, args, options).ConfigureAwait(false);
 }
コード例 #23
0
 public Task AddPermissionOverwriteAsync(IRole role, OverwritePermissions perms, RequestOptions options = null)
 => ChannelHelper.AddPermissionOverwriteAsync(this, Discord, role, perms, options);
コード例 #24
0
 public static async Task AddPermissionOverwriteAsync(IGuildChannel channel, BaseDiscordClient client,
                                                      IRole role, OverwritePermissions perms, RequestOptions options)
 {
     var args = new ModifyChannelPermissionsParams("role", perms.AllowValue, perms.DenyValue);
     await client.ApiClient.ModifyChannelPermissionsAsync(channel.Id, role.Id, args, options).ConfigureAwait(false);
 }
コード例 #25
0
        public async Task AddPermissionOverwriteAsync(IRole role, OverwritePermissions perms, RequestOptions options = null)
        {
            await ChannelHelper.AddPermissionOverwriteAsync(this, Discord, role, perms, options).ConfigureAwait(false);

            _overwrites = _overwrites.Add(new Overwrite(role.Id, PermissionTarget.Role, new OverwritePermissions(perms.AllowValue, perms.DenyValue)));
        }
コード例 #26
0
ファイル: PrivateVC.cs プロジェクト: MrDoritos/Discord-bot
        public static async Task PrivateVC_(string args, IMessage message)
        {
            if (!(message.Channel is IGuildChannel))
            {
                return;
            }
            var  guild          = (message.Channel as IGuildChannel).Guild;
            var  guildHandle    = Program.mainHandler.guildHandles[guild.Id];
            var  database       = guildHandle.database;
            bool hasMentions    = (message.MentionedUserIds != null && message.MentionedUserIds.Count > 0);
            bool hasRoleMention = (message.MentionedRoleIds != null && message.MentionedRoleIds.Count > 0);

            if (args == null || args.Length < 1)
            {
                await message.Channel.SendMessageAsync(null, false, Help(database.prefix, database.voiceChannelTimeOut));
            }

            var splitargs = args.Split(' ');

            if (splitargs.Any(n => n.ToLower() == "show"))
            {
                if (guildHandle.privateVCs.ContainsKey(message.Author.Id))
                {
                    var privatevc    = guildHandle.privateVCs[message.Author.Id];
                    var embedbuilder = new EmbedBuilder();
                    embedbuilder.Title = "Private VC";
                    embedbuilder.Color = Color.Blue;
                    embedbuilder.AddField("Owner", $"`{privatevc.Owner.Username}`", true);
                    embedbuilder.AddField("Channel", $"`{privatevc.VoiceChannel.Name}`", true);
                    bool somebool = !(await(privatevc.IsPopulated()));
                    embedbuilder.AddField("Can Timeout", $"`{somebool}`", true);
                    var users = (await guild.GetUsersAsync()).Where(n => privatevc.AllowedUsers.Any(n.Id.Equals)).ToArray();
                    var roles = guild.Roles.Where(n => privatevc.AllowedRoles.Any(n.Id.Equals)).ToArray();
                    EmbedFieldBuilder embedFieldBuilder = new EmbedFieldBuilder();
                    embedFieldBuilder.Name  = "Allowed Users";
                    embedFieldBuilder.Value = "None";
                    int userCount = users.Length;
                    if (userCount > 0)
                    {
                        embedFieldBuilder.Value = " ";
                        for (int i = 0; i < userCount; i++)
                        {
                            if (i < 1)
                            {
                                embedFieldBuilder.Value += $"`{users[i].Username}`";
                            }
                            else
                            {
                                embedFieldBuilder.Value += $", `{users[i].Username}`";
                            }
                        }
                    }
                    embedFieldBuilder.IsInline = true;
                    if (embedFieldBuilder.Value.ToString().Length > 0)
                    {
                        embedbuilder.AddField(embedFieldBuilder);
                    }
                    else
                    {
                        embedFieldBuilder.Value = "None";
                        embedbuilder.AddField(embedFieldBuilder);
                    }
                    embedFieldBuilder       = new EmbedFieldBuilder();
                    embedFieldBuilder.Name  = "Allowed Roles";
                    embedFieldBuilder.Value = "None";
                    int roleCount = roles.Length;
                    if (roleCount > 0)
                    {
                        embedFieldBuilder.Value = " ";
                        for (int i = 0; i < roleCount; i++)
                        {
                            if (i < 1)
                            {
                                embedFieldBuilder.Value += $"`{roles[i].Name}`";
                            }
                            else
                            {
                                embedFieldBuilder.Value += $", `{roles[i].Name}`";
                            }
                        }
                    }
                    //embedbuilder.AddField(embedFieldBuilder);
                    embedFieldBuilder.IsInline = true;
                    if (embedFieldBuilder.Value.ToString().Length > 0)
                    {
                        embedbuilder.AddField(embedFieldBuilder);
                    }
                    else
                    {
                        embedFieldBuilder.Value = "None";
                        embedbuilder.AddField(embedFieldBuilder);
                    }
                    await message.Channel.SendMessageAsync(null, false, embedbuilder.Build());
                }
                else
                {
                    await message.Channel.SendMessageAsync("You don't have a private VC!");
                }
                return;
            }
            if (splitargs.Any(n => n.ToLower() == "create"))
            {
                if (guildHandle.privateVCs.ContainsKey(message.Author.Id))
                {
                    await message.Channel.SendMessageAsync("You already have a private VC!");
                }
                else
                {
                    var currentguilduser = await guild.GetCurrentUserAsync();

                    var  roles          = guild.Roles.Where(n => currentguilduser.RoleIds.Any(n.Id.Equals));
                    bool hasPermissions = roles.Any(n => (n.Permissions.ManageChannels && n.Permissions.ManageRoles || n.Permissions.Administrator));
                    if (hasPermissions)
                    {
                        try
                        {
                            var channel = await guild.CreateVoiceChannelAsync($"{message.Author.Username}'s PrivateVC");

                            var role = await guild.CreateRoleAsync($"PrivateVC Role");

                            await channel.RemovePermissionOverwriteAsync(guild.EveryoneRole);

                            var perms   = new OverwritePermissions(PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Allow, PermValue.Deny, PermValue.Deny);
                            var noperms = new OverwritePermissions(PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny);
                            await channel.AddPermissionOverwriteAsync(role, perms);

                            await channel.AddPermissionOverwriteAsync(guild.EveryoneRole, noperms);

                            guildHandle.privateVCs.Add(message.Author.Id, new GuildHandler.PrivateVC.PrivateVC((message.Author as IGuildUser), channel, role, database.voiceChannelTimeOut));
                            await message.Channel.SendMessageAsync($"Successfully created `{channel.Name}`");
                        }
                        catch (Exception e)
                        {
                            Logger.Error($"Could not create private VC on {guild.Name} ({guild.Id})", e);
                            await message.Channel.SendMessageAsync($"Could not create VC");
                        }
                    }
                    else
                    {
                        await message.Channel.SendMessageAsync("I don't have the appropriate permissions to manage channels!");
                    }
                }
            }
            if (splitargs.Any(n => n.ToLower() == "delete"))
            {
            }

            if (hasMentions || hasRoleMention)
            {
                if (!(guildHandle.privateVCs.ContainsKey(message.Author.Id)))
                {
                    await message.Channel.SendMessageAsync("You don't have a private VC!");
                }
                else
                {
                    var  perms     = new OverwritePermissions(PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Allow, PermValue.Deny, PermValue.Deny);
                    var  noperms   = new OverwritePermissions(PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny);
                    bool removeall = (splitargs.Any(n => n.ToLower() == "all"));
                    var  privatevc = guildHandle.privateVCs[message.Author.Id];
                    IEnumerable <IRole>      roles = null;
                    IEnumerable <IGuildUser> users = null;

                    if (hasRoleMention)
                    {
                        roles = guild.Roles.Where(n => message.MentionedRoleIds.Any(n.Id.Equals));
                    }
                    if (hasMentions)
                    {
                        users = (await guild.GetUsersAsync()).Where(n => message.MentionedUserIds.Any(n.Id.Equals));
                    }
                    if (splitargs.Any(n => n.ToLower() == "remove"))
                    {
                        if (removeall)
                        {
                            privatevc.AllowedRoles = new List <ulong>();
                            privatevc.AllowedUsers = new List <ulong>();
                            await message.Channel.SendMessageAsync("Successfully deleted all rules");

                            return;
                        }
                        if (hasMentions && !hasRoleMention)
                        {
                            var dat   = users.Where(n => privatevc.AllowedUsers.Any(n.Id.Equals));
                            int count = dat.Count();
                            privatevc.AllowedUsers.RemoveAll(n => dat.Any(m => m.Id == n));
                            await message.Channel.SendMessageAsync($"Removed `{count}` users");
                        }
                        else
                        if (hasRoleMention && !hasMentions)
                        {
                            var dat   = roles.Where(n => privatevc.AllowedRoles.Any(n.Id.Equals));
                            int count = dat.Count();
                            privatevc.AllowedRoles.RemoveAll(n => dat.Any(m => m.Id == n));
                            await message.Channel.SendMessageAsync($"Removed `{count}` roles");
                        }
                        else
                        {
                            var roledat   = roles.Where(n => privatevc.AllowedRoles.Any(n.Id.Equals));
                            var userdat   = users.Where(n => privatevc.AllowedUsers.Any(n.Id.Equals));
                            int usercount = userdat.Count();
                            int rolecount = roledat.Count();
                            privatevc.AllowedRoles.RemoveAll(n => roledat.Any(m => m.Id == n));
                            privatevc.AllowedUsers.RemoveAll(n => userdat.Any(m => m.Id == n));
                            await message.Channel.SendMessageAsync($"Removed `{usercount}` users and `{rolecount}` roles");
                        }
                        return;
                    }
                    else
                    {
                        if (hasMentions && !hasRoleMention)
                        {
                            var dat   = users.Where(n => !(privatevc.AllowedUsers.Any(n.Id.Equals)));
                            int count = dat.Count();
                            privatevc.AllowedUsers.AddRange(dat.Select(n => n.Id));
                            foreach (var usr in dat)
                            {
                                await usr.AddRoleAsync(privatevc.Role);
                            }
                            await message.Channel.SendMessageAsync($"Added `{count}` users");
                        }
                        else
                        if (hasRoleMention && !hasMentions)
                        {
                            var dat   = roles.Where(n => !(privatevc.AllowedRoles.Any(n.Id.Equals)));
                            int count = dat.Count();
                            privatevc.AllowedRoles.AddRange(dat.Select(n => n.Id));
                            foreach (var rol in dat)
                            {
                                await privatevc.VoiceChannel.AddPermissionOverwriteAsync(rol, perms);
                            }
                            await message.Channel.SendMessageAsync($"Added `{count}` roles");
                        }
                        else
                        {
                            var roledat   = roles.Where(n => !(privatevc.AllowedRoles.Any(n.Id.Equals)));
                            var userdat   = users.Where(n => !(privatevc.AllowedUsers.Any(n.Id.Equals)));
                            int usercount = userdat.Count();
                            int rolecount = roledat.Count();
                            privatevc.AllowedRoles.AddRange(roledat.Select(n => n.Id));
                            privatevc.AllowedUsers.AddRange(userdat.Select(n => n.Id));
                            foreach (var rol in roledat)
                            {
                                await privatevc.VoiceChannel.AddPermissionOverwriteAsync(rol, perms);
                            }
                            foreach (var usr in userdat)
                            {
                                await usr.AddRoleAsync(privatevc.Role);
                            }
                            await message.Channel.SendMessageAsync($"Added `{usercount}` users and `{rolecount}` roles");
                        }
                        return;
                    }
                }
            }
        }
コード例 #27
0
        public static async void TimerEvent(object sender, ElapsedEventArgs e)
        {
            // Check all guilds we are in
            foreach (var guild in discordclient.Guilds)
            {
                // Make sure we have the racing role
                if (!guild.Roles.Where(x => x.Name.ToLower() == "racing").Any())
                {
                    try
                    {
                        // If the racing role does not exist, make it and the channels needed
                        await guild.CreateRoleAsync("racing", null, null, false, null);

                        await guild.CreateTextChannelAsync(Channel);

                        await guild.CreateTextChannelAsync(SpoilChannel);

                        var chan         = guild.Channels.FirstOrDefault(x => x.Name.ToLower() == SpoilChannel.ToLower());
                        var roleInternal = guild.Roles.FirstOrDefault(x => x.Name.ToLower() == "racing");
                        await chan.AddPermissionOverwriteAsync(roleInternal, OverwritePermissions.DenyAll(chan));
                    }
                    catch { }
                }

                // Locate the role
                var role = guild.Roles.FirstOrDefault(x => x.Name.ToLower() == "racing");
                List <SocketGuildUser> UsersInVoice = new List <SocketGuildUser>();
                // Find all users in voice channels
                foreach (var chan in guild.VoiceChannels)
                {
                    try
                    {
                        foreach (var user in chan.Users)
                        {
                            UsersInVoice.Add(user);
                        }
                    }
                    catch { }
                }

                // Add the role or remove the role if they are in a voice channel
                foreach (var usr in guild.Users)
                {
                    if (UsersInVoice.Contains(usr))
                    {
                        if (!usr.Roles.Contains(role))
                        {
                            try
                            {
                                await usr.AddRoleAsync(role);
                            }
                            catch { }
                        }
                    }
                    else
                    {
                        if (usr.Roles.Contains(role))
                        {
                            try
                            {
                                await usr.RemoveRoleAsync(role);
                            }
                            catch { }
                        }
                    }
                }
            }
        }
コード例 #28
0
        /// <summary>
        /// Create a Category using the channel using roles provided
        /// </summary>
        public static async Task CreateCategory(CommandContext Context, string Category, [Optional] List <Permissions> Roles, [Optional] int?Position)
        {
            // Get the list of Categories
            IReadOnlyCollection <IGuildChannel> categories = await Context.Guild.GetCategoriesAsync();

            // Check if the Category exists
            bool             exists      = false;
            ICategoryChannel newcategory = null;

            foreach (var categoryname in categories)
            {
                if (categoryname.Name.ToString().ToLower().Trim() == Category.ToString().ToLower().Trim())
                {
                    // If the channel exists exit
                    newcategory = categoryname as ICategoryChannel;
                    exists      = true;
                    break;
                }
            }
            // Create the Category
            if (exists == false)
            {
                newcategory = await Context.Guild.CreateCategoryAsync(Category);
            }

            // Wait for Category to Generate
            await Task.Delay(1000);

            if (newcategory != null)
            {
                // Check if we are passing roles
                if (Roles != null)
                {
                    // Parse in the roles to add them to the channel
                    foreach (Permissions role in Roles)
                    {
                        // Before we go any further let's see if the role already exists
                        // If the role exists exit the task
                        foreach (Discord.IRole existingrole in Context.Guild.Roles)
                        {
                            // Compare the list of roles in the discord with the Role
                            if (existingrole.Name.ToLower().Trim() == role.Role.ToLower().Trim())
                            {
                                // Add the selected roles to the channel using inhert as its base
                                await newcategory.AddPermissionOverwriteAsync(existingrole, role.ChannelPermType);

                                break;
                            }
                        }
                    }
                    // Remove the everyone permission if it's not in the list
                    bool permfound = false;
                    foreach (Permissions perm in Roles)
                    {
                        if (perm.Role.ToLower().Contains("everyone") == true)
                        {
                            permfound = true;
                            break;
                        }
                    }
                    if (permfound == false)
                    {
                        foreach (Discord.IRole existingrole in Context.Guild.Roles)
                        {
                            // Compare the list of roles in the discord with the Role
                            if (existingrole.Name.ToLower() == "@everyone")
                            {
                                OverwritePermissions denypermissions = new OverwritePermissions(createInstantInvite: PermValue.Deny, manageChannel: PermValue.Deny, addReactions: PermValue.Deny, viewChannel: PermValue.Deny, sendMessages: PermValue.Deny, sendTTSMessages: PermValue.Deny, manageMessages: PermValue.Deny, embedLinks: PermValue.Deny, attachFiles: PermValue.Deny, readMessageHistory: PermValue.Deny, mentionEveryone: PermValue.Deny, useExternalEmojis: PermValue.Deny, connect: PermValue.Deny, speak: PermValue.Deny, muteMembers: PermValue.Deny, deafenMembers: PermValue.Deny, moveMembers: PermValue.Deny, useVoiceActivation: PermValue.Deny, manageRoles: PermValue.Deny, manageWebhooks: PermValue.Deny);
                                // Remove Everyones permissions
                                await newcategory.AddPermissionOverwriteAsync(existingrole, denypermissions);

                                break;
                            }
                        }
                    }
                }
                // Check if a position was provided
                if (Position != null)
                {
                    // Update its position
                    await newcategory.ModifyAsync(x =>
                    {
                        x.Position = Position.Value;
                    });
                }
            }
        }
コード例 #29
0
        public static async Task SupportSystem(SocketMessage s)
        {
            var msg = s as SocketUserMessage;

            if (msg == null)
            {
                return;
            }
            var context = new SocketCommandContext(new DiscordSocketClient(), msg);

            if (context.User.IsBot)
            {
                return;
            }
            var user = context.User as SocketGuildUser;

            var config = GuildConfig.GetGuildConfig(context.Guild.Id) ??
                         GuildConfig.CreateGuildConfig(context.Guild.Id);

            config.GuildOwnerId = context.Guild.OwnerId;
            var adminRole = context.Guild.Roles.FirstOrDefault(x => x.Id == config.AdminRole);

            if (msg.Content == "SetupSupport" && user.Roles.Contains(adminRole))
            {
                var embed = new EmbedBuilder();
                embed.WithColor(Config.bot.DefaultEmbedColour);
                embed.WithDescription(Utilities.GetLocaleMsg("SupportEmbedText"));
                embed.WithAuthor(context.Guild.Owner);
                await context.Channel.SendMessageAsync("", false, embed);

                config.SupportChannelId   = context.Channel.Id;
                config.SupportChannelName = context.Channel.Name;
                config.CanCloseOwnTicket  = true;
                GuildConfig.SaveGuildConfig();
            }

            if (msg.Content != "SetupSupport")
            {
                var supportConfig       = GuildConfig.GetGuildConfig(context.Guild.Id);
                var supportStartChannel = context.Guild.Channels.FirstOrDefault(c => c.Name == supportConfig.SupportChannelName);

                if (msg.Channel == supportStartChannel)
                {
                    var supportChannelExists = context.Guild.Channels.FirstOrDefault(c => c.Name == $"{supportConfig.SupportChannelName}-{context.User.Id}");
                    var role = context.Guild.Roles.FirstOrDefault(r => r.Name == supportConfig.SupportRole);

                    if (supportChannelExists == null)
                    {
                        await msg.DeleteAsync();

                        var chnl = await context.Guild.CreateTextChannelAsync($"{supportConfig.SupportChannelName}-{context.User.Id}");

                        await chnl.AddPermissionOverwriteAsync(context.User, new OverwritePermissions(readMessages : PermValue.Allow, sendMessages : PermValue.Allow, addReactions : PermValue.Allow, sendTTSMessages : PermValue.Deny));

                        await chnl.AddPermissionOverwriteAsync(context.Guild.EveryoneRole, new OverwritePermissions(readMessages : PermValue.Deny, sendMessages : PermValue.Deny));

                        if (role != null)
                        {
                            await chnl.AddPermissionOverwriteAsync(role, OverwritePermissions.AllowAll(chnl));
                        }

                        await chnl.ModifyAsync(x =>
                        {
                            x.Position = supportStartChannel.Position - 1;
                            x.Topic    = $"Support ticket created by <@{msg.Author.Id}> at {DateTime.UtcNow} (UTC)";
                        });

                        var embed = new EmbedBuilder()
                                    .WithAuthor(msg.Author)
                                    .WithThumbnailUrl(context.User.GetAvatarUrl())
                                    .WithTitle("What do you need help with?")
                                    .WithDescription($"```{msg.Content}```\n\nIf you're done with the ticket, type `{config.CommandPrefix}close`, or react to the message with ☑.")
                                    .WithColor(config.EmbedColour1, config.EmbedColour2, config.EmbedColour3)
                                    .WithFooter($"Time Created: {DateTime.Now}");
                        var message = await chnl.SendMessageAsync($"You can close this ticket if you have the role set for moderating tickets: `{supportConfig.SupportRole}`", false, embed);

                        await message.PinAsync();

                        await message.AddReactionAsync(new Emoji("☑"));
                    }
                    else
                    {
                        var channel = context.Guild.GetTextChannel(supportChannelExists.Id);
                        await channel.SendMessageAsync($"{context.User.Mention}, please send your message here rather than the primary support channel. Text: ```{msg.Content}``` If you cannot type in here, please tell an admin.");

                        await msg.DeleteAsync();
                    }
                }
            }
        }
コード例 #30
0
        public async Task ToiletAnswer()
        {
            var user   = Context.User as SocketGuildUser;
            var RoleID = user.Guild.GetRole(Master_Bedroom.Id);

            if (!user.Roles.Contains(RoleID))
            {
                return;
            }

            if (States.KidRoomState == States.StatesListMaster[6])
            {
                Room4.LoungeRoom = await Context.Guild.CreateRoleAsync("Lounge", null, Color.DarkGrey, false, null);

                Room4.LoungeChannel = await Context.Guild.CreateTextChannelAsync("Lounge", null, null);

                await Room4.LoungeChannel.AddPermissionOverwriteAsync((IRole)Context.Guild.EveryoneRole, OverwritePermissions.DenyAll(Room4.LoungeChannel));

                await Room4.LoungeChannel.AddPermissionOverwriteAsync((IRole)Room4.LivingRoom, OverwritePermissions.DenyAll(Room4.LoungeChannel));

                await Room4.LoungeChannel.AddPermissionOverwriteAsync((IRole)Room4.LoungeRoom, OverwritePermissions.AllowAll(Room4.LoungeChannel));

                EmbedBuilder embed = new EmbedBuilder();
                var          user2 = Context.User as SocketGuildUser;
                await user2.AddRoleAsync(Room4.LoungeRoom);

                embed.WithDescription("I input the code");
                embed.AddField("The toilet runs through the sequence of flushes. Suddenly, the compartment lid blows off. I think I got it right!", "There's a key to the !lounge in here.");
                if (nooseDown == true)
                {
                    await user.AddRoleAsync(Room4.LoungeRoom);

                    embed.AddField("No reason to stay here now.", "I think it's time to get out of here.");
                }
                else
                {
                    embed.AddField("I can get to the next room, but my partner will be trapped.", "I don't think i'll be able to make it out without their help. Maybe I should help them first.");
                }
                await MasterBedChannel.SendMessageAsync("", false, embed.Build());
            }
        }