Esempio n. 1
0
        private async Task RemoveUserFromVoice(DiscordUser user, DiscordGuild guild)
        {
            var channel = await guild.CreateChannelAsync("tempVoiceChannel", ChannelType.Voice);

            var member = guild.Members.Where(x => x.Id == user.Id).First();
            await member.PlaceInAsync(channel);

            await channel.DeleteAsync();

            Program.Logger.Log($"Removing user {user.Id} : {user.Username} from voice channel.");
            userSubjectToDC.Remove(user.Id);
        }
Esempio n. 2
0
    private async Task SetupGuildDefaults(DiscordGuild guild)
    {
        if (Guild == null)
        {
            Guild = guild;
            try
            {
                InformationChannel = await guild.CreateChannelAsync("Information", ChannelType.Text);

                SpawnEnemiesChannel = await guild.CreateChannelAsync("SpawnEnemies", ChannelType.Text);

                IncomeFeedChannel = await guild.CreateChannelAsync("IncomeFeed", ChannelType.Text);

                CheckBalanceChannel = await guild.CreateChannelAsync("CheckBalance", ChannelType.Text);
            }
            catch { }
            var invite = await InformationChannel.CreateInviteAsync();

            Debug.Log($"{Log.Timestamp()} Join: https://discord.gg/{invite.Code}");
            PushNotification.Instance.Add($"Join: https://discord.gg/{invite.Code}", PushColor.Success);
        }
    }
Esempio n. 3
0
        public CrabgileMeeting(DiscordMember hostMember)
        {
            this.hostMember = hostMember;
            guild           = hostMember.Guild;
            channels        = new ConcurrentBag <DiscordChannel>();

            if (!GuildMeetings.ContainsKey(guild.Id))
            {
                GuildMeetings.TryAdd(guild.Id, new ConcurrentDictionary <ulong, CrabgileMeeting>());
            }
            registrySuccess = GuildMeetings[guild.Id].TryAdd(hostMember.Id, this);

            if (registrySuccess)
            {
                Task.Run(async() => {
                    meetingCategory = await guild.CreateChannelCategoryAsync($"::{hostMember.Id}::");
                    AddChannelToMeeting(meetingCategory);
                    meetingTextChannel = await guild.CreateChannelAsync("meeting-chat", DSharpPlus.ChannelType.Text, meetingCategory, "A minuted text channel for the timebox meeting.");
                    //AddChannelToMeeting(meetingTextChannel);
                    //Don't add the channel to the bag, as it shouldn't get destroyed.
                });
            }
        }
