public virtual async Task AddUserCommand(CommandContext ctx, [RemainingText][Description("Your username")]
                                             string username)
    {
        this.Logger.LogInformation("Trying to add {ProviderUsername} {Member} to {Name} update provider", username, ctx.Member, UserService.Name);
        BaseUser user;

        try
        {
            user = await this.UserService.AddUserAsync(username, ctx.Member.Id, ctx.Member.Guild.Id).ConfigureAwait(false);
        }
        catch (Exception ex)
        {
            var embed = ex is UserProcessingException?EmbedTemplate.ErrorEmbed(ctx, ex.Message) : EmbedTemplate.UnknownErrorEmbed(ctx);

            await ctx.RespondAsync(embed : embed.Build()).ConfigureAwait(false);

            this.Logger.LogError(ex, "Failed to add {ProviderUsername} {Member} to {Name} update provider", username, ctx.Member, UserService.Name);
            throw;
        }

        this.Logger.LogInformation("Successfully added {ProviderUsername} {Member} to {Name} update provider", username, ctx.Member, UserService.Name);

        await ctx.RespondAsync(embed : EmbedTemplate.SuccessEmbed(ctx,
                                                                  $"Successfully added {user.Username} to {this.UserService.Name} update checker")).ConfigureAwait(false);
    }
Exemplo n.º 2
0
        public async Task ShowMemeAsync(SocketUser user = null)
        {
            List <Meme> Memes;
            Random      rn = new Random();
            User        localUser;

            switch (user)
            {
            case null:
                localUser = DatabaseHandler.GetFromDb(Context.User);
                Memes     = DatabaseHandler.ListAll(new Meme());
                break;

            default:
                localUser = DatabaseHandler.GetFromDb(user);
                Memes     = DatabaseHandler.ListAll(new Meme(), localUser);
                break;
            }

            if (Memes.Count > 0)
            {
                Meme         meme  = Memes[rn.Next(Memes.Count)];
                EmbedBuilder embed = EmbedTemplate.Create(Context.Client.CurrentUser, Context.User);
                embed.WithFooter($"Submitted by: {meme.User.Username}#{meme.User.Discriminator}", meme.User.AvatarUrl);
                embed.WithImageUrl(meme.Url);
                embed.WithTitle($"{meme.Id} - {meme.Url}");

                await ReplyAsync(Message.Info.Generic, false, embed.Build());
            }
            else
            {
                await ReplyAsync(Message.Error.NoContent(localUser));
            }
        }
Exemplo n.º 3
0
        public async Task ListMemesAsync(SocketUser user = null)
        {
            List <Meme> Memes;
            User        local;

            switch (user)
            {
            case null:
                Memes = DatabaseHandler.ListAll(new Meme());
                local = DatabaseHandler.GetFromDb(Context.User);
                break;

            default:
                local = DatabaseHandler.GetFromDb(user);
                Memes = DatabaseHandler.ListAll(new Meme(), local);
                break;
            }

            if (Memes.Count > 0)
            {
                EmbedBuilder embed = EmbedTemplate.Create(Context.Client.CurrentUser, Context.User);

                foreach (Meme meme in Memes)
                {
                    embed.AddField($"{meme.Id} - {meme.Url}", $"Submitted by {meme.User.Username} on {meme.CreatedAt}");
                }

                await ReplyAsync(Message.Info.Generic, false, embed.Build());
            }
            else
            {
                await ReplyAsync(Message.Error.NoContent(local));
            }
        }
    public virtual async Task ListUsersCommand(CommandContext ctx)
    {
        var sb = new StringBuilder();

        try
        {
            var i = 1;
            await foreach (var user in this.UserService.ListUsersAsync(ctx.Guild.Id))
            {
                if (sb.Length + user.Username.Length > 2048)
                {
                    if (sb.Length + "...".Length > 2048)
                    {
                        break;
                    }

                    sb.Append("...");
                    break;
                }

                sb.AppendLine(
                    $"{i++.ToString()}{user.Username} {(user.DiscordUser == null ? "" : Helpers.ToDiscordMention(user.DiscordUser.DiscordUserId))}");
            }
        }
        catch (Exception ex)
        {
            var embed = ex is UserProcessingException?EmbedTemplate.ErrorEmbed(ctx, ex.Message) : EmbedTemplate.UnknownErrorEmbed(ctx);

            await ctx.RespondAsync(embed : embed).ConfigureAwait(false);

            throw;
        }

        await ctx.RespondAsync(embed : EmbedTemplate.SuccessEmbed(ctx, "Users").WithDescription(sb.ToString())).ConfigureAwait(false);
    }
    public virtual async Task DisableFeatureCommand(CommandContext context, params T[] features)
    {
        if (!features.Any())
        {
            return;
        }
        this.Logger.LogInformation("Trying to disable {Features} feature for {Username}", features, context.Member.DisplayName);
        try
        {
            await this.UserFeaturesService.DisableFeaturesAsync(features, context.User.Id).ConfigureAwait(false);
        }
        catch (Exception ex)
        {
            var embed = ex is UserFeaturesException ufe
                                ? EmbedTemplate.ErrorEmbed(context, ufe.Message, $"Failed disabling {features.Humanize().ToLowerInvariant()}")
                                : EmbedTemplate.UnknownErrorEmbed(context);

            await context.RespondAsync(embed : embed.Build()).ConfigureAwait(false);

            this.Logger.LogError(ex, "Failed to disable {Features} for {Username}", features, context.Member.DisplayName);
            throw;
        }

        this.Logger.LogInformation("Successfully disabled {Features} feature for {Username}", features, context.Member.DisplayName);
        await context.RespondAsync(embed : EmbedTemplate.SuccessEmbed(context,
                                                                      $"Successfully disabled {features.Humanize()} for you")).ConfigureAwait(false);
    }
