private async Task MainAsync() { instance = this; Console.WriteLine("Starting SupportBoi version " + GetVersion() + "..."); try { this.Reload(); // Block this task until the program is closed. await Task.Delay(-1); } catch (Exception e) { Console.WriteLine("Fatal error:"); Console.WriteLine(e); Console.ReadLine(); } }
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); } }
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); }