Example #1
0
        public static void ForceDeleteChild(DiscordSocketClient client, TicketChild child)
        {
            var ticket = GetTicket(child.ParentGuildId, child.ParentTicketId);

            if (ticket.ActiveChildChannels.ContainsKey(child.Id))
            {
                ticket.ActiveChildChannels.Remove(child.Id);
            }
        }
Example #2
0
        public static TicketChild CreateNewChild(DiscordSocketClient client, SocketGuildUser user, Ticket ticket)
        {
            ticket.TicketsCreatedNumber++;
            var         ChildId = PopId(ticket);
            TicketChild child   = new TicketChild(ChildId, ticket.Id, ticket.ParentGuildId, user.Id, ticket.TicketsCreatedNumber);

            ticket.ActiveChildChannels.Add(ChildId, child);
            GetOrCreateGuildChannel(client, ticket, user, child);
            return(child);
        }
Example #3
0
        public static bool RemoveChild(DiscordSocketClient client, Ticket ticket, TicketChild Child)
        {
            DeleteChild(client, Child, false);

            var ChildId = Child.Id;

            if (!ticket.ActiveChildChannels.ContainsKey(ChildId))
            {
                return(false);
            }


            ticket.ActiveChildChannels.Remove(ChildId);
            return(true);
        }
Example #4
0
        public static Embed GetLockEmbed(TicketChild child, string Mention)
        {
            EmbedBuilder builder;
            var          guild  = GetGuild(child.ParentGuildId);
            var          ticket = GetTicket(child.ParentGuildId, child.ParentTicketId);

            switch (guild.Lang)
            {
            case LangEnum.Frensh:
                builder = new EmbedBuilder()
                {
                    Author = new EmbedAuthorBuilder()
                    {
                        Name = $"Ticket Tool ~ {ticket.Name}", IconUrl = @"https://cdn.discordapp.com/avatars/557628352828014614/04cdd55608f6f9942c9ab3bbcab3932c.png?size=512", Url = @"https://github.com/Saadbg/TicketBot"
                    },
                    Description = $"Merci d'avoir créé un ticket {Mention}. \n"
                                  + "Notre staff va vous répondre au plus bref délai. \n"
                                  + "Pour fermer ce ticket, réagissez avec cette emoji: 🔒",
                    Timestamp = DateTime.Now,
                    Footer    = new EmbedFooterBuilder()
                    {
                        Text = $"{guild.Name} Support", IconUrl = guild.IconUrl
                    }
                };
                return(builder.Build());

            default:
                builder = new EmbedBuilder()
                {
                    Author = new EmbedAuthorBuilder()
                    {
                        Name = $"Ticket Tool ~ {ticket.Name}", IconUrl = @"https://cdn.discordapp.com/avatars/557628352828014614/04cdd55608f6f9942c9ab3bbcab3932c.png?size=512", Url = @"https://github.com/Saadbg/TicketBot"
                    },
                    Description = $"Thanks for creating a ticket {Mention}. \n"
                                  + "Our staff will reply you as soon as possible. \n"
                                  + "To close the ticket, react with this emoji: 🔒",
                    Timestamp = DateTime.Now,
                    Footer    = new EmbedFooterBuilder()
                    {
                        Text = $"{guild.Name} Support", IconUrl = guild.IconUrl
                    }
                };
                return(builder.Build());
            }
        }
Example #5
0
        public void HandleChildReaction(TicketChild child, SocketReaction reaction, Discord.Rest.RestUserMessage message)
        {
            var user = reaction.User.Value as SocketGuildUser;

            if (child.State == TicketState.Locked && reaction.UserId == child.UserId)
            {
                if (!user.GuildPermissions.Administrator && !user.Roles.Any(g => TicketManager.GetGuild(child.ParentGuildId).PermittedRoles.Contains(g.Id)))
                {
                    message.RemoveReactionAsync(reaction.Emote, reaction.User.Value);
                    return;
                }
            }

            if (message.Id == child.MainMessageId)
            {
                switch (child.State)
                {
                case TicketState.Open:
                    TicketManager.ChangeChildState(TicketState.Locked, DiscordClient, user, child);
                    break;

                case TicketState.Locked:
                    TicketManager.ChangeChildState(TicketState.Open, DiscordClient, user, child);
                    break;
                }
            }

            else
            {
                switch (reaction.Emote.Name)
                {
                case "⛔":
                    TicketManager.DeleteChild(DiscordClient, child);
                    break;

                case "📑":
                    TicketManager.DeleteChildWithTranscript(DiscordClient, child);
                    break;

                case "🔓":
                    TicketManager.ChangeChildState(TicketState.Open, DiscordClient, user, child);
                    break;
                }
            }
        }
