public async Task Command(params SocketRole[] roles) { Server server = await DatabaseQueries.GetOrCreateServerAsync(Context.Guild.Id); List <AutoAssignedRole> aars = server.AutoAssignedRoles.ToList(); int limit = server.IsPremium ? 15 : 3; if (roles.Length > (limit - aars.Count)) { throw new KaguyaPremiumException("Adding more than the allotted number of auto-assigned roles.\n" + "For premium servers, this value is 15. For non-premium " + "servers, this value is 3."); } foreach (SocketRole role in roles) { try { var aar = new AutoAssignedRole { ServerId = server.ServerId, RoleId = role.Id, Server = server }; if (!aars.Contains(aar)) { await DatabaseQueries.InsertAsync(aar); await ConsoleLogger.LogAsync($"Server added auto-assigned role. " + $"[Guild {server.ServerId} | Role Id: {role.Id}", LogLvl.TRACE); } } catch (Exception e) { throw new KaguyaSupportException("An error occurred when trying to add your " + "auto-assigned role.\n\n" + $"Message: {e.Message}"); } } string plural = roles.Length > 0 ? "as roles" : "as a role"; await SendBasicSuccessEmbedAsync($"Successfully added `{roles.Humanize()}` {plural} that will " + $"automatically be assigned to users upon join."); }
public static async Task Trigger(SocketGuildUser u) { Server server = await DatabaseQueries.GetOrCreateServerAsync(u.Guild.Id); List <AutoAssignedRole> aars = server.AutoAssignedRoles.ToList(); SocketGuild guild = u.Guild; foreach (AutoAssignedRole r in aars) { try { SocketRole role = guild.GetRole(r.RoleId); await u.AddRoleAsync(role); } catch (HttpException) { await ConsoleLogger.LogAsync($"A Discord.Net.HttpException was thrown when trying to add a role " + $"to user {u.Id} in guild {guild.Id}. I will remove " + $"this auto assigned role from the database to " + $"prevent further errors.", LogLvl.ERROR); AutoAssignedRole roleToDelete = aars.First(x => x.RoleId == r.RoleId); await DatabaseQueries.DeleteAsync(roleToDelete); } catch (Exception e) { await ConsoleLogger.LogAsync($"A generic exception was thrown when trying to add a role " + $"to user {u.Id} in guild {guild.Id}" + $"\nMessage: {e.Message}" + $"\nStack Trace: {e.StackTrace}", LogLvl.ERROR); } await ConsoleLogger.LogAsync($"Added auto-assigned role {r.RoleId} to user {u.Id} in guild " + $"{guild.Id}.", LogLvl.TRACE); } }