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); } }
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); }
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); }
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()); } }
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; } } }
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); }
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()); }
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()); } }
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); }
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)); }
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)); }
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)); }
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); }
public static void ChildLock(DiscordSocketClient client, SocketGuildUser user, TicketChild child) { var message = GetOrCreateMainMessage(client, child); message.RemoveAllReactionsAsync(); message.AddReactionAsync(UnlockEmoji); GetOrCreateLockMessage(client, user, child); }
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; } }
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; }
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()); }
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()); }
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()); }
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); }