Example #6
0
        public static SocketTextChannel GetChannel(DiscordSocketClient client, TicketChild child)
        {
            var guild = client.GetGuild(child.ParentGuildId);

            if (guild == null)
            {
                return(null);
            }

            var channel = guild.GetTextChannel(child.ChannelId);

            if (channel != null)
            {
                return(channel);
            }

            return(null);
        }
Example #7
0
        public static int[] Read(TicketChild childID, TicketModel ticket)
        {
            string query = String.Empty;

            switch (childID)
            {
            case TicketChild.Contacts:
                query = $"SELECT Users.userid FROM Users WITH (NOLOCK)" +
                        $"JOIN UserTickets WITH (NOLOCK) on UserTickets.userid = Users.UserID" +
                        $" WHERE UserTickets.TicketID = {ticket.TicketID} AND (Users.MarkDeleted = 0)";
                break;

            case TicketChild.Customers:
                query = $"Select Organizationid From OrganizationTickets WITH (NOLOCK) WHERE TicketId = {ticket.TicketID}";
                break;

            case TicketChild.Subscriptions:
                query = $"SELECT Subscriptions.userid FROM Subscriptions WITH (NOLOCK) " +
                        $"JOIN Users WITH (NOLOCK) on users.userid = Subscriptions.userid " +
                        $"WHERE Reftype = 17 and Refid = {ticket.TicketID} and MarkDeleted = 0";
                break;

            case TicketChild.TicketReminders:
                query = $"SELECT ReminderID FROM Reminders WITH (NOLOCK) WHERE RefID = {ticket.TicketID} AND Reftype = 17";
                break;

            case TicketChild.TaskAssociations:
                query = $"SELECT TaskID FROM TaskAssociations WITH (NOLOCK) WHERE Refid={ticket.TicketID} and RefType = 17";
                break;

            case TicketChild.Asset:
                query = $"SELECT AssetID From AssetTickets WITH (NOLOCK) WHERE TicketID = {ticket.TicketID}";
                break;

            case TicketChild.Children:
                query = $"SELECT TicketID FROM Tickets WITH(NOLOCK) WHERE ParentID={ticket.TicketID}";
                break;

            case TicketChild.TicketTagLinks:
                query = $"SELECT TagLinkID FROM TagLinks WITH(NOLOCK) WHERE Reftype=17 and RefID = {ticket.TicketID}";
                break;
            }
            return(ticket.ExecuteQuery <int>(query).ToArray());
        }
Example #8
0
        public static Embed GetLockMessageEmbed(TicketChild child)
        {
            EmbedBuilder builder;
            var          guild = GetGuild(child.ParentGuildId);

            switch (guild.Lang)
            {
            case LangEnum.Frensh:
                builder = new EmbedBuilder()
                {
                    Author = new EmbedAuthorBuilder()
                    {
                        Name = $"Ticket Tool ~ Mod tools", IconUrl = @"https://cdn.discordapp.com/avatars/557628352828014614/04cdd55608f6f9942c9ab3bbcab3932c.png?size=512", Url = @"https://github.com/Saadbg/TicketBot"
                    },
                    Description = "🔓 Réouvrir le ticket. \n"
                                  + "📑 Sauvegarder le transcript et supprimer le ticket. \n"
                                  + "⛔ Supprimer le ticket.",
                    Timestamp = DateTime.Now,
                    Footer    = new EmbedFooterBuilder()
                    {
                        Text = $"{guild.Name} Support", IconUrl = guild.IconUrl
                    }
                };
                return(builder.Build());

            default:
                builder = new EmbedBuilder()
                {
                    Author = new EmbedAuthorBuilder()
                    {
                        Name = $"Ticket Tool ~ Mod tools", IconUrl = @"https://cdn.discordapp.com/avatars/557628352828014614/04cdd55608f6f9942c9ab3bbcab3932c.png?size=512", Url = @"https://github.com/Saadbg/TicketBot"
                    },
                    Description = "🔓 Unlock the ticket. \n"
                                  + "📑 Save the transcript and delete the ticket. \n"
                                  + "⛔ Delete the ticket.",
                    Timestamp = DateTime.Now,
                    Footer    = new EmbedFooterBuilder()
                    {
                        Text = $"{guild.Name} Support", IconUrl = guild.IconUrl
                    }
                };
                return(builder.Build());
            }
        }
