Exemplo n.º 1
0
        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.");
        }
Exemplo n.º 2
0
        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);
            }
        }