Esempio n. 4
0
        internal async Task OnReactionAdded(DiscordClient client, MessageReactionAddEventArgs e)
        {
            if (e.Message.Id != Config.reactionMessage)
            {
                return;
            }

            DiscordGuild  guild  = e.Message.Channel.Guild;
            DiscordMember member = await guild.GetMemberAsync(e.User.Id);

            if (!Config.HasPermission(member, "new") || Database.IsBlacklisted(member.Id))
            {
                return;
            }
            if (reactionTicketCooldowns.ContainsKey(member.Id))
            {
                if (reactionTicketCooldowns[member.Id] > DateTime.Now)
                {
                    return;                                                                    // cooldown has not expired
                }
                else
                {
                    reactionTicketCooldowns.Remove(member.Id);                  // cooldown exists but has expired, delete it
                }
            }


            DiscordChannel category      = guild.GetChannel(Config.ticketCategory);
            DiscordChannel ticketChannel = await guild.CreateChannelAsync("ticket", ChannelType.Text, category);

            if (ticketChannel == null)
            {
                return;
            }

            ulong staffID = 0;

            if (Config.randomAssignment)
            {
                staffID = Database.GetRandomActiveStaff(0)?.userID ?? 0;
            }

            long id = Database.NewTicket(member.Id, staffID, ticketChannel.Id);

            reactionTicketCooldowns.Add(member.Id, DateTime.Now.AddSeconds(10));             // add a cooldown which expires in 10 seconds
            string ticketID = id.ToString("00000");

            await ticketChannel.ModifyAsync(model => model.Name = "ticket-" + ticketID);

            await ticketChannel.AddOverwriteAsync(member, Permissions.AccessChannels, Permissions.None);

            await ticketChannel.SendMessageAsync("Hello, " + member.Mention + "!\n" + Config.welcomeMessage);

            // Remove user's reaction
            await e.Message.DeleteReactionAsync(e.Emoji, e.User);

            // Refreshes the channel as changes were made to it above
            ticketChannel = await SupportBoi.GetClient().GetChannelAsync(ticketChannel.Id);

            if (staffID != 0)
            {
                DiscordEmbed assignmentMessage = new DiscordEmbedBuilder
                {
                    Color       = DiscordColor.Green,
                    Description = "Ticket was randomly assigned to <@" + staffID + ">."
                };
                await ticketChannel.SendMessageAsync(assignmentMessage);

                if (Config.assignmentNotifications)
                {
                    DiscordEmbed message = new DiscordEmbedBuilder
                    {
                        Color       = DiscordColor.Green,
                        Description = "You have been randomly assigned to a newly opened support ticket: " +
                                      ticketChannel.Mention
                    };

                    try
                    {
                        DiscordMember staffMember = await guild.GetMemberAsync(staffID);

                        await staffMember.SendMessageAsync(message);
                    }
                    catch (NotFoundException)
                    {
                    }
                    catch (UnauthorizedException)
                    {
                    }
                }
            }

            // Log it if the log channel exists
            DiscordChannel logChannel = guild.GetChannel(Config.logChannel);

            if (logChannel != null)
            {
                DiscordEmbed logMessage = new DiscordEmbedBuilder
                {
                    Color       = DiscordColor.Green,
                    Description = "Ticket " + ticketChannel.Mention + " opened by " + member.Mention + ".\n",
                    Footer      = new DiscordEmbedBuilder.EmbedFooter {
                        Text = "Ticket " + ticketID
                    }
                };
                await logChannel.SendMessageAsync(logMessage);
            }
        }
Esempio n. 5
0
        internal async Task OnReactionAdded(MessageReactionAddEventArgs e)
        {
            if (e.Message.Id != Config.reactionMessage)
            {
                return;
            }

            DiscordGuild  guild  = e.Message.Channel.Guild;
            DiscordMember member = await guild.GetMemberAsync(e.User.Id);

            if (!Config.HasPermission(member, "new") || Database.IsBlacklisted(member.Id))
            {
                return;
            }

            DiscordChannel category      = guild.GetChannel(Config.ticketCategory);
            DiscordChannel ticketChannel = await guild.CreateChannelAsync("ticket", ChannelType.Text, category);

            if (ticketChannel == null)
            {
                return;
            }

            ulong staffID = 0;

            if (Config.randomAssignment)
            {
                staffID = Database.GetRandomActiveStaff(0)?.userID ?? 0;
            }

            long   id       = Database.NewTicket(member.Id, staffID, ticketChannel.Id);
            string ticketID = id.ToString("00000");
            await ticketChannel.ModifyAsync("ticket-" + ticketID);

            await ticketChannel.AddOverwriteAsync(member, Permissions.AccessChannels, Permissions.None);

            await ticketChannel.SendMessageAsync("Hello, " + member.Mention + "!\n" +
                                                 Config.welcomeMessage);

            // Refreshes the channel as changes were made to it above
            ticketChannel = await SupportBoi.GetClient().GetChannelAsync(ticketChannel.Id);

            if (staffID != 0)
            {
                DiscordEmbed assignmentMessage = new DiscordEmbedBuilder
                {
                    Color       = DiscordColor.Green,
                    Description = "Ticket was randomly assigned to <@" + staffID + ">."
                };
                await ticketChannel.SendMessageAsync("", false, assignmentMessage);

                if (Config.assignmentNotifications)
                {
                    DiscordEmbed message = new DiscordEmbedBuilder
                    {
                        Color       = DiscordColor.Green,
                        Description = "You have been randomly assigned to a newly opened support ticket: " +
                                      ticketChannel.Mention
                    };

                    try
                    {
                        DiscordMember staffMember = await guild.GetMemberAsync(staffID);

                        await staffMember.SendMessageAsync("", false, message);
                    }
                    catch (NotFoundException)
                    {
                    }
                    catch (UnauthorizedException)
                    {
                    }
                }
            }

            // Log it if the log channel exists
            DiscordChannel logChannel = guild.GetChannel(Config.logChannel);

            if (logChannel != null)
            {
                DiscordEmbed logMessage = new DiscordEmbedBuilder
                {
                    Color       = DiscordColor.Green,
                    Description = "Ticket " + ticketChannel.Mention + " opened by " + member.Mention + ".\n",
                    Footer      = new DiscordEmbedBuilder.EmbedFooter {
                        Text = "Ticket " + ticketID
                    }
                };
                await logChannel.SendMessageAsync("", false, logMessage);
            }

            // Adds the ticket to the google sheets document if enabled
            Sheets.AddTicketQueued(member, ticketChannel, id.ToString(), staffID.ToString(),
                                   Database.TryGetStaff(staffID, out Database.StaffMember staffMemberEntry)
                                        ? staffMemberEntry.userID.ToString()
                                        : null);
        }
