コード例 #1
0
        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;
            
        }
コード例 #2
0
 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());
     }
 }
コード例 #3
0
 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);
         }
     }
 }
コード例 #4
0
            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);
                }
            }
コード例 #5
0
            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");
            }
コード例 #6
0
            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();
                }
            }
コード例 #7
0
            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");
                }
            }
コード例 #8
0
 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 { };
         }
     }
 }
コード例 #9
0
 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);
     }
 }
コード例 #10
0
        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);
            }
        }