Exemplo n.º 6
0
        public async Task ShowJokeAsync(SocketUser user = null)
        {
            List <Joke> Jokes;
            Random      rn = new Random();
            User        localUser;

            switch (user)
            {
            case null:
                localUser = DatabaseHandler.GetFromDb(Context.User);
                Jokes     = DatabaseHandler.ListAll(new Joke());
                break;

            default:
                localUser = DatabaseHandler.GetFromDb(user);
                Jokes     = DatabaseHandler.ListAll(new Joke(), localUser);
                break;
            }

            if (Jokes.Count > 0)
            {
                Joke         joke  = Jokes[rn.Next(Jokes.Count)];
                EmbedBuilder embed = EmbedTemplate.Create(Context.Client.CurrentUser, Context.User);
                embed.WithTitle($"{joke.Id} - {joke.Text}");
                embed.WithFooter($"Submitted by: {joke.User.Username}#{joke.User.Discriminator}", joke.User.AvatarUrl);

                await ReplyAsync($"Here you go:", false, embed.Build());
            }
            else
            {
                await ReplyAsync(Message.Error.NoContent(localUser));
            }
        }
Exemplo n.º 7
0
    public async Task ForceCheckCommand(CommandContext context, [RemainingText, Description("Update provider name")]
                                        string name)
    {
        name = name.Trim();
        BaseUpdateProvider?baseUpdateProvider;

        if (this._providersConfigurationService.Providers.TryGetValue(name, out var provider) && provider is BaseUpdateProvider bup)
        {
            baseUpdateProvider = bup;
        }
        else
        {
            var upc = this._providersConfigurationService.Providers.Values.FirstOrDefault(p => p.Name.Where(char.IsUpper).ToString() == name);
            baseUpdateProvider = upc as BaseUpdateProvider;
        }

        if (baseUpdateProvider != null)
        {
            baseUpdateProvider.RestartTimer(TimeSpan.Zero);
            await context.RespondAsync(embed : EmbedTemplate.SuccessEmbed(context, "Success")).ConfigureAwait(false);
        }
        else
        {
            await context.RespondAsync(embed : EmbedTemplate.ErrorEmbed(context, "Haven't found such update provider")).ConfigureAwait(false);
        }
    }
Exemplo n.º 8
0
    public async Task UpdateChannelCommand(CommandContext ctx, [Description("New channel where updates should be posted")]
                                           DiscordChannel?channel = null)
    {
        if (channel == null)
        {
            channel = ctx.Channel;
        }
        try
        {
            var perms = channel.PermissionsFor(ctx.Guild.CurrentMember);
            if (!perms.HasPermission(Permissions.SendMessages))
            {
                throw new GuildManagementException(
                          $"Bot wouldn't be able to send updates to channel {channel} because it lacks permission to send messages");
            }
            await this._managementService.UpdateChannelAsync(channel.GuildId !.Value, channel.Id).ConfigureAwait(false);
        }
        catch (Exception ex)
        {
            var embed = ex is GuildManagementException?EmbedTemplate.ErrorEmbed(ctx, ex.Message) : EmbedTemplate.UnknownErrorEmbed(ctx);

            await ctx.RespondAsync(embed : embed).ConfigureAwait(false);

            throw;
        }

        await ctx.RespondAsync(embed : EmbedTemplate.SuccessEmbed(ctx, $"Successfully updated to {channel}")).ConfigureAwait(false);
    }