Esempio n. 6
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);
            }
        }
Esempio n. 7
0
        public async Task RoleAssignment(DiscordMessage msgInv, CommandContext e, List <DiscordMember> players)
        {
            try
            {
                // Création de tous les channels sans Droit
                var chsPerso = await Global.Game.Guild
                               .CreateChannelAsync(Global.Game.Texts.Channels.PersoGroup, ChannelType.Category);

                Global.Game.DiscordChannels.Add(GameChannel.PersoGroup, chsPerso);

                var wolfGrpChannel =
                    await Global.Game.Guild.CreateChannelAsync(Global.Game.Texts.Channels.WolvesChannel,
                                                               ChannelType.Category);

                var townGrpChannel = await Global.Game.Guild
                                     .CreateChannelAsync(Global.Game.Texts.Channels.TownChannel, ChannelType.Category);


                var townTChannel =
                    await Guild.CreateChannelAsync(Texts.Channels.TownChannel, ChannelType.Text, townGrpChannel);

                var townVChannel =
                    await Guild.CreateChannelAsync(Texts.Channels.TownChannel, ChannelType.Voice, townGrpChannel);

                DiscordChannels.Add(GameChannel.TownText, townTChannel);
                DiscordChannels.Add(GameChannel.TownVoice, townVChannel);


                var wolfTChannel =
                    await Guild.CreateChannelAsync(Texts.Channels.WolvesChannel, ChannelType.Text, wolfGrpChannel);

                var wolfVChannel =
                    await Guild.CreateChannelAsync(Texts.Channels.WolvesChannel, ChannelType.Voice, wolfGrpChannel);

                DiscordChannels.Add(GameChannel.WolfText, wolfTChannel);
                DiscordChannels.Add(GameChannel.WolfVoice, wolfVChannel);

                var graveyardGrpChannel =
                    await Guild.CreateChannelAsync(Texts.Channels.GraveyardChannel, ChannelType.Category);

                var graveyardTChannel = await Guild.CreateChannelAsync(Texts.Channels.GraveyardChannel,
                                                                       ChannelType.Text, graveyardGrpChannel);

                var graveyardVChannel = await Guild.CreateChannelAsync(Texts.Channels.GraveyardChannel,
                                                                       ChannelType.Voice, graveyardGrpChannel);

                await graveyardTChannel.AddOverwriteAsync(Global.Roles[PublicRole.Spectator], GameBuilder.UsrPerms);

                DiscordChannels.Add(GameChannel.GraveyardText, graveyardTChannel);
                DiscordChannels.Add(GameChannel.GraveyardVoice, graveyardVChannel);

                foreach (var discordMember in Guild.Members)
                {
                    if (discordMember.Roles.Contains(Global.Roles[PublicRole.Spectator]))
                    {
                        await graveyardVChannel.AddOverwriteAsync(discordMember,
                                                                  GameBuilder.CreatePerms(Permissions.UseVoiceDetection, Permissions.UseVoice,
                                                                                          Permissions.Speak));
                    }
                }

                await GameBuilder.CreatePersonnages(players);

                await(await e.Channel.GetMessageAsync(msgInv.Id)).ModifyAsync((await townTChannel.CreateInviteAsync())
                                                                              .ToString());

                Global.Client.MessageReactionAdded   += GameBuilder.Spectator_ReactionAdd;
                Global.Client.MessageReactionRemoved += GameBuilder.Spectator_ReactionRem;
            }
            catch (SystemException ex)
            {
                Console.WriteLine(ex);
            }
        }
Esempio n. 8
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();
            }
        }