Example #1
0
        public static async Task SyncRolesAsync(DiscordGuild guild)
        {
            Config.Log.Debug("Syncing moderator list to the sudoer role");
            var modRoleList = guild.Roles.Where(kvp => kvp.Value.Name.Equals("Moderator")).ToList();

            if (modRoleList.Count == 0)
            {
                return;
            }

            var modRole = modRoleList.First().Value;
            var members = await guild.GetAllMembersAsync().ConfigureAwait(false);

            var guildMods = members.Where(m => m.Roles.Any(r => r.Id == modRole.Id) && !m.IsBot && !m.IsCurrent).ToList();

            foreach (var mod in guildMods)
            {
                if (!IsMod(mod.Id))
                {
                    Config.Log.Debug($"Making {mod.Username}#{mod.Discriminator} a bot mod");
                    await AddAsync(mod.Id).ConfigureAwait(false);
                }
                if (!IsSudoer(mod.Id))
                {
                    Config.Log.Debug($"Making {mod.Username}#{mod.Discriminator} a bot sudoer");
                    await MakeSudoerAsync(mod.Id).ConfigureAwait(false);
                }
            }
        }
Example #2
0
        public static async Task <DiscordUser> FindUserByName(DiscordGuild server, string name, string discrim)
        {
            var members = await server.GetAllMembersAsync();

            if (discrim == null)
            {
                //Try searching without discrim
                var matches = members.Where(x => x.Username.ToLower() == name.ToLower());
                if (matches.Count() == 1)
                {
                    return(matches.First());
                }
                else
                {
                    return(null);
                }
            }
            else
            {
                //Try searching with discrim
                var matches = members.Where(x => x.Username.ToLower() == name.ToLower() && x.Discriminator == discrim.ToString());
                if (matches.Count() == 1)
                {
                    return(matches.First());
                }
                else
                {
                    return(null);
                }
            }
        }
        public async Task <List <DiscordMember> > GetAllNonBotMembers(DiscordClient discord)
        {
            DiscordGuild guild = await discord.GetGuildAsync(GuildConfiguration.Id);

            var members = (await guild.GetAllMembersAsync()).Where(x => !x.IsBot).ToList();

            return(members);
        }
Example #4
0
        private async Task <int> JoinPosition(DiscordMember member, DiscordGuild guild)
        {
            var members = await guild.GetAllMembersAsync();

            var joinPosition = members.OrderBy(x => x.JoinedAt).ToList().FindIndex(x => x.Id == member.Id) + 1;

            return(joinPosition);
        }
Example #5
0
        public async Task Add(DiscordGuild G)
        {
            var Members = await G.GetAllMembersAsync();

            foreach (DiscordMember M in Members)
            {
                await this.Add(M);
            }
        }
Example #6
0
 public async Task <DiscordMember> FindMemberByName(DiscordGuild guild, string username)
 {
     foreach (var member in await guild.GetAllMembersAsync())
     {
         if (member.Username.ToLower().Contains(username.ToLower()))
         {
             return(member);
         }
     }
     return(null);
 }
Example #7
0
    public static async Task <Dictionary <string, string> > GetStringDictionaryAsync(DiscordGuild guild)
    {
        var allmembers = await guild.GetAllMembersAsync();

        return(new Dictionary <string, string>
        {
            ["AllMembersCount"] = NumberUtils.FormatSize(guild.MemberCount),
            ["MemberCount"] = NumberUtils.FormatSize(allmembers.LongCount(x => !x.IsBot)),
            ["BotsCount"] = NumberUtils.FormatSize(allmembers.LongCount(x => x.IsBot)),
            ["BoostCount"] = NumberUtils.FormatSize((int)guild.PremiumSubscriptionCount)
        });
    }
