Added Use button on sucessful .xpshopbuy or when a user already owns the item

This commit is contained in:
Kwoth
2022-08-08 16:17:30 +02:00
parent 38e3badb87
commit 6b9a858f28
8 changed files with 17 additions and 31 deletions

View File

@@ -17,8 +17,6 @@ public class DiscordUser : DbEntity
public bool IsClubAdmin { get; set; } public bool IsClubAdmin { get; set; }
public long TotalXp { get; set; } public long TotalXp { get; set; }
public DateTime LastLevelUp { get; set; } = DateTime.UtcNow;
public DateTime LastXpGain { get; set; } = DateTime.MinValue;
public XpNotificationLocation NotifyOnLevelUp { get; set; } public XpNotificationLocation NotifyOnLevelUp { get; set; }
public long CurrencyAmount { get; set; } public long CurrencyAmount { get; set; }

View File

@@ -8,7 +8,6 @@ public class UserXpStats : DbEntity
public long Xp { get; set; } public long Xp { get; set; }
public long AwardedXp { get; set; } public long AwardedXp { get; set; }
public XpNotificationLocation NotifyOnLevelUp { get; set; } public XpNotificationLocation NotifyOnLevelUp { get; set; }
public DateTime LastLevelUp { get; set; } = DateTime.UtcNow;
} }
public enum XpNotificationLocation { None, Dm, Channel } public enum XpNotificationLocation { None, Dm, Channel }

View File

@@ -10,10 +10,6 @@ public sealed class MysqlContext : NadekoContext
protected override string CurrencyTransactionOtherIdDefaultValue protected override string CurrencyTransactionOtherIdDefaultValue
=> "NULL"; => "NULL";
protected override string DiscordUserLastXpGainDefaultValue
=> "(UTC_TIMESTAMP - INTERVAL 1 year)";
protected override string LastLevelUpDefaultValue
=> "(UTC_TIMESTAMP)";
public MysqlContext(string connStr = "Server=localhost", string version = "8.0") public MysqlContext(string connStr = "Server=localhost", string version = "8.0")
{ {

View File

@@ -65,8 +65,6 @@ public abstract class NadekoContext : DbContext
#region Mandatory Provider-Specific Values #region Mandatory Provider-Specific Values
protected abstract string CurrencyTransactionOtherIdDefaultValue { get; } protected abstract string CurrencyTransactionOtherIdDefaultValue { get; }
protected abstract string DiscordUserLastXpGainDefaultValue { get; }
protected abstract string LastLevelUpDefaultValue { get; }
#endregion #endregion
@@ -166,12 +164,6 @@ public abstract class NadekoContext : DbContext
du.Property(x => x.NotifyOnLevelUp) du.Property(x => x.NotifyOnLevelUp)
.HasDefaultValue(XpNotificationLocation.None); .HasDefaultValue(XpNotificationLocation.None);
du.Property(x => x.LastXpGain)
.HasDefaultValueSql(DiscordUserLastXpGainDefaultValue);
du.Property(x => x.LastLevelUp)
.HasDefaultValueSql(LastLevelUpDefaultValue);
du.Property(x => x.TotalXp) du.Property(x => x.TotalXp)
.HasDefaultValue(0); .HasDefaultValue(0);
@@ -213,9 +205,6 @@ public abstract class NadekoContext : DbContext
}) })
.IsUnique(); .IsUnique();
xps.Property(x => x.LastLevelUp)
.HasDefaultValueSql(LastLevelUpDefaultValue);
xps.HasIndex(x => x.UserId); xps.HasIndex(x => x.UserId);
xps.HasIndex(x => x.GuildId); xps.HasIndex(x => x.GuildId);
xps.HasIndex(x => x.Xp); xps.HasIndex(x => x.Xp);

View File

