forked from EllieBotDevs/elliebot
60 lines
No EOL
2.7 KiB
C#
60 lines
No EOL
2.7 KiB
C#
#nullable disable
|
|
using EllieBot.Modules.Gambling.Common;
|
|
using EllieBot.Modules.Gambling.Common.Events;
|
|
using EllieBot.Modules.Gambling.Services;
|
|
using EllieBot.Db.Models;
|
|
|
|
namespace EllieBot.Modules.Gambling;
|
|
|
|
public partial class Gambling
|
|
{
|
|
[Group]
|
|
public partial class CurrencyEventsCommands : GamblingModule<CurrencyEventsService>
|
|
{
|
|
public CurrencyEventsCommands(GamblingConfigService gamblingConf)
|
|
: base(gamblingConf)
|
|
{
|
|
}
|
|
|
|
[Cmd]
|
|
[RequireContext(ContextType.Guild)]
|
|
[EllieOptions<EventOptions>]
|
|
[OwnerOnly]
|
|
public async Task EventStart(CurrencyEvent.Type ev, params string[] options)
|
|
{
|
|
var (opts, _) = OptionsParser.ParseFrom(new EventOptions(), options);
|
|
if (!await _service.TryCreateEventAsync(ctx.Guild.Id, ctx.Channel.Id, ev, opts, GetEmbed))
|
|
await Response().Error(strs.start_event_fail).SendAsync();
|
|
}
|
|
|
|
private EmbedBuilder GetEmbed(CurrencyEvent.Type type, EventOptions opts, long currentPot)
|
|
=> type switch
|
|
{
|
|
CurrencyEvent.Type.Reaction => CreateEmbed()
|
|
.WithOkColor()
|
|
.WithTitle(GetText(strs.event_title(type.ToString())))
|
|
.WithDescription(GetReactionDescription(opts.Amount, currentPot))
|
|
.WithFooter(GetText(strs.event_duration_footer(opts.Hours))),
|
|
CurrencyEvent.Type.GameStatus => CreateEmbed()
|
|
.WithOkColor()
|
|
.WithTitle(GetText(strs.event_title(type.ToString())))
|
|
.WithDescription(GetGameStatusDescription(opts.Amount, currentPot))
|
|
.WithFooter(GetText(strs.event_duration_footer(opts.Hours))),
|
|
_ => throw new ArgumentOutOfRangeException(nameof(type))
|
|
};
|
|
|
|
private string GetReactionDescription(long amount, long potSize)
|
|
{
|
|
var potSizeStr = Format.Bold(potSize == 0 ? "∞" + CurrencySign : N(potSize));
|
|
|
|
return GetText(strs.new_reaction_event(CurrencySign, Format.Bold(N(amount)), potSizeStr));
|
|
}
|
|
|
|
private string GetGameStatusDescription(long amount, long potSize)
|
|
{
|
|
var potSizeStr = Format.Bold(potSize == 0 ? "∞" + CurrencySign : potSize + CurrencySign);
|
|
|
|
return GetText(strs.new_gamestatus_event(CurrencySign, Format.Bold(N(amount)), potSizeStr));
|
|
}
|
|
}
|
|
} |