Example #8
0
        public async Task RunBotAsync()
        {
            var json = "";

            using (var fs = File.OpenRead("config.json"))
                using (var sr = new StreamReader(fs, new UTF8Encoding(false)))
                    json = await sr.ReadToEndAsync();


            var cfgjson = JsonConvert.DeserializeObject <ConfigJson>(json);
            var cfg     = new DiscordConfiguration
            {
                Token     = cfgjson.Token,
                TokenType = TokenType.Bot,

                AutoReconnect         = true,
                LogLevel              = LogLevel.Debug,
                UseInternalLogHandler = true
            };

            this.Client = new DiscordClient(cfg);

            this.Client.Ready          += this.Client_Ready;
            this.Client.GuildAvailable += this.Client_GuildAvailable;
            this.Client.ClientErrored  += this.Client_ClientError;

            this.Client.MessageCreated       += Client_MessageCreated;
            this.Client.MessageReactionAdded += Client_MessageReactionAdded;
            this.Client.VoiceStateUpdated    += Client_VoiceStateUpdated;

            await this.Client.ConnectAsync();

            DiscordGuild wondergames = await Client.GetGuildAsync(ulong.Parse(cfgjson.WonderServer));

            if (!File.Exists(filepath))
            {
                IReadOnlyCollection <DiscordUser> userbase = await wondergames.GetAllMembersAsync();

                LastSeen = new Dictionary <ulong, DateTime>();
                foreach (DiscordUser user in userbase)
                {
                    LastSeen.Add(user.Id, DateTime.MinValue);
                }
                File.WriteAllText(filepath, JsonConvert.SerializeObject(LastSeen, Formatting.Indented));
            }
            else
            {
                LastSeen = JsonConvert.DeserializeObject <Dictionary <ulong, DateTime> >(File.ReadAllText(filepath));
            }

            await Task.Delay(-1);
        }
Example #9
0
        public static async Task <int> GetOfflineCountAsync(this DiscordGuild guild)
        {
            int offlineCount = 0;

            foreach (DiscordMember member in await guild.GetAllMembersAsync().ConfigureAwait(false))
            {
                if (member.Presence == null || member.Presence.Status == UserStatus.Invisible)
                {
                    offlineCount++;
                }
            }
            return(offlineCount);
        }
Example #10
0
        public static async Task <int> GetBotCountAsync(this DiscordGuild guild)
        {
            int botCount = 0;

            foreach (DiscordMember member in await guild.GetAllMembersAsync().ConfigureAwait(false))
            {
                if (member.IsBot)
                {
                    botCount++;
                }
            }
            return(botCount);
        }
Example #11
0
        public List <DiscordMember> AddRoleAsActive(DiscordGuild guild, DiscordRole role)
        {
            var result = new List <DiscordMember>();

            foreach (var user in guild.GetAllMembersAsync().Result)
            {
                if (user.Roles.Contains(role))
                {
                    SetActive(user);
                    result.Add(user);
                }
            }

            return(result);
        }
Example #12
0
        public static async Task <DiscordColor> returnDiscordRoleColourAsync(string username)
        {
            DiscordColor colorDiscord           = DiscordColor.White;
            DiscordGuild guild                  = returnDiscordGuild(retrieveDiscordGuildID(Program.listeningGuild));
            IReadOnlyList <DiscordMember> users = await guild.GetAllMembersAsync();

            foreach (DiscordMember user in users)
            {
                if (user.Username == username)
                {
                    colorDiscord = user.Color;
                }
            }
            return(colorDiscord);
        }
Example #13
0
        public async Task <Administrator[]> GetAdministratorsAsync(DiscordGuild guild)
        {
            var members = await guild.GetAllMembersAsync();

            var AdministratorObjectList = members.Where(member => member.Roles.Any(role => role.Permissions.HasPermission(Permissions.KickMembers)));
            var AdministratorIDList     = new List <Administrator>();

            foreach (var admin in AdministratorObjectList)
            {
                AdministratorIDList.Add(new Administrator()
                {
                    ID = admin.Id
                });
            }
            return(AdministratorIDList.ToArray());
        }
Example #14
0
        public static async Task <int> GetOnlineCountAsync(this DiscordGuild guild)
        {
            int onlineCount = 0;

            foreach (DiscordMember member in await guild.GetAllMembersAsync().ConfigureAwait(false))
            {
                if (member.Presence != null)
                {
                    if (member.Presence.Status == UserStatus.Online || member.Presence.Status == UserStatus.Idle || member.Presence.Status == UserStatus.DoNotDisturb)
                    {
                        onlineCount++;
                    }
                }
            }
            return(onlineCount);
        }
        public static async Task <IReadOnlyCollection <DiscordMember> > GetGuildMembersAsync(DiscordGuild guild)
        {
            if (!BotHasIntent(DiscordIntents.GuildMembers))
            {
                Logger.Error("Attempted to get full guild member list without the bot having the privileged GuildMembers intent");
                return(null);
            }

            try
            {
                return(await guild.GetAllMembersAsync());
            }
            catch (Exception e)
            {
                Logger.Error("Error occured when attempting to fetch all guild members. Error message: " + e);
                return(null);
            }
        }