Example #9
0
        public static void ChildReOpen(DiscordSocketClient client, TicketChild child)
        {
            GetOrCreateLockMessage(client, null, child).DeleteAsync();
            child.LockMessageId = 666;
            var message = GetOrCreateMainMessage(client, child);

            var guild = client.GetGuild(child.ParentGuildId);

            if (guild == null)
            {
                return;
            }

            message.RemoveAllReactionsAsync();
            message.AddReactionAsync(UnlockEmoji);
            var user = guild.GetUser(child.UserId);

            (message.Channel as SocketTextChannel).AddPermissionOverwriteAsync(user, AllowPerms);
        }
Example #10
0
        public static void DeleteChild(DiscordSocketClient client, TicketChild child, bool Intern = true)
        {
            var ticket = GetTicket(child.ParentGuildId, child.ParentTicketId);

            if (ticket.ActiveChildChannels.ContainsKey(child.Id) && Intern)
            {
                ticket.ActiveChildChannels.Remove(child.Id);
            }

            var channel = GetChannel(client, child);

            if (channel == null)
            {
                return;
            }

            SendClosedMessage(client, channel, child);
            Task.Factory.StartNewDelayed(7000, () => ScheduledChildDelete(channel));
        }
Example #11
0
        public static void DeleteChildWithTranscript(DiscordSocketClient client, TicketChild child)
        {
            var ticket = GetTicket(child.ParentGuildId, child.ParentTicketId);

            if (ticket.ActiveChildChannels.ContainsKey(child.Id))
            {
                ticket.ActiveChildChannels.Remove(child.Id);
            }

            var channel = GetChannel(client, child);

            if (channel == null)
            {
                return;
            }

            // var g = channel.GetMessagesAsync(100);


            SendTranscriptMessage(client, channel, child);
            SendClosedMessage(client, channel, child);
            Task.Factory.StartNewDelayed(5000, () => ScheduledChildDelete(channel));
        }
Example #12
0
        public static SocketTextChannel GetOrCreateGuildChannel(DiscordSocketClient client, Ticket ticket, SocketGuildUser user, TicketChild child)
        {
            var guild = client.GetGuild(ticket.ParentGuildId);

            if (guild == null)
            {
                return(null);
            }

            var channel = guild.GetTextChannel(child.ChannelId);

            if (channel != null)
            {
                return(channel);
            }

            var category = GetOrCreateCategoryChannel(client, ticket);

            if (category == null)
            {
                return(null);
            }

            var creation = guild.CreateTextChannelAsync(
                GetChildName(ticket.Name, child.TicketNumber),
                (param => {
                param.CategoryId = ticket.CategoryId;
                param.Topic = child.State.ToString();
                param.IsNsfw = false;
                param.Name = GetChildName(ticket.Name, child.TicketNumber);
            }
                ));

            creation.Wait();
            child.ChannelId = creation.Result.Id;

            creation.Result.AddPermissionOverwriteAsync(guild.EveryoneRole, ForbidPerms);
            foreach (var PermittedId in GetGuild(child.ParentGuildId).PermittedRoles)
            {
                creation.Result.AddPermissionOverwriteAsync(guild.GetRole(PermittedId), AllowPerms);// RESTRICTED ADMINS
            }

            SendMainMessage(client, creation.Result, user, child);

            return(client.GetGuild(ticket.ParentGuildId).GetTextChannel(child.ChannelId));
        }