Exemplo n.º 9
0
        public async Task ListJokesAsync(SocketUser user = null)
        {
            List <Joke> Jokes;
            User        localUser;

            switch (user)
            {
            case null:
                Jokes     = DatabaseHandler.ListAll(new Joke());
                localUser = DatabaseHandler.GetFromDb(Context.User);
                break;

            default:
                localUser = DatabaseHandler.GetFromDb(user);
                Jokes     = DatabaseHandler.ListAll(new Joke(), localUser);
                break;
            }

            if (Jokes.Count > 0)
            {
                EmbedBuilder embed = EmbedTemplate.Create(Context.Client.CurrentUser, Context.User);

                foreach (Joke joke in Jokes)
                {
                    embed.AddField($"{joke.Id} - {joke.Text}", $"Submitted by {joke.User.Username} on {joke.CreatedAt}");
                }

                await ReplyAsync(Message.Info.Generic, false, embed.Build());
            }
            else
            {
                await ReplyAsync(Message.Error.NoContent(localUser));
            }
        }
Exemplo n.º 10
0
        public async Task ShowRandomMemeAsync()
        {
            Random rn    = new Random();
            int    limit = 33000;

            string Path(int n) => $"http://images.memes.com/meme/{n}.jpg";

            string meme = Path(rn.Next(limit));

            EmbedBuilder embed = EmbedTemplate.Create(Context.Client.CurrentUser, Context.User);

            embed.WithImageUrl(meme);
            embed.WithTitle(meme);

            await ReplyAsync(Message.Info.Generic, false, embed.Build());
        }
    public virtual async Task RemoveUserHereCommand(CommandContext ctx)
    {
        try
        {
            await this.UserService.RemoveUserHereAsync(ctx.User.Id, ctx.Guild.Id).ConfigureAwait(false);
        }
        catch (Exception ex)
        {
            var embed = ex is UserProcessingException?EmbedTemplate.ErrorEmbed(ctx, ex.Message) : EmbedTemplate.UnknownErrorEmbed(ctx);

            await ctx.RespondAsync(embed : embed).ConfigureAwait(false);

            throw;
        }

        await ctx.RespondAsync(embed : EmbedTemplate.SuccessEmbed(ctx, $"Now your updates won't appear in this server")).ConfigureAwait(false);
    }
Exemplo n.º 12
0
    public async Task RemoveGuildCommand(CommandContext ctx)
    {
        try
        {
            await this._managementService.RemoveGuildAsync(ctx.Guild.Id).ConfigureAwait(false);
        }
        catch (Exception ex)
        {
            var embed = ex is GuildManagementException?EmbedTemplate.ErrorEmbed(ctx, ex.Message) : EmbedTemplate.UnknownErrorEmbed(ctx);

            await ctx.RespondAsync(embed : embed).ConfigureAwait(false);

            throw;
        }

        await ctx.RespondAsync(embed : EmbedTemplate.SuccessEmbed(ctx, "Successfully removed this server from being tracked"))
        .ConfigureAwait(false);
    }
Exemplo n.º 13
0
    public async Task ForceRemoveUserCommand(CommandContext ctx, [Description("Discord user's id which should be to removed from being tracked")]
                                             ulong userId)
    {
        try
        {
            await this._managementService.RemoveUserAsync(ctx.Guild.Id, userId).ConfigureAwait(false);
        }
        catch (Exception ex)
        {
            var embed = ex is GuildManagementException?EmbedTemplate.ErrorEmbed(ctx, ex.Message) : EmbedTemplate.UnknownErrorEmbed(ctx);

            await ctx.RespondAsync(embed : embed).ConfigureAwait(false);

            throw;
        }

        await ctx.RespondAsync(embed : EmbedTemplate.SuccessEmbed(ctx, $"Successfully removed {userId.ToString()} this server from being tracked"))
        .ConfigureAwait(false);
    }
Exemplo n.º 14
0
        public async Task Help()
        {
            var embed = EmbedTemplate.Create(Context.Client.CurrentUser, Context.User);

            embed.Title = "Inquisition Help:";

            foreach (var c in _commands.Commands)
            {
                string str = "";
                foreach (var a in c.Aliases.Skip(1))
                {
                    if (a != null)
                    {
                        str += a + " | ";
                    }
                }
                embed.AddField(c.Module.Aliases.FirstOrDefault() + " " + c.Name, $"Aliases: {str}\n\n{c.Summary ?? "No specific description"}");
            }
            await Context.User.SendMessageAsync(Message.Info.Generic, false, embed.Build());
        }
Exemplo n.º 15
0
        public static async Task SendEmbed(this ISocketMessageChannel channel, EmbedTemplates template, string message)
        {
            switch (template)
            {
            case EmbedTemplates.Error:
                await channel.SendMessageAsync("", false, EmbedTemplate.Error(message));

                break;

            case EmbedTemplates.Forbidden:
                await channel.SendMessageAsync("", false, EmbedTemplate.Forbidden(message));

                break;

            case EmbedTemplates.Info:
                await channel.SendMessageAsync("", false, EmbedTemplate.Info(message));

                break;
            }
        }