Example #16
0
        public static async Task UpdateUserList(DiscordGuild e, bool update)
        {
            var members = await e.GetAllMembersAsync();

            foreach (var user in members)
            {
                if (!RPClass.Users.Any(x => x.UserData.UserID == user.Id))
                {
                    RPClass.Users.Add(new UserObject.RootObject(user.Id));
                }
            }

            if (update)
            {
                await XPClass.UpdateStats();

                await XPClass.UpdatePlayerRanking(e);

                await XPClass.UpdateGuildRanking(e);
            }
        }
Example #17
0
        public async Task CreateGuild(CommandContext e, string lang = "fr")
        {
            try
            {
                Global.Client = e.Client;
                SetLanguage(lang);

                var msgs = (await e.Guild.GetDefaultChannel().GetMessagesAsync(10)).ToList()
                           .FindAll(m => m.Author == e.Client.CurrentUser || m.Content.Contains("!go"));
                if (msgs.Count > 0)
                {
                    await e.Guild.GetDefaultChannel().DeleteMessagesAsync(msgs);
                }
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception);
            }


            while (Guild == null)
            {
                try
                {
                    Guild   = e.Client.CreateGuildAsync("Loup Garou").GetAwaiter().GetResult();
                    GuildId = Guild.Id;
                    await Guild.ModifyAsync(x => x.SystemChannel = null);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }
            }

            await GameBuilder.CreateDiscordRoles(this);

            await GameBuilder.GetMember(Guild, Global.Client.CurrentUser).GrantRoleAsync(Global.Roles[CustomRoles.Admin]);

            await(await Guild.GetAllMembersAsync()).First().ModifyAsync(m => m.Nickname = Texts.BotName);

            Console.WriteLine("Guild Created");

            DiscordChannels = new Dictionary <GameChannel, DiscordChannel>();

            Console.WriteLine("Delatation faite");

            await e.TriggerTypingAsync();

            var generalChannel = Guild.GetDefaultChannel();
            await generalChannel.ModifyAsync(x => x.Name = "Bot");

            DiscordChannels.Add(GameChannel.BotText, generalChannel);

            var botVChannel = await Guild.CreateChannelAsync("Bot", ChannelType.Voice, generalChannel.Parent);

            DiscordChannels.Add(GameChannel.BotVoice, botVChannel);
            e.Client.GuildMemberAdded += NewGuildMember;
            e.Client.GuildMemberAdded += StartMember;


            var inv = await generalChannel.CreateInviteAsync();

            var msgInv = await e.RespondAsync(inv.ToString());

            var embed = new DiscordEmbedBuilder
            {
                Title = Texts.BotWantPlay,
                Color = Color.PollColor
            };
            var askMessage = await generalChannel.SendMessageAsync(embed : embed.Build());

            var emoji = DiscordEmoji.FromName(e.Client, ":thumbsup:");
            await askMessage.CreateReactionAsync(emoji);


            var players = new List <DiscordMember>();


            try
            {
                var timeToJoin = 10;
                await Task.Delay(timeToJoin * 1000);

                var users = await(await Guild.GetDefaultChannel().GetMessageAsync(askMessage.Id))
                            .GetReactionsAsync(emoji);

                foreach (var usr in users)
                {
                    if (!usr.IsBot)
                    {
                        var dm = await Guild.GetMemberAsync(usr.Id);

                        await dm.RevokeRoleAsync(Global.Roles[CustomRoles.Spectator]);

                        await dm.GrantRoleAsync(Global.Roles[CustomRoles.Player]);

                        players.Add(dm);
                    }
                }

                // DEBUG
                foreach (var discordMember in players)
                {
                    WriteDebug($"Il y a {discordMember.Username} dans le jeu");
                }

                e.Client.GuildMemberAdded -= StartMember;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }


            Console.WriteLine(13);
            try
            {
                GameBuilder.Debug(this);
                var channelsToRemove = new List <DiscordChannel>();
                while (Guild.Channels.Count != DiscordChannels.Count)
                {
                    foreach (var c in Guild.Channels)
                    {
                        try
                        {
                            if (!DiscordChannels.ContainsValue(c))
                            {
                                channelsToRemove.Add(c);
                            }
                        }
                        catch (NotFoundException exception)
                        {
                            Console.WriteLine(exception.JsonMessage);
                        }
                    }

                    foreach (var dm in channelsToRemove)
                    {
                        await dm.DeleteAsync();
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }


            Console.WriteLine("Supr fini");

            await RoleAssignment(msgInv, e, players);

            foreach (var p in PersonnagesList)
            {
                WriteDebug($"Y : {p.Me.Username}");

                DiscordMember usr = GameBuilder.GetMember(Guild, p.Me);

                await DiscordChannels[GameChannel.BotVoice].AddOverwriteAsync(usr, Permissions.None,
                                                                              GameBuilder.CreatePerms(Permissions.AccessChannels, Permissions.UseVoice));
            }


            if (PersonnagesList.Count < 2)
            {
                Victory = Victory.NotPlayable;
                embed   = new DiscordEmbedBuilder
                {
                    Title = $"{Texts.NotEnoughPlayer} {PersonnagesList.Count}",
                    Color = Color.InfoColor
                };
                await DiscordChannels[GameChannel.TownText].SendMessageAsync(embed: embed.Build());
            }

            while (Victory == Victory.None && Victory != Victory.NotPlayable)
            {
                await PlayAsync();
            }
        }
Example #18
0
        /// <summary>
        /// Attempts to get a member via three distinct methods: <para/>
        /// First, it will attempt to cast <paramref name="data"/> into a ulong and see if it is a user GUID (this includes processing pings, like &lt;@GUID_HERE&gt;)<para/>
        /// Second, it will attempt to see if <paramref name="data"/> is a discriminator (only if data is formatted as #XXXX where XXXX is four digits)<para/>
        /// Finally, and only if the second method had no results or wasn't used, it will attempt to find <paramref name="data"/> as a nickname or username.<para/>
        /// This will throw a NonSingularResultException if the query can return more than one user.
        /// </summary>
        /// <param name="server">The Discord server to target.</param>
        /// <param name="data">The query to get a XanBotMember from. This can be a ulong as a string, a user ping (&lt;@ulong&gt;), a server nickname, a username (or optionally username#discriminator)</param>
        /// <exception cref="NonSingularResultException"/>
        /// <returns></returns>
        public static async Task <XanBotMember> GetMemberFromDataAsync(DiscordGuild server, string data)
        {
            // Wait! If it's a ping, it will start with <@ and end with >
            string newdata = data;

            if (data.StartsWith("<@") && data.EndsWith(">"))
            {
                newdata = data.Substring(2, data.Length - 3);
            }

            // I don't know if this method is used but it's one Discord supports so I have to support it too.
            if (data.StartsWith("<@!") && data.EndsWith(">"))
            {
                newdata = data.Substring(3, data.Length - 4);
            }

            if (ulong.TryParse(newdata, out ulong uuid))
            {
                try
                {
                    DiscordUser user = await XanBotCoreSystem.Client.GetUserAsync(uuid);

                    // Catch case: Someone's username is a bunch of numbers OR they link a user ID that isn't in the server.
                    if (user != null)
                    {
                        XanBotMember member = XanBotMember.GetMemberFromUser(server, user);
                        if (member != null)
                        {
                            return(member);
                        }
                    }
                }
                catch (NotFoundException)
                {
                    // The person typed in a number, it doesn't correspond to a discord GUID, so we'll catch the NotFoundException and let the code continue.
                }
            }
            List <XanBotMember> potentialReturns = new List <XanBotMember>();
            string dataLower = data.ToLower();

            // Discriminator searching:
            if (dataLower.Length == 5 && dataLower.First() == '#' && ushort.TryParse(dataLower.Substring(1), out ushort _))
            {
                // This is a discriminator -- Length is 5, starts with #, and the last 4 chars are numbers.
                foreach (DiscordUser user in server.Members.Values)
                {
                    string ud = "#" + user.Discriminator;
                    if (dataLower == ud)
                    {
                        potentialReturns.Add(XanBotMember.GetMemberFromUser(server, user));
                    }
                }
            }

            if (potentialReturns.Count == 0)
            {
                // ONLY if discriminator searching found nothing will we search by display name or username.
                if (NeedsNewMemberCache)
                {
                    LastCheckTime = DateTime.Now;
                    Members       = await server.GetAllMembersAsync();
                }
                foreach (DiscordMember member in Members)
                {
                    //foreach (DiscordMember member in server.Members.Values) { // DO NOT USE THIS. It's not fully populated in large servers.
                    string fullName = member.Username + "#" + member.Discriminator;
                    string nickName = member.Nickname ?? "";

                    fullName = fullName.ToLower();
                    nickName = nickName.ToLower();
                    if (nickName.Length >= dataLower.Length && dataLower == nickName.Substring(0, dataLower.Length))
                    {
                        potentialReturns.Add(XanBotMember.GetMemberFromUser(server, member));
                    }
                    else if (fullName.Length >= dataLower.Length && dataLower == fullName.Substring(0, dataLower.Length))
                    {
                        potentialReturns.Add(XanBotMember.GetMemberFromUser(server, member));
                    }

                    // Do NOT break if there are multiple. This is necessary for the values in a potential NonSingularResultException
                }
            }

            XanBotMember[] potentialReturnsArray = potentialReturns.ToArray();
            if (potentialReturnsArray.Length == 0)
            {
                return(null);
            }
            else if (potentialReturnsArray.Length == 1)
            {
                return(potentialReturnsArray[0]);
            }
            else
            {
                throw new NonSingularResultException(string.Format("More than one member of the server was found with the search query `{0}`!", data), potentialReturnsArray);
            }
        }
Example #19
0
        public async Task GetGuildMemberList(CommandContext commandContext)
        {
            DiscordGuild guild = commandContext.Member.Guild;

            System.Collections.Generic.IReadOnlyCollection <DiscordMember> readOnlyCollections = await guild.GetAllMembersAsync();

            await commandContext.Channel.SendMessageAsync("Guild " + guild.Name + " members count " + readOnlyCollections.Count.ToString());

            string memberList = string.Empty;

            foreach (DiscordMember member in readOnlyCollections)
            {
                memberList += member.DisplayName + ",";
            }
            await commandContext.Channel.SendMessageAsync(memberList.TrimEnd(','));
        }
Example #20
0
        public static async Task UpdatePlayerRanking(DiscordGuild e)
        {
            var ocs = RPClass.Users.Where(x => x.UserData.Xp > 0);

            if (!ocs.Any())
            {
                return;
            }
            var members = await e.GetAllMembersAsync();

            DiscordChannel RankingChannel = RPClass.StatsChannel;

            int longestName = ocs.Max(x => members.First(y => y.Id == x.UserData.UserID).DisplayName.Length) + 1;

            if (longestName < 5)
            {
                longestName = 5;
            }
            int longestCount = 4;
            int longestGuild = RPClass.Guilds.Select(x => x.Name.Length).DefaultIfEmpty(7).Max() + 1;

            if (longestGuild < 8)
            {
                longestGuild = 8;
            }

            string Count   = "Pos".PadRight(longestCount) + "| ";
            string Name    = "Name".PadRight(longestName) + "| ";
            string Faction = "Faction".PadRight(longestGuild) + "| ";
            string Rank    = "Rank";
            string value   = "";

            value += $"```{Count}{Name}{Faction}{Rank}\n{new string('-', $"{Count}{Name}{Faction}{Rank}".Length + 4)}\n";
            List <UserObject.RootObject> SortedUsers = new List <UserObject.RootObject>();

            SortedUsers = ocs.OrderByDescending(x => (x.UserData.Xp)).ToList();
            try
            {
                await RankingChannel.DeleteMessagesAsync(await RankingChannel.GetMessagesAsync(100));
            }
            catch { }
            int countNum = 1;

            foreach (UserObject.RootObject user in SortedUsers)
            {
                string UserRank = user.UserData.GetRank();

                string UserFaction = "";
                if (user.UserData.FactionID == 0)
                {
                    UserFaction += "N/A";
                }
                else
                {
                    UserFaction += RPClass.Guilds.First(x => x.Id == user.UserData.FactionID).Name;
                }

                if (value.Length > 1500)
                {
                    await RankingChannel.SendMessageAsync(value + "```");

                    value = "```";
                }
                value    += (countNum.ToString().PadRight(longestCount) + "| " + members.First(y => y.Id == user.UserData.UserID).DisplayName.PadRight(longestName) + "| " + UserFaction.PadRight(longestGuild) + "| " + UserRank + "\n");
                countNum += 1;
            }
            await RankingChannel.SendMessageAsync(value + "```");
        }
Example #21
0
        public static async Task AddOrUpdateUsers(DiscordGuild guild, bool update)
        {
            List <DiscordMember> AllUsers = new List <DiscordMember>(await guild.GetAllMembersAsync());

            AllUsers.RemoveAll(x => x.IsBot);
            List <DiscordChannel> Channels = new List <DiscordChannel>(await guild.GetChannelsAsync());

            foreach (DiscordMember user in AllUsers)
            {
                int role = 0;

                /*312980663638818817 = Pro Hero
                 * 312981984790052866 = Sidekick
                 * 312980292086530048 = Academy Student
                 * 312982325908471808 = Villain
                 * 317915877775245312 = Rogue
                 *
                 */
                if (user.Roles.Any(x => x.Id == 312980663638818817))
                {
                    role = 1;
                }
                else if (user.Roles.Any(x => x.Id == 312982325908471808))
                {
                    role = 2;
                }
                else if (user.Roles.Any(x => x.Id == 317915877775245312))
                {
                    role = 3;
                }
                else if (user.Roles.Any(x => x.Id == 312981984790052866 || x.Id == 312980292086530048))
                {
                    role = 4;
                }
                if (!Users.Any(x => x.UserData.UserID == user.Id))
                {
                    Users.Add(new UserObject.RootObject(new UserObject.UserData(user.Id, user.DisplayName, role), new UserObject.InvData()));
                }
                if (Users.Find(x => x.UserData.UserID == user.Id).UserData.Username != user.DisplayName)
                {
                    Users.Find(x => x.UserData.UserID == user.Id).UserData.Username = user.DisplayName;
                }
                if (Users.Find(x => x.UserData.UserID == user.Id).UserData.Role != role)
                {
                    Users.Find(x => x.UserData.UserID == user.Id).UserData.Role = role;
                }
            }
            if (update)
            {
                await XPClass.UpdateStats(StatsChannel);

                await XPClass.UpdateGuildRanking(guild);

                await XPClass.UpdatePlayerRanking(guild, 1);

                await XPClass.UpdatePlayerRanking(guild, 2);

                await XPClass.UpdatePlayerRanking(guild, 3);

                await XPClass.UpdatePlayerRanking(guild, 4);
            }
            SaveData(-1);
        }
Example #22
0
 public async Task AssignMassRoleToGuildMembersAsync(DiscordGuild guild, DiscordRole guildRole)
 => await Task.WhenAll((await guild.GetAllMembersAsync()).Select(member => member.GrantRoleAsync(guildRole)));
Example #23
0
        public async Task CreateGuild(CommandContext e)
        {
            try
            {
                if (Global.InGame)
                {
                    var embed = new DiscordEmbedBuilder
                    {
                        Color = Color.InfoColor,
                        Title = Texts.Errors.AnotherGameIsPlaying
                    };
                    await e.Channel.SendMessageAsync(embed : embed.Build());
                }
                else
                {
                    try
                    {
                        Global.Client = e.Client;


                        var msgs = (await e.Guild.GetDefaultChannel().GetMessagesAsync(10)).ToList()
                                   .FindAll(m => m.Author == e.Client.CurrentUser || m.Content.Contains("!go"));
                        if (msgs.Count > 0)
                        {
                            await e.Guild.GetDefaultChannel().DeleteMessagesAsync(msgs);
                        }
                    }
                    catch (Exception exception)
                    {
                        Console.WriteLine(exception);
                    }

                    Console.WriteLine(File.ReadAllText(@"..//Locale/fr/lang.json", Encoding.UTF8));
                    while (Guild == null)
                    {
                        try
                        {
                            Guild   = e.Client.CreateGuildAsync("Loup Garou").GetAwaiter().GetResult();
                            GuildId = Guild.Id;
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex);
                        }
                    }

                    await Guild.ModifyAsync(x => x.SystemChannel = new Optional <DiscordChannel>(null));

                    await Guild.ModifyAsync(opt =>
                                            opt.DefaultMessageNotifications = DefaultMessageNotifications.MentionsOnly);

                    Global.InGame = true;

                    WriteDebug("1");


                    await GameBuilder.CreateDiscordRoles(); // Role Admin, Joueur, Spectateur

                    WriteDebug("2");
                    await Global.Client.CurrentUser.GetMember().GrantRoleAsync(Global.Roles[PublicRole.Admin]);

                    WriteDebug("3");
                    await(await Guild.GetAllMembersAsync()).First()
                    .ModifyAsync(m => m.Nickname = Texts.DiscordRoles.BotName);
                    WriteDebug("4");
                    Console.WriteLine("Guild Created");
                    DiscordChannels = new Dictionary <GameChannel, DiscordChannel>();

                    await e.TriggerTypingAsync();

                    var generalChannel = Guild.GetDefaultChannel();
                    await generalChannel.ModifyAsync(x => x.Name = "Bot");

                    DiscordChannels.Add(GameChannel.BotText, generalChannel);

                    var botVChannel = await Guild.CreateChannelAsync("Bot", ChannelType.Voice, generalChannel.Parent);

                    DiscordChannels.Add(GameChannel.BotVoice, botVChannel);
                    Global.Client.GuildMemberAdded += NewGuildMember;
                    Global.Client.GuildMemberAdded += StartMember;


                    var inv = await generalChannel.CreateInviteAsync();

                    var msgInv = await e.RespondAsync(inv.ToString());

                    var embed = new DiscordEmbedBuilder
                    {
                        Title = Texts.Annoucement.BotWantPlay,
                        Color = Color.PollColor
                    };
                    await generalChannel.SendMessageAsync(embed : embed.Build());

                    var players = new List <DiscordMember>();


                    await Task.Delay(Global.Config.JoinTime);

                    foreach (var usr in botVChannel.Users)
                    {
                        await usr.RevokeRoleAsync(Global.Roles[PublicRole.Spectator]);

                        await usr.GrantRoleAsync(Global.Roles[PublicRole.Player]);

                        players.Add(usr);
                        WriteDebug(usr.Username);
                    }

                    Global.Client.GuildMemberAdded     -= StartMember;
                    Global.Client.MessageReactionAdded += Listeners.PreventMultiVote;
                    Global.Client.MessageReactionAdded += Listeners.PreventSpectatorFromVote;


                    Console.WriteLine(13);
                    try
                    {
                        GameBuilder.Debug(this);
                        var channelsToRemove = new List <DiscordChannel>();
                        while (Guild.Channels.Count != DiscordChannels.Count)
                        {
                            foreach (var c in Guild.Channels)
                            {
                                try
                                {
                                    if (!DiscordChannels.ContainsValue(c))
                                    {
                                        channelsToRemove.Add(c);
                                    }
                                }
                                catch (NotFoundException exception)
                                {
                                    Console.WriteLine(exception.JsonMessage);
                                }
                            }

                            foreach (var dm in channelsToRemove)
                            {
                                await dm.DeleteAsync();
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex);
                    }


                    Console.WriteLine("Supr fini");

                    await RoleAssignment(msgInv, e, players);

                    foreach (var p in PersonnagesList)
                    {
                        WriteDebug($"Y : {p.Me.Username}");

                        var usr = GameBuilder.GetMember(Guild, p.Me);

                        await DiscordChannels[GameChannel.BotVoice].AddOverwriteAsync(usr, Permissions.None,
                                                                                      GameBuilder.CreatePerms(Permissions.AccessChannels, Permissions.UseVoice));
                    }


                    if (PersonnagesList.Count < 2)
                    {
                        Victory = Victory.NotPlayable;
                        embed   = new DiscordEmbedBuilder
                        {
                            Title = $"{Texts.Errors.NotEnoughPlayer} {PersonnagesList.Count}",
                            Color = Color.InfoColor
                        };
                        await DiscordChannels[GameChannel.TownText].SendMessageAsync(embed: embed.Build());
                        await Task.Delay(Global.Config.JoinTime);

                        await Global.Game.Guild.DeleteAsync();
                    }
                    else
                    {
                        e.Client.VoiceStateUpdated += Listeners.KillLeaver;
                    }

                    while (Victory == Victory.None && Victory != Victory.NotPlayable)
                    {
                        await PlayAsync();
                    }
                }
            }
            catch (Exception e4)
            {
                Console.WriteLine(e4);
            }
        }
Example #24
0
 public async Task RemoveMassRoleOnGuildMembersAsync(DiscordGuild guild, DiscordRole guildRole)
 => await Task.WhenAll((await guild.GetAllMembersAsync()).Select(member => member.RevokeRoleAsync(guildRole)));
Example #25
0
        public async Task <int> UpdatePatrons()
        {
            List <string> patrons              = new List <string>();
            List <string> patronizer           = new List <string>();
            List <string> patronized           = new List <string>();
            Dictionary <string, string> emojis = new Dictionary <string, string>();
            // collect ids of patron members
            DiscordGuild typotestground = await Program.Client.GetGuildAsync(779435254225698827);

            foreach (DiscordMember member in await typotestground.GetAllMembersAsync())
            {
                if (member.Roles.Any(role => role.Id == 832744566905241610))
                {
                    patrons.Add(member.Id.ToString());
                }
                if (member.Roles.Any(role => role.Id == 859100010184572938))
                {
                    patronizer.Add(member.Id.ToString());
                }
            }
            ;
            PatronCount = patrons.Count();
            PalantirDbContext db = new PalantirDbContext();
            // iterate through palantir members and set flags
            await db.Members.ForEachAsync(member =>
            {
                PermissionFlag flag = new PermissionFlag((byte)member.Flag);
                flag.Patron         = patrons.Any(patron => member.Member.Contains(patron));
                if (patronizer.Any(id => member.Member.Contains(id)))
                {
                    flag.Patronizer = true;
                    if (member.Patronize is not null)
                    {
                        patronized.Add(member.Patronize.Split("#")[0]);
                    }
                }
                else
                {
                    flag.Patronizer = false;
                }
                string emoji = String.IsNullOrEmpty(member.Emoji) ? "" : member.Emoji;
                if (flag.Patron || flag.BotAdmin)
                {
                    emojis.Add(member.Login, emoji);
                }
                member.Flag = flag.CalculateFlag();
            });

            // set flags of patronized members
            patronized.ForEach(id =>
            {
                if (db.Members.Any(member => member.Member.Contains(id)))
                {
                    MemberEntity member = db.Members.FirstOrDefault(member => member.Member.Contains(id));
                    PermissionFlag flag = new PermissionFlag((byte)member.Flag);
                    flag.Patron         = true;
                    string emoji        = String.IsNullOrEmpty(member.Emoji) ? "" : member.Emoji;
                    emojis.Add(member.Login, emoji);
                    member.Flag = flag.CalculateFlag();
                }
            });

            db.SaveChanges();
            db.Dispose();
            PatronEmojis = emojis;
            return(patrons.Count);
        }
Example #26
0
 public async Task <IEnumerable <Moderator> > GetModeratorsAsync(DiscordGuild guild) =>
 (await guild.GetAllMembersAsync())
 .Where(member => member.HasPermission(Permissions.KickMembers) && !member.IsBot)
 .Select(mod => new Moderator(mod.Id));
Example #27
0
 public async Task <IEnumerable <Administrator> > GetAdministratorsAsync(DiscordGuild guild) =>
 (await guild.GetAllMembersAsync())
 .Where(member => member.HasPermission(Permissions.Administrator) && !member.IsBot)
 .Select(admin => new Administrator(admin.Id));
Example #28
0
    public async Task Populations(CommandContext ctx)
    {
        if (districts is null)
        {
            sv = await ctx.Client.GetGuildAsync(798307000206360588);

            districts = new()
            {
                sv.GetRole(840302532165500959), //Voopmont
                sv.GetRole(840303040572424252), //Katonia
                sv.GetRole(840303004347531285), //New Avalon
                sv.GetRole(840303014362742784), //Landing Cove
                sv.GetRole(840303153564090388), //Los Vooperis
                sv.GetRole(840303011271671828), //Lanatia
                sv.GetRole(840303023925755944), //Kōgi
                sv.GetRole(840303033635962921), //Ardenti Terra
                sv.GetRole(840303017391423508), //New Spudland
                sv.GetRole(840303030443966524), //New Vooperis
                sv.GetRole(840303007886475265), //San Vooperisco
                sv.GetRole(840303044037836870), //Old King Peninsula
                sv.GetRole(840303026979864617), //Avalon
                sv.GetRole(840303020855918602), //Novastella
                sv.GetRole(840303037162455090), //Thesonica
            };
        }

        var members = await sv.GetAllMembersAsync();

        IOrderedEnumerable <(string Name, int Count)> fields =
            districts.Select(role => (role.Name, members.Where(X => X.Roles.Contains(role)).Count()))
            .OrderByDescending(x => x.Item2);

        DiscordEmbedBuilder embed = new()
        {
            Title = $"Discord District Populations ({(int)fields.Average(x => x.Count)} Average)",
            Color = new DiscordColor("2CC26C")
        };

        var array  = fields.Select(x => (double)x.Count).ToArray();
        var median = fields.ElementAt(7).Count;
        var lower  = Percentile(array, 75);
        var upper  = Percentile(array, 25);

        embed.Footer = new DiscordEmbedBuilder.EmbedFooter()
        {
            Text = $"Lower Quartile: {lower}\nUpper Quartile: {upper}"
        };

        int i     = 0;
        int realI = 0;
        int count = 0;

        foreach (var(Name, Count) in fields)
        {
            realI++;
            if (count != Count)
            {
                i = realI;
            }
            count = Count;

            embed.AddField($"{i}. {Name}" + (median == Count ? " (Median)" : ""), Count.ToString());
        }

        await ctx.RespondAsync(embed);
    }