mirror of
				https://gitlab.com/Kwoth/nadekobot.git
				synced 2025-11-04 08:34:27 -05:00 
			
		
		
		
	Greatly unboilerplated and simplified nadeko interaction button construction
This commit is contained in:
		@@ -1,13 +0,0 @@
 | 
			
		||||
#nullable disable
 | 
			
		||||
namespace NadekoBot.Modules.Gambling;
 | 
			
		||||
 | 
			
		||||
public class CashInteraction : NInteraction
 | 
			
		||||
{
 | 
			
		||||
    protected override NadekoInteractionData Data
 | 
			
		||||
        => new NadekoInteractionData(new Emoji("🏦"), "cash:bank_show_balance");
 | 
			
		||||
 | 
			
		||||
    public CashInteraction(DiscordSocketClient client, ulong userId, Func<SocketMessageComponent, Task> action)
 | 
			
		||||
        : base(client, userId, action)
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -99,39 +99,20 @@ public partial class Gambling : GamblingModule<GamblingService>
 | 
			
		||||
        PrettyName = "Timely"
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    public class RemindMeInteraction : NInteraction
 | 
			
		||||
    private async Task RemindTimelyAction(SocketMessageComponent smc, DateTime when)
 | 
			
		||||
    {
 | 
			
		||||
        public RemindMeInteraction(
 | 
			
		||||
            [NotNull] DiscordSocketClient client,
 | 
			
		||||
            ulong userId,
 | 
			
		||||
            [NotNull] Func<SocketMessageComponent, Task> action)
 | 
			
		||||
            : base(client, userId, action)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
        var tt = TimestampTag.FromDateTime(when, TimestampTagStyles.Relative);
 | 
			
		||||
 | 
			
		||||
        protected override NadekoInteractionData Data
 | 
			
		||||
            => new NadekoInteractionData(
 | 
			
		||||
                Emote: Emoji.Parse("⏰"),
 | 
			
		||||
                CustomId: "timely:remind_me",
 | 
			
		||||
                Text: "Remind me"
 | 
			
		||||
            );
 | 
			
		||||
        await _remind.AddReminderAsync(ctx.User.Id,
 | 
			
		||||
            ctx.User.Id,
 | 
			
		||||
            ctx.Guild.Id,
 | 
			
		||||
            true,
 | 
			
		||||
            when,
 | 
			
		||||
            GetText(strs.timely_time));
 | 
			
		||||
 | 
			
		||||
        await smc.RespondConfirmAsync(_eb, GetText(strs.remind_timely(tt)), ephemeral: true);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private Func<SocketMessageComponent, Task> RemindTimelyAction(DateTime when)
 | 
			
		||||
        => async smc =>
 | 
			
		||||
        {
 | 
			
		||||
            var tt = TimestampTag.FromDateTime(when, TimestampTagStyles.Relative);
 | 
			
		||||
 | 
			
		||||
            await _remind.AddReminderAsync(ctx.User.Id,
 | 
			
		||||
                ctx.User.Id,
 | 
			
		||||
                ctx.Guild.Id,
 | 
			
		||||
                true,
 | 
			
		||||
                when,
 | 
			
		||||
                GetText(strs.timely_time));
 | 
			
		||||
 | 
			
		||||
            await smc.RespondConfirmAsync(_eb, GetText(strs.remind_timely(tt)), ephemeral: true);
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
    [Cmd]
 | 
			
		||||
    public async Task Timely()
 | 
			
		||||
    {
 | 
			
		||||
@@ -157,11 +138,17 @@ public partial class Gambling : GamblingModule<GamblingService>
 | 
			
		||||
 | 
			
		||||
        await _cs.AddAsync(ctx.User.Id, val, new("timely", "claim"));
 | 
			
		||||
 | 
			
		||||
        var inter = new RemindMeInteraction(_client,
 | 
			
		||||
            ctx.User.Id,
 | 
			
		||||
            RemindTimelyAction(DateTime.UtcNow.Add(TimeSpan.FromHours(period))));
 | 
			
		||||
        
 | 
			
		||||
        await ReplyConfirmLocalizedAsync(strs.timely(N(val), period), inter.GetInteraction());
 | 
			
		||||
        var inter = _inter
 | 
			
		||||
            .Create(ctx.User.Id,
 | 
			
		||||
                new SimpleInteraction<DateTime>(
 | 
			
		||||
                    new ButtonBuilder(
 | 
			
		||||
                        label: "Remind me",
 | 
			
		||||
                        emote: Emoji.Parse("⏰"),
 | 
			
		||||
                        customId: "timely:remind_me"),
 | 
			
		||||
                    RemindTimelyAction,
 | 
			
		||||
                    DateTime.UtcNow.Add(TimeSpan.FromHours(period))));
 | 
			
		||||
 | 
			
		||||
        await ReplyConfirmLocalizedAsync(strs.timely(N(val), period), inter);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [Cmd]
 | 
			
		||||
@@ -362,7 +349,7 @@ public partial class Gambling : GamblingModule<GamblingService>
 | 
			
		||||
        await ReplyConfirmLocalizedAsync(strs.has(Format.Code(userId.ToString()), cur));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private async Task BankAction(SocketMessageComponent smc)
 | 
			
		||||
    private async Task BankAction(SocketMessageComponent smc, object _)
 | 
			
		||||
    {
 | 
			
		||||
        var balance = await _bank.GetBalanceAsync(ctx.User.Id);
 | 
			
		||||
 | 
			
		||||
@@ -372,8 +359,12 @@ public partial class Gambling : GamblingModule<GamblingService>
 | 
			
		||||
              .Pipe(text => smc.RespondConfirmAsync(_eb, text, ephemeral: true));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private NadekoButtonInteraction CreateCashInteraction()
 | 
			
		||||
        => new CashInteraction(_client, ctx.User.Id, BankAction).GetInteraction();
 | 
			
		||||
    private NadekoInteraction CreateCashInteraction()
 | 
			
		||||
        => _inter.Create<object>(ctx.User.Id,
 | 
			
		||||
            new(new(
 | 
			
		||||
                    customId: "cash:bank_show_balance", 
 | 
			
		||||
                    emote: new Emoji("🏦")),
 | 
			
		||||
                BankAction));
 | 
			
		||||
 | 
			
		||||
    [Cmd]
 | 
			
		||||
    [Priority(1)]
 | 
			
		||||
 
 | 
			
		||||
@@ -73,16 +73,6 @@ public partial class Gambling
 | 
			
		||||
 | 
			
		||||
            await ctx.Channel.EmbedAsync(embed);
 | 
			
		||||
        }
 | 
			
		||||
        public sealed class SlotInteraction : NInteraction
 | 
			
		||||
        {
 | 
			
		||||
            public SlotInteraction(DiscordSocketClient client, ulong userId, Func<SocketMessageComponent, Task> action) : base(client, userId, action)
 | 
			
		||||
            {
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            protected override NadekoInteractionData Data { get; } = new(Emoji.Parse("🔁"),
 | 
			
		||||
                "slot:again",
 | 
			
		||||
                "Pull Again");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Cmd]
 | 
			
		||||
        public async Task Slot(ShmartNumber amount)
 | 
			
		||||
@@ -117,7 +107,7 @@ public partial class Gambling
 | 
			
		||||
                    .WithImageUrl($"attachment://result.png")
 | 
			
		||||
                    .WithOkColor();
 | 
			
		||||
                
 | 
			
		||||
                // var inter = slotInteraction.GetInteraction();
 | 
			
		||||
                //new(Emoji.Parse("🔁"), "slot:again", "Pull Again");
 | 
			
		||||
                await ctx.Channel.SendFileAsync(imgStream,
 | 
			
		||||
                    "result.png",
 | 
			
		||||
                    embed: eb.Build()
 | 
			
		||||
 
 | 
			
		||||
@@ -424,7 +424,7 @@ public partial class Help : NadekoModule<HelpService>
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception)
 | 
			
		||||
            {
 | 
			
		||||
                Log.Information("No old version list found. Creating a new one.");
 | 
			
		||||
                Log.Information("No old version list found. Creating a new one");
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            var versionList = JsonSerializer.Deserialize<List<string>>(versionListString);
 | 
			
		||||
@@ -469,7 +469,7 @@ public partial class Help : NadekoModule<HelpService>
 | 
			
		||||
            "https://nadekobot.readthedocs.io/en/latest/"));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    private Task SelfhostAction(SocketMessageComponent smc)
 | 
			
		||||
    private Task SelfhostAction(SocketMessageComponent smc, object _)
 | 
			
		||||
        => smc.RespondConfirmAsync(_eb,
 | 
			
		||||
            @"- In case you don't want or cannot Donate to NadekoBot project, but you 
 | 
			
		||||
- NadekoBot is a completely free and fully [open source](https://gitlab.com/kwoth/nadekobot) project which means you can run your own ""selfhosted"" instance on your computer or server for free.
 | 
			
		||||
@@ -484,7 +484,13 @@ public partial class Help : NadekoModule<HelpService>
 | 
			
		||||
    [OnlyPublicBot]
 | 
			
		||||
    public async Task Donate()
 | 
			
		||||
    {
 | 
			
		||||
        var selfhostInter = new DonateSelfhostingInteraction(_client, ctx.User.Id, SelfhostAction);
 | 
			
		||||
        // => new NadekoInteractionData(new Emoji("🖥️"), "donate:selfhosting", "Selfhosting");
 | 
			
		||||
        var selfhostInter = _inter.Create(ctx.User.Id,
 | 
			
		||||
            new SimpleInteraction<object>(new ButtonBuilder(
 | 
			
		||||
                    emote: new Emoji("🖥️"),
 | 
			
		||||
                    customId: "donate:selfhosting",
 | 
			
		||||
                    label: "Selfhosting"),
 | 
			
		||||
                SelfhostAction));
 | 
			
		||||
        
 | 
			
		||||
        var eb = _eb.Create(ctx)
 | 
			
		||||
                    .WithOkColor()
 | 
			
		||||
@@ -525,7 +531,7 @@ Nadeko will DM you the welcome instructions, and you may start using the patron-
 | 
			
		||||
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            await (await ctx.User.CreateDMChannelAsync()).EmbedAsync(eb, inter: selfhostInter.GetInteraction());
 | 
			
		||||
            await (await ctx.User.CreateDMChannelAsync()).EmbedAsync(eb, inter: selfhostInter);
 | 
			
		||||
            _ = ctx.OkAsync();
 | 
			
		||||
        }
 | 
			
		||||
        catch
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +0,0 @@
 | 
			
		||||
namespace NadekoBot.Modules.Help;
 | 
			
		||||
 | 
			
		||||
public class DonateSelfhostingInteraction : NInteraction
 | 
			
		||||
{
 | 
			
		||||
    protected override NadekoInteractionData Data
 | 
			
		||||
        => new NadekoInteractionData(new Emoji("🖥️"), "donate:selfhosting", "Selfhosting");
 | 
			
		||||
    
 | 
			
		||||
    public DonateSelfhostingInteraction(DiscordSocketClient client, ulong userId, Func<SocketMessageComponent, Task> action)
 | 
			
		||||
        : base(client, userId, action)
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,12 +0,0 @@
 | 
			
		||||
namespace NadekoBot.Modules.Help;
 | 
			
		||||
 | 
			
		||||
public class DonateTroubleshootInteraction : NInteraction
 | 
			
		||||
{
 | 
			
		||||
    protected override NadekoInteractionData Data
 | 
			
		||||
        => new NadekoInteractionData(new Emoji("❓"), "donate:troubleshoot", "Troubleshoot");
 | 
			
		||||
    
 | 
			
		||||
    public DonateTroubleshootInteraction(DiscordSocketClient client, ulong userId, Func<SocketMessageComponent, Task> action)
 | 
			
		||||
        : base(client, userId, action)
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -433,7 +433,6 @@ public partial class Xp : NadekoModule<XpService>
 | 
			
		||||
                            ? GetText(strs.in_use)
 | 
			
		||||
                            : GetText(strs.use),
 | 
			
		||||
                        "XP_SHOP_USE",
 | 
			
		||||
                        ButtonStyle.Primary,
 | 
			
		||||
                        emote: Emoji.Parse("👐"),
 | 
			
		||||
                        isDisabled: ownedItem.IsUsing);
 | 
			
		||||
 | 
			
		||||
@@ -448,7 +447,6 @@ public partial class Xp : NadekoModule<XpService>
 | 
			
		||||
                {
 | 
			
		||||
                    var button = new ButtonBuilder(GetText(strs.buy),
 | 
			
		||||
                        "XP_SHOP_BUY",
 | 
			
		||||
                        ButtonStyle.Primary,
 | 
			
		||||
                        emote: Emoji.Parse("💰"));
 | 
			
		||||
 | 
			
		||||
                    var inter = new SimpleInteraction<(string key, XpShopItemType type)?>(
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user