#nullable disable using NadekoBot.Modules.Gambling.Services; using System.Numerics; using NadekoBot.Common; namespace NadekoBot.Modules.Gambling.Common; public abstract class GamblingModule : NadekoModule { protected GamblingConfig Config => _lazyConfig.Value; protected string CurrencySign => Config.Currency.Sign; protected string CurrencyName => Config.Currency.Name; private readonly Lazy _lazyConfig; protected GamblingModule(GamblingConfigService gambService) => _lazyConfig = new(() => gambService.Data); private async Task InternalCheckBet(long amount) { if (amount < 1) return false; if (amount < Config.MinBet) { await ReplyErrorLocalizedAsync(strs.min_bet_limit(Format.Bold(Config.MinBet.ToString()) + CurrencySign)); return false; } if (Config.MaxBet > 0 && amount > Config.MaxBet) { await ReplyErrorLocalizedAsync(strs.max_bet_limit(Format.Bold(Config.MaxBet.ToString()) + CurrencySign)); return false; } return true; } protected string N(T cur) where T : INumber => CurrencyHelper.N(cur, Culture, CurrencySign); protected Task CheckBetMandatory(long amount) { if (amount < 1) return Task.FromResult(false); return InternalCheckBet(amount); } protected Task CheckBetOptional(long amount) { if (amount == 0) return Task.FromResult(true); return InternalCheckBet(amount); } } public abstract class GamblingSubmodule : GamblingModule { protected GamblingSubmodule(GamblingConfigService gamblingConfService) : base(gamblingConfService) { } }