Exemplo n.º 16
0
        public async Task ListAllGamesAsync()
        {
            List <Data.Game> Games = DatabaseHandler.ListAll(new Data.Game());

            if (Games.Count > 0)
            {
                EmbedBuilder builder = EmbedTemplate.Create(Context.Client.CurrentUser, Context.User);

                foreach (Data.Game game in Games)
                {
                    string st = game.IsOnline ? "Online " : "Offline ";
                    builder.AddInlineField(game.Name, st + $"on: {game.Port}, v: {game.Version}");
                }

                await ReplyAsync(Message.Info.Generic, false, builder.Build());
            }
            else
            {
                await ReplyAsync(Message.Error.NoContent(Context.User));
            }
        }
Exemplo n.º 17
0
        public async Task ListAlertsAsync()
        {
            User         localUser = DatabaseHandler.GetFromDb(Context.User);
            List <Alert> Alerts    = DatabaseHandler.ListAll(new Alert(), localUser);

            if (Alerts.Count == 0)
            {
                await ReplyAsync(Message.Error.NoContentGeneric);

                return;
            }

            EmbedBuilder embed = EmbedTemplate.Create(Context.Client.CurrentUser, Context.User);

            foreach (Alert n in Alerts)
            {
                embed.AddField($"For when {n.TargetUser.Username} joins", $"Created: {n.CreatedAt}");
            }

            await ReplyAsync(Message.Info.Generic, false, embed.Build());
        }
Exemplo n.º 18
0
        public async Task ListRemindersAsync()
        {
            User            localUser = DatabaseHandler.GetFromDb(Context.User);
            List <Reminder> Reminders = DatabaseHandler.ListAll(new Reminder(), localUser);

            if (Reminders.Count > 0)
            {
                EmbedBuilder embed = EmbedTemplate.Create(Context.Client.CurrentUser, Context.User);

                foreach (Reminder reminder in Reminders)
                {
                    embed.AddField($"{reminder.Id} - {reminder.Message ?? "No message"}", $"{reminder.DueDate}");
                }

                await ReplyAsync(Message.Info.Generic, false, embed.Build());
            }
            else
            {
                await ReplyAsync(Message.Error.NoContentGeneric);
            }
        }
Exemplo n.º 19
0
        public async Task CreatePollAsync([Remainder] string r = "")
        {
            List <Emoji> reactions = new List <Emoji> {
                new Emoji("👍🏻"), new Emoji("👎🏻"), new Emoji("🤷🏻")
            };

            var messages = await Context.Channel.GetMessagesAsync(1).Flatten();

            await Context.Channel.DeleteMessagesAsync(messages);

            EmbedBuilder embed = EmbedTemplate.Create(Context.Client.CurrentUser, Context.User);

            embed.WithTitle(r);
            embed.WithFooter($"Asked by: {Context.User}", Context.User.GetAvatarUrl());

            var msg = await ReplyAsync("", false, embed.Build());

            foreach (Emoji e in reactions)
            {
                await msg.AddReactionAsync(e);
            }
        }
    public virtual async Task RemoveUserInGuildCommand(CommandContext ctx)
    {
        this.Logger.LogInformation("Trying to remove {Member} from {Name} update provider", ctx.Member, UserService.Name);
        BaseUser user;

        try
        {
            user = await this.UserService.RemoveUserAsync(ctx.User.Id).ConfigureAwait(false);
        }
        catch (Exception ex)
        {
            var embed = ex is UserProcessingException?EmbedTemplate.ErrorEmbed(ctx, ex.Message) : EmbedTemplate.UnknownErrorEmbed(ctx);

            await ctx.RespondAsync(embed : embed).ConfigureAwait(false);

            this.Logger.LogError(ex, "Failed to remove {Member} from {Name} update provider", ctx.Member, UserService.Name);

            throw;
        }
        this.Logger.LogInformation("Successfully removed {Member} from {Name} update provider", ctx.Member, UserService.Name);

        await ctx.RespondAsync(embed : EmbedTemplate.SuccessEmbed(ctx,
                                                                  $"Successfully removed {user.Username} from {this.UserService.Name} update checker")).ConfigureAwait(false);
    }
    public virtual async Task EnabledFeaturesCommand(CommandContext context)
    {
        var featuresDesc = await this.UserFeaturesService.EnabledFeaturesAsync(context.User.Id).ConfigureAwait(false);

        await context.RespondAsync(embed : EmbedTemplate.SuccessEmbed(context, "Your enabled features").WithDescription(featuresDesc)).ConfigureAwait(false);
    }
 public virtual Task ListFeaturesCommand(CommandContext context) =>
 context.RespondAsync(embed: EmbedTemplate.SuccessEmbed(context, "All features")
                      .WithDescription(string.Join(";\n",
                                                   this.UserFeaturesService.Descriptions.Values
                                                   .Select(tuple => $"[{tuple.Item1}] - {tuple.Item2}"))));