Example #13
0
        public static RestUserMessage GetOrCreateMainMessage(DiscordSocketClient client, TicketChild child)
        {
            var guild = client.GetGuild(child.ParentGuildId);

            if (guild == null)
            {
                return(null);
            }

            var channel = guild.GetTextChannel(child.ChannelId);

            if (channel == null)
            {
                return(null);
            }

            var Rmessage = channel.GetMessageAsync(child.MainMessageId);

            Rmessage.Wait();
            if ((Rmessage.Result as RestUserMessage) != null)
            {
                return(Rmessage.Result as RestUserMessage);
            }

            var user    = guild.GetUser(child.UserId);
            var message = channel.SendMessageAsync("", false, GetLockEmbed(child, user.Mention));

            message.Wait();

            message.Result.AddReactionAsync(LockEmoji);

            child.MainMessageId = message.Result.Id;
            return(message.Result);
        }
Example #14
0
        public static void ChildLock(DiscordSocketClient client, SocketGuildUser user, TicketChild child)
        {
            var message = GetOrCreateMainMessage(client, child);

            message.RemoveAllReactionsAsync();
            message.AddReactionAsync(UnlockEmoji);
            GetOrCreateLockMessage(client, user, child);
        }
Example #15
0
        public static void ChangeChildState(TicketState state, DiscordSocketClient client, SocketGuildUser user, TicketChild child)
        {
            child.State = state;
            switch (state)
            {
            case TicketState.Locked:
                ChildLock(client, user, child);
                break;

            case TicketState.Open:
                ChildReOpen(client, child);
                break;

            default:
                DeleteChild(client, child);
                break;
            }
        }
Example #16
0
        public static void SendMainMessage(DiscordSocketClient client, RestTextChannel channel, SocketUser user, TicketChild child)
        {
            var message = channel.SendMessageAsync("", false, GetLockEmbed(child, user.Mention));

            message.Wait();

            message.Result.AddReactionAsync(LockEmoji);

            child.MainMessageId = message.Result.Id;
        }
Example #17
0
        public static void SendClosedMessage(DiscordSocketClient client, SocketTextChannel channel, TicketChild child)
        {
            var guild   = GetGuild(child.ParentGuildId);
            var builder = new EmbedBuilder()
            {
                Color       = Color.DarkRed,
                Description = guild.Lang == LangEnum.Frensh ? $"Le ticket va se fermer dans 5 secondes..." : $"The ticket will be deleted in 5 seconds..."
            };

            channel.SendMessageAsync("", false, builder.Build());
        }
Example #18
0
        public static void SendTranscriptMessage(DiscordSocketClient client, SocketTextChannel channel, TicketChild child)
        {
            var guild   = GetGuild(child.ParentGuildId);
            var builder = new EmbedBuilder()
            {
                Color       = Color.Gold,
                Description = guild.Lang == LangEnum.Frensh ? $"Transcript enregistré." : $"Transcript saved."
            };

            channel.SendMessageAsync("", false, builder.Build());
        }
Example #19
0
        public static void SendLockedMessage(DiscordSocketClient client, SocketGuildUser user, SocketTextChannel channel, TicketChild child)
        {
            var guild   = GetGuild(child.ParentGuildId);
            var builder = new EmbedBuilder()
            {
                Color       = Color.LightOrange,
                Description = guild.Lang == LangEnum.Frensh ? $"Ticket verouillé par {user.Mention}" : $"Ticket locked by {user.Mention}"
            };

            channel.SendMessageAsync("", false, builder.Build());
        }
Example #20
0
        public static RestUserMessage GetOrCreateLockMessage(DiscordSocketClient client, SocketGuildUser m_user, TicketChild child)
        {
            var guild = client.GetGuild(child.ParentGuildId);

            if (guild == null)
            {
                return(null);
            }

            var channel = guild.GetTextChannel(child.ChannelId);

            if (channel == null)
            {
                return(null);
            }

            var Rmessage = channel.GetMessageAsync(child.LockMessageId);

            Rmessage.Wait();
            if ((Rmessage.Result as RestUserMessage) != null)
            {
                return(Rmessage.Result as RestUserMessage);
            }

            if (m_user != null)
            {
                SendLockedMessage(client, m_user, channel, child);
            }

            var message = channel.SendMessageAsync("", false, GetLockMessageEmbed(child));

            message.Wait();

            message.Result.AddReactionAsync(UnlockEmoji);
            message.Result.AddReactionAsync(TranscriptEmoji);
            message.Result.AddReactionAsync(DeleteEmoji);

            var user = guild.GetUser(child.UserId);

            channel.AddPermissionOverwriteAsync(user, SpectatePerms);



            child.LockMessageId = message.Result.Id;
            return(message.Result);
        }