private async Task CheckTicketTyping(SocketUser arg1, ISocketMessageChannel arg2) { if(CurrentTickets.Any(x => x.DMChannelID == arg2.Id)) { var ticket = CurrentTickets.Find(x => x.DMChannelID == arg2.Id); var tchan = client.GetGuild(Global.SwissGuildId).GetTextChannel(ticket.TicketChannel); if (ticket.DMTyping.Typing) { ticket.DMTyping.TypingObject.Dispose(); ticket.DMTyping.Typing = false; } ticket.DMTyping.Typing = true; ticket.DMTyping.TypingObject = tchan.EnterTypingState(); } //else if(CurrentTickets.Any(x => x.TicketChannel == arg2.Id)) //{ // var ticket = CurrentTickets.Find(x => x.TicketChannel == arg2.Id); // var tchan = await client.GetDMChannelAsync(ticket.DMChannelID); // if (ticket.TicketTyping.Typing) // { // ticket.TicketTyping.TypingObject.Dispose(); // ticket.TicketTyping.Typing = false; // } // var tp = tchan.EnterTypingState(); // ticket.TicketTyping.Typing = true; // ticket.TicketTyping.TypingObject = tp; }
public async Task SnippetHandler(SocketMessage arg) { if (!CurrentTickets.Any(x => x.TicketChannel == arg.Channel.Id)) return; var ticket = CurrentTickets.Find(x => x.TicketChannel == arg.Channel.Id); if (!arg.Content.StartsWith('!') && !arg.Content.Contains(' ')) return; if (arg.Content == "!snippets") return; string snipname = arg.Content; if (Snippets.ContainsKey(snipname)) { var dmchan = await client.GetUser(ticket.UserID).GetOrCreateDMChannelAsync(); string snipval = Snippets[snipname]; await arg.DeleteAsync(); ticket.Transcript.AddMessage(snipval, arg.Author, arg.Id, arg.Timestamp); await dmchan.SendMessageAsync($"**[Staff] {arg.Author.ToString()}** - {snipval}"); await arg.Channel.SendMessageAsync($"**[Staff] {arg.Author.ToString()}** - {snipval}"); } else { //await arg.Channel.SendMessageAsync("", false, new EmbedBuilder() //{ // Title = "Invalid snippet!", // Description = $"Looks like the snippet \"{arg.Content}\" Doesn't exist! For a list of snippets, do `!snippets`", // Color = Color.Red //}.Build()); } }
public async Task Welcome() { if (!HasExecutePermission) return; if (CurrentTickets.Any(x => x.TicketChannel == Context.Channel.Id)) { var ticket = CurrentTickets.Find(x => x.TicketChannel == Context.Channel.Id); if(!ticket.Welcomed) { var dmchan = await Context.Client.GetUser(ticket.UserID).GetOrCreateDMChannelAsync(); var usr = Context.Message.Author as SocketGuildUser; await Context.Message.DeleteAsync(); ticket.Transcript.AddMessage("Hello! Swiss001 Support! How May I help you?", usr, Context.Message.Id, Context.Message.Timestamp); string msg = $"**[Staff] {(usr.Nickname == null ? usr.ToString() : usr.Nickname)}** - Hello! Swiss001 Support! How May I help you?"; await Context.Guild.GetTextChannel(ticket.TicketChannel).SendMessageAsync(msg); await dmchan.SendMessageAsync(msg); ticket.Welcomed = true; } else { var msg = await Context.Channel.SendMessageAsync("The user has been welcomed, are you sure you want to still want to send them another welcome message?"); await msg.AddReactionsAsync(new IEmote[] { new Emoji("✅"), new Emoji("❌") }); WelcomeMessages.Add(msg.Id); } } }
public async Task anonRespond(params string[] args) { if (!HasExecutePermission) { return; } if (CurrentTickets.Any(x => x.TicketChannel == Context.Channel.Id)) { var ticket = CurrentTickets.Find(x => x.TicketChannel == Context.Channel.Id); var dmchan = await Context.Client.GetUser(ticket.UserID).GetOrCreateDMChannelAsync(); await Context.Message.DeleteAsync(); string msg = $"**Staff** - {string.Join(" ", args)}"; if (Context.Message.Attachments.Count > 0) { foreach (var attc in Context.Message.Attachments) { msg += $"\n**Attachment** - {attc.Url}"; } } await dmchan.SendMessageAsync(msg); await Context.Channel.SendMessageAsync(msg); } }
public async Task Close() { Global.ConsoleLog("Has Permission: " + HasExecutePermission); if (!HasExecutePermission) return; if (CurrentTickets.Any(x => x.TicketChannel == Context.Channel.Id)) { var ticket = CurrentTickets.Find(x => x.TicketChannel == Context.Channel.Id); if (closingState.Keys.Any(x => x.Key == Context.Channel.Id)) { Global.ConsoleLog("No Closing state"); return; } var cmsg = await Context.Channel.SendMessageAsync("This thread will be closed in 5 seconds. If you wish to cancel this, please click the X mark."); await cmsg.AddReactionAsync(new Emoji("❌")); var t = new Timer() { AutoReset = false, Interval = 5000, Enabled = true }; t.Elapsed += async (object s, ElapsedEventArgs a) => { var chan = Context.Channel as SocketTextChannel; closingState.Remove(closingState.Keys.First(x => x.Key == chan.Id)); CurrentTickets.Remove(ticket); var ts = ticket.Transcript.CompileAndSave(); await Global.Client.GetGuild(Global.SwissGuildId).GetTextChannel(770875781823463424).SendMessageAsync("", false, new EmbedBuilder() { Title = "New ticket transcript", Description = $"New [transcript](https://api.swissdev.team/apprentice/v1/tickets/{ts.id}/{ts.timestamp}) from <@{ticket.UserID}>", Fields = new List<EmbedFieldBuilder>() { new EmbedFieldBuilder() { Name = "Notice", Value = "To view tickets you have to sign in with discord, The only information i recieve is Username, Profile, and User ID. I use this information to check if you are staff. Links will not allow non staff members to view tickets.\nYou can view all tickets [here](https://api.swissdev.team/apprentice/v1/tickets)" } }, Color = Color.Green }.WithCurrentTimestamp().Build()); await chan.DeleteAsync(new RequestOptions() { AuditLogReason = "Ticket Closed" }); var dmUser = Context.Client.GetUser(ticket.UserID); if(dmUser != null) { var dmchan = await dmUser.GetOrCreateDMChannelAsync(); if (dmchan != null) await dmchan.SendMessageAsync("Your ticket with the staff team is now closed. If you wish to open another ticket, please send a message."); } Global.SaveSupportTickets(); }; closingState.Add(new KeyValuePair<ulong, ulong>(Context.Channel.Id, cmsg.Id), t); } else Global.ConsoleLog("cant find chan for close"); }
public async Task Respond(params string[] args) { if (!HasExecutePermission) { return; } if (CurrentTickets.Any(x => x.TicketChannel == Context.Channel.Id)) { var ticket = CurrentTickets.Find(x => x.TicketChannel == Context.Channel.Id); var dmchan = await Context.Client.GetUser(ticket.UserID).GetOrCreateDMChannelAsync(); if (dmchan == null) { await Context.Channel.SendMessageAsync("", false, new EmbedBuilder() { Title = $"Looks like we cant slide into <@{ticket.UserID}> dm's", Description = "They either blocked us or have left the server :(" }.Build()); return; } var usr = Context.Guild.GetUser(Context.Message.Author.Id); string msg = $"**[Staff] {(usr.Nickname == null ? usr.ToString() : usr.Nickname)}** - {string.Join(" ", args)}"; if (Context.Message.Attachments.Count > 0) { foreach (var attc in Context.Message.Attachments) { var bt = new WebClient().DownloadData(new Uri(attc.ProxyUrl)); File.WriteAllBytes(Environment.CurrentDirectory + $"{Path.DirectorySeparatorChar}{attc.Filename}", bt); await dmchan.SendFileAsync(Environment.CurrentDirectory + $"{Path.DirectorySeparatorChar}{attc.Filename}", msg); await Context.Channel.SendFileAsync(Environment.CurrentDirectory + $"{Path.DirectorySeparatorChar}{attc.Filename}", msg); } } else { try { await dmchan.SendMessageAsync(msg); } catch (Exception e) { await Context.Channel.SendMessageAsync("", false, new EmbedBuilder() { Title = $"Looks like we cant slide into <@{ticket.UserID}> dm's", Description = "They either blocked us or have left the server :(" }.Build()); return; } await Context.Channel.SendMessageAsync(msg); } await Context.Message.DeleteAsync(); } }
public async Task Close() { Global.ConsoleLog("Has Permission: " + HasExecutePermission); if (!HasExecutePermission) { return; } if (CurrentTickets.Any(x => x.TicketChannel == Context.Channel.Id)) { var ticket = CurrentTickets.Find(x => x.TicketChannel == Context.Channel.Id); if (closingState.Keys.Any(x => x.Key == Context.Channel.Id)) { Global.ConsoleLog("No Closing state"); return; } var cmsg = await Context.Channel.SendMessageAsync("This thread will be closed in 5 seconds. If you wish to cancel this, please click the X mark."); await cmsg.AddReactionAsync(new Emoji("❌")); var t = new Timer() { AutoReset = false, Interval = 5000, Enabled = true }; t.Elapsed += async(object s, ElapsedEventArgs a) => { var chan = Context.Channel as SocketTextChannel; closingState.Remove(closingState.Keys.First(x => x.Key == chan.Id)); CurrentTickets.Remove(ticket); await chan.DeleteAsync(new RequestOptions() { AuditLogReason = "Ticket Closed" }); var dmchan = await Context.Client.GetUser(ticket.UserID).GetOrCreateDMChannelAsync(); if (dmchan != null) { await dmchan.SendMessageAsync("Your ticket with the staff team is now closed. If you wish to open another ticket, please send a message."); } Global.SaveSupportTickets(); }; closingState.Add(new KeyValuePair <ulong, ulong>(Context.Channel.Id, cmsg.Id), t); } else { Global.ConsoleLog("cant find chan for close"); } }
private async Task CheckSupportChannel(SocketChannel arg) { if(CurrentTickets.Any(x => x.TicketChannel == arg.Id)) { var ticket = CurrentTickets.Find(x => x.TicketChannel == arg.Id); var usr = client.GetGuild(Global.SwissGuildId).GetUser(ticket.UserID); CurrentTickets.Remove(ticket); if(usr != null) { try { await usr.SendMessageAsync("Your ticket with the staff team is now closed. If you wish to open another ticket, please send a message."); } catch { }; } } }
private async Task CheckNewThread(SocketMessage arg) { if (arg.Author.IsBot) return; if(arg.Channel.GetType() == typeof(SocketDMChannel)) { if (BlockedUsers.Any(x => x == arg.Author.Id)) { return; } if (CurrentTickets.Any(x => x.DMChannelID == arg.Channel.Id)) { var ticket = CurrentTickets.Find(x => x.DMChannelID == arg.Channel.Id); ticket.DMTyping.Typing = false; if (ticket.DMTyping.TypingObject != null) ticket.DMTyping.TypingObject.Dispose(); string msg = $"**[Ticketer] {arg.Author}** - {arg.Content.Replace("@everyone", "~~@ everyone~~").Replace("@here", "~~@ here~~")}"; var tkchan = client.GetGuild(Global.SwissGuildId).GetTextChannel(ticket.TicketChannel); await tkchan.SendMessageAsync(msg); ticket.Transcript.AddMessage(arg); if (arg.Attachments.Count > 0) { foreach (var attc in arg.Attachments) { var bt = new WebClient().DownloadData(new Uri(attc.ProxyUrl)); File.WriteAllBytes(Environment.CurrentDirectory + $"{Path.DirectorySeparatorChar}{attc.Filename}", bt); await tkchan.SendFileAsync(Environment.CurrentDirectory + $"{Path.DirectorySeparatorChar}{attc.Filename}", $"**[Ticketer]**"); } } } else if (!Setups.ContainsKey(arg.Author.Id)) { var msg = await arg.Channel.SendMessageAsync("Hello " + arg.Author.Mention + ", if you want to open a support ticket please click the checkmark, otherwise to delete this message click the X"); await msg.AddReactionsAsync(new IEmote[] { new Emoji("✅"), new Emoji("❌") }); Setups.Add(arg.Channel.Id, new KeyValuePair<ulong, string>(msg.Id, arg.Content)); } } else if(CurrentTickets.Any(x => x.TicketChannel == arg.Channel.Id)) { //check snippets await SnippetHandler(arg); } }
private async Task CheckNewThread(SocketMessage arg) { if (arg.Author.IsBot) { return; } if (arg.Author.Id == client.CurrentUser.Id) { return; } if (arg.Channel is SocketDMChannel channel) { if (BlockedUsers.Any(x => x == arg.Author.Id)) { return; } if (CurrentTickets.Any(x => x.DMChannelID == arg.Channel.Id)) { var ticket = CurrentTickets.Find(x => x.DMChannelID == arg.Channel.Id); ticket.DMTyping.Typing = false; if (ticket.DMTyping.TypingObject != null) { ticket.DMTyping.TypingObject.Dispose(); } var content = arg.Content.Replace("@everyone", "~~@ everyone~~").Replace("@here", "~~@ here~~"); List <(string old, string newS)> d = new List <(string old, string newS)>(); if (Regex.IsMatch(content, @"<@&(\d{17}|\d{18})>")) { var mtch = Regex.Matches(content, @"(<@&(\d{17}|\d{18})>)"); foreach (Match m in mtch) { var role = Global.SwissGuild.Roles.FirstOrDefault(x => x.Id == ulong.Parse(m.Groups[2].Value)); if (role != null) { d.Add((m.Value, $"~~@{role.Name}~~")); } } } foreach (var item in d) { content = content.Replace(item.old, item.newS); } string msg = $"**[Ticketer] {arg.Author}** - {content}"; var tkchan = client.GetGuild(Global.SwissGuildId).GetTextChannel(ticket.TicketChannel); await tkchan.SendMessageAsync(msg); ticket.Transcript.AddMessage(arg); if (arg.Attachments.Count > 0) { foreach (var attc in arg.Attachments) { var bt = new WebClient().DownloadData(new Uri(attc.ProxyUrl)); File.WriteAllBytes(Environment.CurrentDirectory + $"{Path.DirectorySeparatorChar}{attc.Filename}", bt); await tkchan.SendFileAsync(Environment.CurrentDirectory + $"{Path.DirectorySeparatorChar}{attc.Filename}", $"**[Ticketer]**"); } } } else { if (Regex.IsMatch(arg.Content, @"training (\d{17}|\d{18})$")) { if (!Program.UserHasPerm(arg.Author.Id)) { return; } var m = Regex.Match(arg.Content, @"training (\d{17}|\d{18})$"); var uid = m.Groups[1].Value; var tmpmsg = await channel.SendMessageAsync("**Creating training ticket with the staff team...**"); await CreateNewTicket(channel, arg.Author, arg.Content, true, uid); await tmpmsg.ModifyAsync(x => x.Embed = new EmbedBuilder() { Title = "Training started", Description = $"Training ticket with <@{uid}>", Color = Color.Green }.Build()); return; } else { var msg = await arg.Channel.SendMessageAsync("Hello " + arg.Author.Mention + ", if you want to open a support ticket please click the checkmark, otherwise to delete this message click the X"); await msg.AddReactionsAsync(new IEmote[] { new Emoji("✅"), new Emoji("❌") }); } } } else if (CurrentTickets.Any(x => x.TicketChannel == arg.Channel.Id)) { //check snippets await SnippetHandler(arg); } }