@@ -8,10 +8,6 @@ public sealed class PostgreSqlContext : NadekoContext
protected override string CurrencyTransactionOtherIdDefaultValue protected override string CurrencyTransactionOtherIdDefaultValue
=> "NULL"; => "NULL";
protected override string DiscordUserLastXpGainDefaultValue
=> "timezone('utc', now()) - interval '-1 year'";
protected override string LastLevelUpDefaultValue
=> "timezone('utc', now())";
public PostgreSqlContext(string connStr = "Host=localhost") public PostgreSqlContext(string connStr = "Host=localhost")
{ {

View File

@@ -9,10 +9,6 @@ public sealed class SqliteContext : NadekoContext
protected override string CurrencyTransactionOtherIdDefaultValue protected override string CurrencyTransactionOtherIdDefaultValue
=> "NULL"; => "NULL";
protected override string DiscordUserLastXpGainDefaultValue
=> "datetime('now', '-1 years')";
protected override string LastLevelUpDefaultValue
=> "datetime('now')";
public SqliteContext(string connectionString = "Data Source=data/NadekoBot.db", int commandTimeout = 60) public SqliteContext(string connectionString = "Data Source=data/NadekoBot.db", int commandTimeout = 60)
{ {

View File

@@ -432,7 +432,7 @@ public partial class Xp : NadekoModule<XpService>
var button = new ButtonBuilder(ownedItem.IsUsing var button = new ButtonBuilder(ownedItem.IsUsing
? GetText(strs.in_use) ? GetText(strs.in_use)
: GetText(strs.use), : GetText(strs.use),
"XP_SHOP_USE", "xpshop:use",
emote: Emoji.Parse("👐"), emote: Emoji.Parse("👐"),
isDisabled: ownedItem.IsUsing); isDisabled: ownedItem.IsUsing);
@@ -446,7 +446,7 @@ public partial class Xp : NadekoModule<XpService>
else else
{ {
var button = new ButtonBuilder(GetText(strs.buy), var button = new ButtonBuilder(GetText(strs.buy),
"XP_SHOP_BUY", "xpshop:buy",
emote: Emoji.Parse("💰")); emote: Emoji.Parse("💰"));
var inter = new SimpleInteraction<(string key, XpShopItemType type)?>( var inter = new SimpleInteraction<(string key, XpShopItemType type)?>(
@@ -467,12 +467,22 @@ public partial class Xp : NadekoModule<XpService>
{ {
var result = await _service.BuyShopItemAsync(ctx.User.Id, (XpShopItemType)type, key); var result = await _service.BuyShopItemAsync(ctx.User.Id, (XpShopItemType)type, key);
NadekoInteraction GetUseInteraction()
{
return _inter.Create(ctx.User.Id,
new SimpleInteraction<object>(
new ButtonBuilder(label: "Use", customId: "xpshop:use_item", emote: Emoji.Parse("👐")),
async (smc, _) => await XpShopUse(type, key)
));
}
if (result != BuyResult.Success) if (result != BuyResult.Success)
{ {
var _ = result switch var _ = result switch
{ {
BuyResult.XpShopDisabled => await ReplyErrorLocalizedAsync(strs.xp_shop_disabled),
BuyResult.InsufficientFunds => await ReplyErrorLocalizedAsync(strs.not_enough(_gss.Data.Currency.Sign)), BuyResult.InsufficientFunds => await ReplyErrorLocalizedAsync(strs.not_enough(_gss.Data.Currency.Sign)),
BuyResult.AlreadyOwned => await ReplyErrorLocalizedAsync(strs.xpshop_already_owned), BuyResult.AlreadyOwned => await ReplyErrorLocalizedAsync(strs.xpshop_already_owned, GetUseInteraction()),
BuyResult.UnknownItem => await ReplyErrorLocalizedAsync(strs.xpshop_item_not_found), BuyResult.UnknownItem => await ReplyErrorLocalizedAsync(strs.xpshop_item_not_found),
BuyResult.InsufficientPatronTier => await ReplyErrorLocalizedAsync(strs.patron_insuff_tier), BuyResult.InsufficientPatronTier => await ReplyErrorLocalizedAsync(strs.patron_insuff_tier),
_ => throw new ArgumentOutOfRangeException() _ => throw new ArgumentOutOfRangeException()
@@ -481,7 +491,8 @@ public partial class Xp : NadekoModule<XpService>
} }
await ReplyConfirmLocalizedAsync(strs.xpshop_buy_success(type.ToString().ToLowerInvariant(), await ReplyConfirmLocalizedAsync(strs.xpshop_buy_success(type.ToString().ToLowerInvariant(),
key.ToLowerInvariant())); key.ToLowerInvariant()),
GetUseInteraction());
} }
[Cmd] [Cmd]

View File

@@ -1394,7 +1394,7 @@ public class XpService : INService, IReadyExecutor, IExecNoCommand
var conf = _xpConfig.Data; var conf = _xpConfig.Data;
if (!conf.Shop.IsEnabled) if (!conf.Shop.IsEnabled)
return BuyResult.UnknownItem; return BuyResult.XpShopDisabled;
var req = type == XpShopItemType.Background var req = type == XpShopItemType.Background
? conf.Shop.BgsTierRequirement ? conf.Shop.BgsTierRequirement
@@ -1545,6 +1545,7 @@ public class XpService : INService, IReadyExecutor, IExecNoCommand
public enum BuyResult public enum BuyResult
{ {
Success, Success,
XpShopDisabled,
AlreadyOwned, AlreadyOwned,
InsufficientFunds, InsufficientFunds,
UnknownItem, UnknownItem,