gambling fixed
This commit is contained in:
parent
c183e8ad58
commit
9e3dc6d5a1
@ -12,9 +12,8 @@ namespace NadekoBot.Attributes
|
|||||||
public override Task<PreconditionResult> CheckPermissions(ICommandContext context, CommandInfo executingCommand, IServiceProvider services)
|
public override Task<PreconditionResult> CheckPermissions(ICommandContext context, CommandInfo executingCommand, IServiceProvider services)
|
||||||
{
|
{
|
||||||
var creds = (IBotCredentials)services.GetService(typeof(IBotCredentials));
|
var creds = (IBotCredentials)services.GetService(typeof(IBotCredentials));
|
||||||
var client = (IDiscordClient)services.GetService(typeof(IDiscordClient));
|
|
||||||
|
|
||||||
return Task.FromResult((creds.IsOwner(context.User) || client.CurrentUser.Id == context.User.Id ? PreconditionResult.FromSuccess() : PreconditionResult.FromError("Not owner")));
|
return Task.FromResult((creds.IsOwner(context.User) || context.Client.CurrentUser.Id == context.User.Id ? PreconditionResult.FromSuccess() : PreconditionResult.FromError("Not owner")));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -4,6 +4,7 @@ using Discord.WebSocket;
|
|||||||
using NadekoBot.Attributes;
|
using NadekoBot.Attributes;
|
||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
using NadekoBot.Services;
|
using NadekoBot.Services;
|
||||||
|
using NadekoBot.Services.Database.Models;
|
||||||
using NLog;
|
using NLog;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
@ -19,13 +20,26 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
[Group]
|
[Group]
|
||||||
public class AnimalRacing : NadekoSubmodule
|
public class AnimalRacing : NadekoSubmodule
|
||||||
{
|
{
|
||||||
|
private readonly BotConfig _bc;
|
||||||
|
private readonly CurrencyHandler _ch;
|
||||||
|
private readonly DiscordShardedClient _client;
|
||||||
|
|
||||||
|
|
||||||
public static ConcurrentDictionary<ulong, AnimalRace> AnimalRaces { get; } = new ConcurrentDictionary<ulong, AnimalRace>();
|
public static ConcurrentDictionary<ulong, AnimalRace> AnimalRaces { get; } = new ConcurrentDictionary<ulong, AnimalRace>();
|
||||||
|
|
||||||
|
public AnimalRacing(BotConfig bc, CurrencyHandler ch, DiscordShardedClient client)
|
||||||
|
{
|
||||||
|
_bc = bc;
|
||||||
|
_ch = ch;
|
||||||
|
_client = client;
|
||||||
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Race()
|
public async Task Race()
|
||||||
{
|
{
|
||||||
var ar = new AnimalRace(Context.Guild.Id, (ITextChannel)Context.Channel, Prefix);
|
var ar = new AnimalRace(Context.Guild.Id, (ITextChannel)Context.Channel, Prefix,
|
||||||
|
_bc, _ch, _client,_localization, _strings);
|
||||||
|
|
||||||
if (ar.Fail)
|
if (ar.Fail)
|
||||||
await ReplyErrorLocalized("race_failed_starting").ConfigureAwait(false);
|
await ReplyErrorLocalized("race_failed_starting").ConfigureAwait(false);
|
||||||
@ -49,6 +63,8 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
await ar.JoinRace(Context.User as IGuildUser, amount);
|
await ar.JoinRace(Context.User as IGuildUser, amount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//todo needs to be completely isolated, shouldn't use any services in the constructor,
|
||||||
|
//then move the rest either to the module itself, or the service
|
||||||
public class AnimalRace
|
public class AnimalRace
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -64,21 +80,35 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
private readonly Logger _log;
|
private readonly Logger _log;
|
||||||
|
|
||||||
private readonly ITextChannel _raceChannel;
|
private readonly ITextChannel _raceChannel;
|
||||||
|
private readonly BotConfig _bc;
|
||||||
|
private readonly CurrencyHandler _ch;
|
||||||
|
private readonly DiscordShardedClient _client;
|
||||||
|
private readonly ILocalization _localization;
|
||||||
|
private readonly NadekoStrings _strings;
|
||||||
|
|
||||||
public bool Started { get; private set; }
|
public bool Started { get; private set; }
|
||||||
|
|
||||||
public AnimalRace(ulong serverId, ITextChannel ch, string prefix)
|
public AnimalRace(ulong serverId, ITextChannel channel, string prefix, BotConfig bc,
|
||||||
|
CurrencyHandler ch, DiscordShardedClient client, ILocalization localization,
|
||||||
|
NadekoStrings strings)
|
||||||
{
|
{
|
||||||
_prefix = prefix;
|
_prefix = prefix;
|
||||||
|
_bc = bc;
|
||||||
|
_ch = ch;
|
||||||
_log = LogManager.GetCurrentClassLogger();
|
_log = LogManager.GetCurrentClassLogger();
|
||||||
_serverId = serverId;
|
_serverId = serverId;
|
||||||
_raceChannel = ch;
|
_raceChannel = channel;
|
||||||
|
_client = client;
|
||||||
|
_localization = localization;
|
||||||
|
_strings = strings;
|
||||||
|
|
||||||
if (!AnimalRaces.TryAdd(serverId, this))
|
if (!AnimalRaces.TryAdd(serverId, this))
|
||||||
{
|
{
|
||||||
Fail = true;
|
Fail = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
animals = new ConcurrentQueue<string>(NadekoBot.BotConfig.RaceAnimals.Select(ra => ra.Icon).Shuffle());
|
animals = new ConcurrentQueue<string>(_bc.RaceAnimals.Select(ra => ra.Icon).Shuffle());
|
||||||
|
|
||||||
|
|
||||||
var cancelSource = new CancellationTokenSource();
|
var cancelSource = new CancellationTokenSource();
|
||||||
@ -114,7 +144,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
var p = _participants.FirstOrDefault();
|
var p = _participants.FirstOrDefault();
|
||||||
|
|
||||||
if (p != null && p.AmountBet > 0)
|
if (p != null && p.AmountBet > 0)
|
||||||
await CurrencyHandler.AddCurrencyAsync(p.User, "BetRace", p.AmountBet, false).ConfigureAwait(false);
|
await _ch.AddCurrencyAsync(p.User, "BetRace", p.AmountBet, false).ConfigureAwait(false);
|
||||||
End();
|
End();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -139,7 +169,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
var place = 1;
|
var place = 1;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
NadekoBot.Client.MessageReceived += Client_MessageReceived;
|
_client.MessageReceived += Client_MessageReceived;
|
||||||
|
|
||||||
while (!_participants.All(p => p.Total >= 60))
|
while (!_participants.All(p => p.Total >= 60))
|
||||||
{
|
{
|
||||||
@ -193,7 +223,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
NadekoBot.Client.MessageReceived -= Client_MessageReceived;
|
_client.MessageReceived -= Client_MessageReceived;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (winner != null)
|
if (winner != null)
|
||||||
@ -202,11 +232,11 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
{
|
{
|
||||||
var wonAmount = winner.AmountBet * (_participants.Count - 1);
|
var wonAmount = winner.AmountBet * (_participants.Count - 1);
|
||||||
|
|
||||||
await CurrencyHandler.AddCurrencyAsync(winner.User, "Won a Race", wonAmount, true)
|
await _ch.AddCurrencyAsync(winner.User, "Won a Race", wonAmount, true)
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
await _raceChannel.SendConfirmAsync(GetText("animal_race"),
|
await _raceChannel.SendConfirmAsync(GetText("animal_race"),
|
||||||
Format.Bold(GetText("animal_race_won_money", winner.User.Mention,
|
Format.Bold(GetText("animal_race_won_money", winner.User.Mention,
|
||||||
winner.Animal, wonAmount + CurrencySign)))
|
winner.Animal, wonAmount + _bc.CurrencySign)))
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -223,7 +253,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
var msg = imsg as SocketUserMessage;
|
var msg = imsg as SocketUserMessage;
|
||||||
if (msg == null)
|
if (msg == null)
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
if (msg.IsAuthor() || !(imsg.Channel is ITextChannel) || imsg.Channel != _raceChannel)
|
if ((msg.Author.Id == _client.CurrentUser.Id) || !(imsg.Channel is ITextChannel) || imsg.Channel != _raceChannel)
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
_messagesSinceGameStarted++;
|
_messagesSinceGameStarted++;
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
@ -257,28 +287,28 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (amount > 0)
|
if (amount > 0)
|
||||||
if (!await CurrencyHandler.RemoveCurrencyAsync(u, "BetRace", amount, false).ConfigureAwait(false))
|
if (!await _ch.RemoveCurrencyAsync(u, "BetRace", amount, false).ConfigureAwait(false))
|
||||||
{
|
{
|
||||||
await _raceChannel.SendErrorAsync(GetText("not_enough", CurrencySign)).ConfigureAwait(false);
|
await _raceChannel.SendErrorAsync(GetText("not_enough", _bc.CurrencySign)).ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
_participants.Add(p);
|
_participants.Add(p);
|
||||||
string confStr;
|
string confStr;
|
||||||
if (amount > 0)
|
if (amount > 0)
|
||||||
confStr = GetText("animal_race_join_bet", u.Mention, p.Animal, amount + CurrencySign);
|
confStr = GetText("animal_race_join_bet", u.Mention, p.Animal, amount + _bc.CurrencySign);
|
||||||
else
|
else
|
||||||
confStr = GetText("animal_race_join", u.Mention, p.Animal);
|
confStr = GetText("animal_race_join", u.Mention, p.Animal);
|
||||||
await _raceChannel.SendConfirmAsync(GetText("animal_race"), Format.Bold(confStr)).ConfigureAwait(false);
|
await _raceChannel.SendConfirmAsync(GetText("animal_race"), Format.Bold(confStr)).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private string GetText(string text)
|
private string GetText(string text)
|
||||||
=> NadekoTopLevelModule.GetTextStatic(text,
|
=> _strings.GetText(text,
|
||||||
NadekoBot.Localization.GetCultureInfo(_raceChannel.Guild),
|
_localization.GetCultureInfo(_raceChannel.Guild),
|
||||||
typeof(Gambling).Name.ToLowerInvariant());
|
typeof(Gambling).Name.ToLowerInvariant());
|
||||||
|
|
||||||
private string GetText(string text, params object[] replacements)
|
private string GetText(string text, params object[] replacements)
|
||||||
=> NadekoTopLevelModule.GetTextStatic(text,
|
=> _strings.GetText(text,
|
||||||
NadekoBot.Localization.GetCultureInfo(_raceChannel.Guild),
|
_localization.GetCultureInfo(_raceChannel.Guild),
|
||||||
typeof(Gambling).Name.ToLowerInvariant(),
|
typeof(Gambling).Name.ToLowerInvariant(),
|
||||||
replacements);
|
replacements);
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@ using System.Threading.Tasks;
|
|||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using NLog;
|
using NLog;
|
||||||
|
using NadekoBot.Services.Database.Models;
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Gambling
|
namespace NadekoBot.Modules.Gambling
|
||||||
{
|
{
|
||||||
@ -26,14 +27,23 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
//flower reaction event
|
//flower reaction event
|
||||||
private static readonly ConcurrentHashSet<ulong> _sneakyGameAwardedUsers = new ConcurrentHashSet<ulong>();
|
private static readonly ConcurrentHashSet<ulong> _sneakyGameAwardedUsers = new ConcurrentHashSet<ulong>();
|
||||||
|
|
||||||
|
|
||||||
private static readonly char[] _sneakyGameStatusChars = Enumerable.Range(48, 10)
|
private static readonly char[] _sneakyGameStatusChars = Enumerable.Range(48, 10)
|
||||||
.Concat(Enumerable.Range(65, 26))
|
.Concat(Enumerable.Range(65, 26))
|
||||||
.Concat(Enumerable.Range(97, 26))
|
.Concat(Enumerable.Range(97, 26))
|
||||||
.Select(x => (char)x)
|
.Select(x => (char)x)
|
||||||
.ToArray();
|
.ToArray();
|
||||||
|
|
||||||
private static string _secretCode = string.Empty;
|
private string _secretCode = string.Empty;
|
||||||
|
private readonly DiscordShardedClient _client;
|
||||||
|
private readonly BotConfig _bc;
|
||||||
|
private readonly CurrencyHandler _ch;
|
||||||
|
|
||||||
|
public CurrencyEvents(DiscordShardedClient client, BotConfig bc, CurrencyHandler ch)
|
||||||
|
{
|
||||||
|
_client = client;
|
||||||
|
_bc = bc;
|
||||||
|
_ch = ch;
|
||||||
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
@ -68,12 +78,12 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
_secretCode += _sneakyGameStatusChars[rng.Next(0, _sneakyGameStatusChars.Length)];
|
_secretCode += _sneakyGameStatusChars[rng.Next(0, _sneakyGameStatusChars.Length)];
|
||||||
}
|
}
|
||||||
|
|
||||||
await NadekoBot.Client.SetGameAsync($"type {_secretCode} for " + NadekoBot.BotConfig.CurrencyPluralName)
|
await _client.SetGameAsync($"type {_secretCode} for " + _bc.CurrencyPluralName)
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var title = GetText("sneakygamestatus_title");
|
var title = GetText("sneakygamestatus_title");
|
||||||
var desc = GetText("sneakygamestatus_desc", Format.Bold(100.ToString()) + CurrencySign, Format.Bold(num.ToString()));
|
var desc = GetText("sneakygamestatus_desc", Format.Bold(100.ToString()) + _bc.CurrencySign, Format.Bold(num.ToString()));
|
||||||
await context.Channel.SendConfirmAsync(title, desc).ConfigureAwait(false);
|
await context.Channel.SendConfirmAsync(title, desc).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
@ -82,26 +92,26 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
NadekoBot.Client.MessageReceived += SneakyGameMessageReceivedEventHandler;
|
_client.MessageReceived += SneakyGameMessageReceivedEventHandler;
|
||||||
await Task.Delay(num * 1000);
|
await Task.Delay(num * 1000);
|
||||||
NadekoBot.Client.MessageReceived -= SneakyGameMessageReceivedEventHandler;
|
_client.MessageReceived -= SneakyGameMessageReceivedEventHandler;
|
||||||
|
|
||||||
var cnt = _sneakyGameAwardedUsers.Count;
|
var cnt = _sneakyGameAwardedUsers.Count;
|
||||||
_sneakyGameAwardedUsers.Clear();
|
_sneakyGameAwardedUsers.Clear();
|
||||||
_secretCode = string.Empty;
|
_secretCode = string.Empty;
|
||||||
|
|
||||||
await NadekoBot.Client.SetGameAsync(GetText("sneakygamestatus_end", cnt))
|
await _client.SetGameAsync(GetText("sneakygamestatus_end", cnt))
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Task SneakyGameMessageReceivedEventHandler(SocketMessage arg)
|
private Task SneakyGameMessageReceivedEventHandler(SocketMessage arg)
|
||||||
{
|
{
|
||||||
if (arg.Content == _secretCode &&
|
if (arg.Content == _secretCode &&
|
||||||
_sneakyGameAwardedUsers.Add(arg.Author.Id))
|
_sneakyGameAwardedUsers.Add(arg.Author.Id))
|
||||||
{
|
{
|
||||||
var _ = Task.Run(async () =>
|
var _ = Task.Run(async () =>
|
||||||
{
|
{
|
||||||
await CurrencyHandler.AddCurrencyAsync(arg.Author, "Sneaky Game Event", 100, false)
|
await _ch.AddCurrencyAsync(arg.Author, "Sneaky Game Event", 100, false)
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
|
|
||||||
try { await arg.DeleteAsync(new RequestOptions() { RetryMode = RetryMode.AlwaysFail }).ConfigureAwait(false); }
|
try { await arg.DeleteAsync(new RequestOptions() { RetryMode = RetryMode.AlwaysFail }).ConfigureAwait(false); }
|
||||||
@ -121,13 +131,13 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
amount = 100;
|
amount = 100;
|
||||||
|
|
||||||
var title = GetText("flowerreaction_title");
|
var title = GetText("flowerreaction_title");
|
||||||
var desc = GetText("flowerreaction_desc", "🌸", Format.Bold(amount.ToString()) + CurrencySign);
|
var desc = GetText("flowerreaction_desc", "🌸", Format.Bold(amount.ToString()) + _bc.CurrencySign);
|
||||||
var footer = GetText("flowerreaction_footer", 24);
|
var footer = GetText("flowerreaction_footer", 24);
|
||||||
var msg = await context.Channel.SendConfirmAsync(title,
|
var msg = await context.Channel.SendConfirmAsync(title,
|
||||||
desc, footer: footer)
|
desc, footer: footer)
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
|
|
||||||
await new FlowerReactionEvent().Start(msg, context, amount);
|
await new FlowerReactionEvent(_client, _ch).Start(msg, context, amount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -141,15 +151,19 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
{
|
{
|
||||||
private readonly ConcurrentHashSet<ulong> _flowerReactionAwardedUsers = new ConcurrentHashSet<ulong>();
|
private readonly ConcurrentHashSet<ulong> _flowerReactionAwardedUsers = new ConcurrentHashSet<ulong>();
|
||||||
private readonly Logger _log;
|
private readonly Logger _log;
|
||||||
|
private readonly DiscordShardedClient _client;
|
||||||
|
private readonly CurrencyHandler _ch;
|
||||||
|
|
||||||
private IUserMessage StartingMessage { get; set; }
|
private IUserMessage StartingMessage { get; set; }
|
||||||
|
|
||||||
private CancellationTokenSource Source { get; }
|
private CancellationTokenSource Source { get; }
|
||||||
private CancellationToken CancelToken { get; }
|
private CancellationToken CancelToken { get; }
|
||||||
|
|
||||||
public FlowerReactionEvent()
|
public FlowerReactionEvent(DiscordShardedClient client, CurrencyHandler ch)
|
||||||
{
|
{
|
||||||
_log = LogManager.GetCurrentClassLogger();
|
_log = LogManager.GetCurrentClassLogger();
|
||||||
|
_client = client;
|
||||||
|
_ch = ch;
|
||||||
Source = new CancellationTokenSource();
|
Source = new CancellationTokenSource();
|
||||||
CancelToken = Source.Token;
|
CancelToken = Source.Token;
|
||||||
}
|
}
|
||||||
@ -162,7 +176,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
if(!Source.IsCancellationRequested)
|
if(!Source.IsCancellationRequested)
|
||||||
Source.Cancel();
|
Source.Cancel();
|
||||||
|
|
||||||
NadekoBot.Client.MessageDeleted -= MessageDeletedEventHandler;
|
_client.MessageDeleted -= MessageDeletedEventHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Task MessageDeletedEventHandler(Cacheable<IMessage, ulong> msg, ISocketMessageChannel channel) {
|
private Task MessageDeletedEventHandler(Cacheable<IMessage, ulong> msg, ISocketMessageChannel channel) {
|
||||||
@ -178,25 +192,25 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
public override async Task Start(IUserMessage umsg, ICommandContext context, int amount)
|
public override async Task Start(IUserMessage umsg, ICommandContext context, int amount)
|
||||||
{
|
{
|
||||||
StartingMessage = umsg;
|
StartingMessage = umsg;
|
||||||
NadekoBot.Client.MessageDeleted += MessageDeletedEventHandler;
|
_client.MessageDeleted += MessageDeletedEventHandler;
|
||||||
|
|
||||||
try { await StartingMessage.AddReactionAsync("🌸").ConfigureAwait(false); }
|
try { await StartingMessage.AddReactionAsync(Emote.Parse("🌸")).ConfigureAwait(false); }
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
try { await StartingMessage.AddReactionAsync("🌸").ConfigureAwait(false); }
|
try { await StartingMessage.AddReactionAsync(Emote.Parse("🌸")).ConfigureAwait(false); }
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
try { await StartingMessage.DeleteAsync().ConfigureAwait(false); }
|
try { await StartingMessage.DeleteAsync().ConfigureAwait(false); }
|
||||||
catch { return; }
|
catch { return; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
using (StartingMessage.OnReaction(async (r) =>
|
using (StartingMessage.OnReaction(_client, async (r) =>
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (r.Emoji.Name == "🌸" && r.User.IsSpecified && ((DateTime.UtcNow - r.User.Value.CreatedAt).TotalDays > 5) && _flowerReactionAwardedUsers.Add(r.User.Value.Id))
|
if (r.Emote.Name == "🌸" && r.User.IsSpecified && ((DateTime.UtcNow - r.User.Value.CreatedAt).TotalDays > 5) && _flowerReactionAwardedUsers.Add(r.User.Value.Id))
|
||||||
{
|
{
|
||||||
await CurrencyHandler.AddCurrencyAsync(r.User.Value, "Flower Reaction Event", amount, false)
|
await _ch.AddCurrencyAsync(r.User.Value, "Flower Reaction Event", amount, false)
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,13 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
private Regex fudgeRegex { get; } = new Regex(@"^(?<n1>\d+)d(?:F|f)$", RegexOptions.Compiled);
|
private Regex fudgeRegex { get; } = new Regex(@"^(?<n1>\d+)d(?:F|f)$", RegexOptions.Compiled);
|
||||||
|
|
||||||
private readonly char[] _fateRolls = { '-', ' ', '+' };
|
private readonly char[] _fateRolls = { '-', ' ', '+' };
|
||||||
|
private readonly IImagesService _images;
|
||||||
|
|
||||||
|
public DriceRollCommands(IImagesService images)
|
||||||
|
{
|
||||||
|
_images = images;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
public async Task Roll()
|
public async Task Roll()
|
||||||
@ -212,7 +219,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
|
|
||||||
if (num == 10)
|
if (num == 10)
|
||||||
{
|
{
|
||||||
var images = NadekoBot.Images.Dice;
|
var images = _images.Dice;
|
||||||
using (var imgOneStream = images[1].Value.ToStream())
|
using (var imgOneStream = images[1].Value.ToStream())
|
||||||
using (var imgZeroStream = images[0].Value.ToStream())
|
using (var imgZeroStream = images[0].Value.ToStream())
|
||||||
{
|
{
|
||||||
@ -222,7 +229,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
return new[] { imgOne, imgZero }.Merge();
|
return new[] { imgOne, imgZero }.Merge();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
using (var die = NadekoBot.Images.Dice[num].Value.ToStream())
|
using (var die = _images.Dice[num].Value.ToStream())
|
||||||
{
|
{
|
||||||
return new Image(die);
|
return new Image(die);
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,6 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
public class DrawCommands : NadekoSubmodule
|
public class DrawCommands : NadekoSubmodule
|
||||||
{
|
{
|
||||||
private static readonly ConcurrentDictionary<IGuild, Cards> _allDecks = new ConcurrentDictionary<IGuild, Cards>();
|
private static readonly ConcurrentDictionary<IGuild, Cards> _allDecks = new ConcurrentDictionary<IGuild, Cards>();
|
||||||
|
|
||||||
private const string _cardsPath = "data/images/cards";
|
private const string _cardsPath = "data/images/cards";
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
|
@ -3,6 +3,7 @@ using Discord.Commands;
|
|||||||
using NadekoBot.Attributes;
|
using NadekoBot.Attributes;
|
||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
using NadekoBot.Services;
|
using NadekoBot.Services;
|
||||||
|
using NadekoBot.Services.Database.Models;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
@ -16,13 +17,16 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
public class FlipCoinCommands : NadekoSubmodule
|
public class FlipCoinCommands : NadekoSubmodule
|
||||||
{
|
{
|
||||||
private readonly IImagesService _images;
|
private readonly IImagesService _images;
|
||||||
|
private readonly BotConfig _bc;
|
||||||
|
private readonly CurrencyHandler _ch;
|
||||||
|
|
||||||
private static NadekoRandom rng { get; } = new NadekoRandom();
|
private readonly NadekoRandom rng = new NadekoRandom();
|
||||||
|
|
||||||
public FlipCoinCommands()
|
public FlipCoinCommands(IImagesService images, CurrencyHandler ch, BotConfig bc)
|
||||||
{
|
{
|
||||||
//todo DI in the future, can't atm
|
_images = images;
|
||||||
_images = NadekoBot.Images;
|
_bc = bc;
|
||||||
|
_ch = ch;
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
@ -77,15 +81,15 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
if (guessStr != "H" && guessStr != "T" && guessStr != "HEADS" && guessStr != "TAILS")
|
if (guessStr != "H" && guessStr != "T" && guessStr != "HEADS" && guessStr != "TAILS")
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (amount < NadekoBot.BotConfig.MinimumBetAmount)
|
if (amount < _bc.MinimumBetAmount)
|
||||||
{
|
{
|
||||||
await ReplyErrorLocalized("min_bet_limit", NadekoBot.BotConfig.MinimumBetAmount + CurrencySign).ConfigureAwait(false);
|
await ReplyErrorLocalized("min_bet_limit", _bc.MinimumBetAmount + _bc.CurrencySign).ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var removed = await CurrencyHandler.RemoveCurrencyAsync(Context.User, "Betflip Gamble", amount, false).ConfigureAwait(false);
|
var removed = await _ch.RemoveCurrencyAsync(Context.User, "Betflip Gamble", amount, false).ConfigureAwait(false);
|
||||||
if (!removed)
|
if (!removed)
|
||||||
{
|
{
|
||||||
await ReplyErrorLocalized("not_enough", CurrencyPluralName).ConfigureAwait(false);
|
await ReplyErrorLocalized("not_enough", _bc.CurrencyPluralName).ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//heads = true
|
//heads = true
|
||||||
@ -108,9 +112,9 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
string str;
|
string str;
|
||||||
if (isHeads == result)
|
if (isHeads == result)
|
||||||
{
|
{
|
||||||
var toWin = (int)Math.Round(amount * NadekoBot.BotConfig.BetflipMultiplier);
|
var toWin = (int)Math.Round(amount * _bc.BetflipMultiplier);
|
||||||
str = Context.User.Mention + " " + GetText("flip_guess", toWin + CurrencySign);
|
str = Context.User.Mention + " " + GetText("flip_guess", toWin + _bc.CurrencySign);
|
||||||
await CurrencyHandler.AddCurrencyAsync(Context.User, "Betflip Gamble", toWin, false).ConfigureAwait(false);
|
await _ch.AddCurrencyAsync(Context.User, "Betflip Gamble", toWin, false).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using Discord;
|
using Discord;
|
||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
|
using Discord.WebSocket;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using NadekoBot.Attributes;
|
using NadekoBot.Attributes;
|
||||||
using NadekoBot.DataStructures;
|
using NadekoBot.DataStructures;
|
||||||
@ -19,6 +20,11 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
[Group]
|
[Group]
|
||||||
public class FlowerShop : NadekoSubmodule
|
public class FlowerShop : NadekoSubmodule
|
||||||
{
|
{
|
||||||
|
private readonly BotConfig _bc;
|
||||||
|
private readonly DbHandler _db;
|
||||||
|
private readonly CurrencyHandler _ch;
|
||||||
|
private readonly DiscordShardedClient _client;
|
||||||
|
|
||||||
public enum Role
|
public enum Role
|
||||||
{
|
{
|
||||||
Role
|
Role
|
||||||
@ -29,6 +35,14 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
List
|
List
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public FlowerShop(BotConfig bc, DbHandler db, CurrencyHandler ch, DiscordShardedClient client)
|
||||||
|
{
|
||||||
|
_db = db;
|
||||||
|
_bc = bc;
|
||||||
|
_ch = ch;
|
||||||
|
_client = client;
|
||||||
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Shop(int page = 1)
|
public async Task Shop(int page = 1)
|
||||||
@ -37,14 +51,14 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
return;
|
return;
|
||||||
page -= 1;
|
page -= 1;
|
||||||
List<ShopEntry> entries;
|
List<ShopEntry> entries;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = _db.UnitOfWork)
|
||||||
{
|
{
|
||||||
entries = new IndexedCollection<ShopEntry>(uow.GuildConfigs.For(Context.Guild.Id,
|
entries = new IndexedCollection<ShopEntry>(uow.GuildConfigs.For(Context.Guild.Id,
|
||||||
set => set.Include(x => x.ShopEntries)
|
set => set.Include(x => x.ShopEntries)
|
||||||
.ThenInclude(x => x.Items)).ShopEntries);
|
.ThenInclude(x => x.Items)).ShopEntries);
|
||||||
}
|
}
|
||||||
|
|
||||||
await Context.Channel.SendPaginatedConfirmAsync(page + 1, (curPage) =>
|
await Context.Channel.SendPaginatedConfirmAsync(_client, page + 1, (curPage) =>
|
||||||
{
|
{
|
||||||
var theseEntries = entries.Skip((curPage - 1) * 9).Take(9);
|
var theseEntries = entries.Skip((curPage - 1) * 9).Take(9);
|
||||||
|
|
||||||
@ -52,12 +66,12 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
return new EmbedBuilder().WithErrorColor()
|
return new EmbedBuilder().WithErrorColor()
|
||||||
.WithDescription(GetText("shop_none"));
|
.WithDescription(GetText("shop_none"));
|
||||||
var embed = new EmbedBuilder().WithOkColor()
|
var embed = new EmbedBuilder().WithOkColor()
|
||||||
.WithTitle(GetText("shop", CurrencySign));
|
.WithTitle(GetText("shop", _bc.CurrencySign));
|
||||||
|
|
||||||
for (int i = 0; i < entries.Count; i++)
|
for (int i = 0; i < entries.Count; i++)
|
||||||
{
|
{
|
||||||
var entry = entries[i];
|
var entry = entries[i];
|
||||||
embed.AddField(efb => efb.WithName($"#{i + 1} - {entry.Price}{CurrencySign}").WithValue(EntryToString(entry)).WithIsInline(true));
|
embed.AddField(efb => efb.WithName($"#{i + 1} - {entry.Price}{_bc.CurrencySign}").WithValue(EntryToString(entry)).WithIsInline(true));
|
||||||
}
|
}
|
||||||
return embed;
|
return embed;
|
||||||
}, entries.Count / 9, true);
|
}, entries.Count / 9, true);
|
||||||
@ -71,7 +85,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
if (index < 0)
|
if (index < 0)
|
||||||
return;
|
return;
|
||||||
ShopEntry entry;
|
ShopEntry entry;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = _db.UnitOfWork)
|
||||||
{
|
{
|
||||||
var config = uow.GuildConfigs.For(Context.Guild.Id, set => set
|
var config = uow.GuildConfigs.For(Context.Guild.Id, set => set
|
||||||
.Include(x => x.ShopEntries)
|
.Include(x => x.ShopEntries)
|
||||||
@ -98,7 +112,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (await CurrencyHandler.RemoveCurrencyAsync(Context.User.Id, $"Shop purchase - {entry.Type}", entry.Price))
|
if (await _ch.RemoveCurrencyAsync(Context.User.Id, $"Shop purchase - {entry.Type}", entry.Price))
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -107,17 +121,17 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_log.Warn(ex);
|
_log.Warn(ex);
|
||||||
await CurrencyHandler.AddCurrencyAsync(Context.User.Id, $"Shop error refund", entry.Price);
|
await _ch.AddCurrencyAsync(Context.User.Id, $"Shop error refund", entry.Price);
|
||||||
await ReplyErrorLocalized("shop_role_purchase_error").ConfigureAwait(false);
|
await ReplyErrorLocalized("shop_role_purchase_error").ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await CurrencyHandler.AddCurrencyAsync(entry.AuthorId, $"Shop sell item - {entry.Type}", GetProfitAmount(entry.Price));
|
await _ch.AddCurrencyAsync(entry.AuthorId, $"Shop sell item - {entry.Type}", GetProfitAmount(entry.Price));
|
||||||
await ReplyConfirmLocalized("shop_role_purchase", Format.Bold(role.Name)).ConfigureAwait(false);
|
await ReplyConfirmLocalized("shop_role_purchase", Format.Bold(role.Name)).ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
await ReplyErrorLocalized("not_enough", CurrencySign).ConfigureAwait(false);
|
await ReplyErrorLocalized("not_enough", _bc.CurrencySign).ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -131,10 +145,10 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
|
|
||||||
var item = entry.Items.ToArray()[new NadekoRandom().Next(0, entry.Items.Count)];
|
var item = entry.Items.ToArray()[new NadekoRandom().Next(0, entry.Items.Count)];
|
||||||
|
|
||||||
if (await CurrencyHandler.RemoveCurrencyAsync(Context.User.Id, $"Shop purchase - {entry.Type}", entry.Price))
|
if (await _ch.RemoveCurrencyAsync(Context.User.Id, $"Shop purchase - {entry.Type}", entry.Price))
|
||||||
{
|
{
|
||||||
int removed;
|
int removed;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = _db.UnitOfWork)
|
||||||
{
|
{
|
||||||
var x = uow._context.Set<ShopEntryItem>().Remove(item);
|
var x = uow._context.Set<ShopEntryItem>().Remove(item);
|
||||||
|
|
||||||
@ -150,18 +164,18 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
.AddField(efb => efb.WithName(GetText("name")).WithValue(entry.Name).WithIsInline(true)))
|
.AddField(efb => efb.WithName(GetText("name")).WithValue(entry.Name).WithIsInline(true)))
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
|
|
||||||
await CurrencyHandler.AddCurrencyAsync(entry.AuthorId,
|
await _ch.AddCurrencyAsync(entry.AuthorId,
|
||||||
$"Shop sell item - {entry.Name}",
|
$"Shop sell item - {entry.Name}",
|
||||||
GetProfitAmount(entry.Price)).ConfigureAwait(false);
|
GetProfitAmount(entry.Price)).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = _db.UnitOfWork)
|
||||||
{
|
{
|
||||||
uow._context.Set<ShopEntryItem>().Add(item);
|
uow._context.Set<ShopEntryItem>().Add(item);
|
||||||
uow.Complete();
|
uow.Complete();
|
||||||
|
|
||||||
await CurrencyHandler.AddCurrencyAsync(Context.User.Id,
|
await _ch.AddCurrencyAsync(Context.User.Id,
|
||||||
$"Shop error refund - {entry.Name}",
|
$"Shop error refund - {entry.Name}",
|
||||||
entry.Price,
|
entry.Price,
|
||||||
uow).ConfigureAwait(false);
|
uow).ConfigureAwait(false);
|
||||||
@ -173,7 +187,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
await ReplyErrorLocalized("not_enough", CurrencySign).ConfigureAwait(false);
|
await ReplyErrorLocalized("not_enough", _bc.CurrencySign).ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -198,7 +212,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
RoleId = role.Id,
|
RoleId = role.Id,
|
||||||
RoleName = role.Name
|
RoleName = role.Name
|
||||||
};
|
};
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = _db.UnitOfWork)
|
||||||
{
|
{
|
||||||
var entries = new IndexedCollection<ShopEntry>(uow.GuildConfigs.For(Context.Guild.Id,
|
var entries = new IndexedCollection<ShopEntry>(uow.GuildConfigs.For(Context.Guild.Id,
|
||||||
set => set.Include(x => x.ShopEntries)
|
set => set.Include(x => x.ShopEntries)
|
||||||
@ -226,7 +240,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
AuthorId = Context.User.Id,
|
AuthorId = Context.User.Id,
|
||||||
Items = new HashSet<ShopEntryItem>(),
|
Items = new HashSet<ShopEntryItem>(),
|
||||||
};
|
};
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = _db.UnitOfWork)
|
||||||
{
|
{
|
||||||
var entries = new IndexedCollection<ShopEntry>(uow.GuildConfigs.For(Context.Guild.Id,
|
var entries = new IndexedCollection<ShopEntry>(uow.GuildConfigs.For(Context.Guild.Id,
|
||||||
set => set.Include(x => x.ShopEntries)
|
set => set.Include(x => x.ShopEntries)
|
||||||
@ -256,7 +270,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
ShopEntry entry;
|
ShopEntry entry;
|
||||||
bool rightType = false;
|
bool rightType = false;
|
||||||
bool added = false;
|
bool added = false;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = _db.UnitOfWork)
|
||||||
{
|
{
|
||||||
var entries = new IndexedCollection<ShopEntry>(uow.GuildConfigs.For(Context.Guild.Id,
|
var entries = new IndexedCollection<ShopEntry>(uow.GuildConfigs.For(Context.Guild.Id,
|
||||||
set => set.Include(x => x.ShopEntries)
|
set => set.Include(x => x.ShopEntries)
|
||||||
@ -289,7 +303,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
if (index < 0)
|
if (index < 0)
|
||||||
return;
|
return;
|
||||||
ShopEntry removed;
|
ShopEntry removed;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = _db.UnitOfWork)
|
||||||
{
|
{
|
||||||
var config = uow.GuildConfigs.For(Context.Guild.Id, set => set
|
var config = uow.GuildConfigs.For(Context.Guild.Id, set => set
|
||||||
.Include(x => x.ShopEntries)
|
.Include(x => x.ShopEntries)
|
||||||
|
@ -4,6 +4,7 @@ using ImageSharp;
|
|||||||
using NadekoBot.Attributes;
|
using NadekoBot.Attributes;
|
||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
using NadekoBot.Services;
|
using NadekoBot.Services;
|
||||||
|
using NadekoBot.Services.Database.Models;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@ -21,6 +22,9 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
private static int _totalBet;
|
private static int _totalBet;
|
||||||
private static int _totalPaidOut;
|
private static int _totalPaidOut;
|
||||||
|
|
||||||
|
private static readonly HashSet<ulong> _runningUsers = new HashSet<ulong>();
|
||||||
|
private readonly BotConfig _bc;
|
||||||
|
|
||||||
private const int _alphaCutOut = byte.MaxValue / 3;
|
private const int _alphaCutOut = byte.MaxValue / 3;
|
||||||
|
|
||||||
//here is a payout chart
|
//here is a payout chart
|
||||||
@ -28,10 +32,13 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
//thanks to judge for helping me with this
|
//thanks to judge for helping me with this
|
||||||
|
|
||||||
private readonly IImagesService _images;
|
private readonly IImagesService _images;
|
||||||
|
private readonly CurrencyHandler _ch;
|
||||||
|
|
||||||
public Slots()
|
public Slots(IImagesService images, BotConfig bc, CurrencyHandler ch)
|
||||||
{
|
{
|
||||||
_images = NadekoBot.Images;
|
_images = images;
|
||||||
|
_bc = bc;
|
||||||
|
_ch = ch;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SlotMachine
|
public class SlotMachine
|
||||||
@ -130,8 +137,6 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
footer: $"Total Bet: {tests * bet} | Payout: {payout * bet} | {payout * 1.0f / tests * 100}%");
|
footer: $"Total Bet: {tests * bet} | Payout: {payout * bet} | {payout * 1.0f / tests * 100}%");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static readonly HashSet<ulong> _runningUsers = new HashSet<ulong>();
|
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
public async Task Slot(int amount = 0)
|
public async Task Slot(int amount = 0)
|
||||||
{
|
{
|
||||||
@ -141,24 +146,24 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
{
|
{
|
||||||
if (amount < 1)
|
if (amount < 1)
|
||||||
{
|
{
|
||||||
await ReplyErrorLocalized("min_bet_limit", 1 + CurrencySign).ConfigureAwait(false);
|
await ReplyErrorLocalized("min_bet_limit", 1 + _bc.CurrencySign).ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const int maxAmount = 9999;
|
const int maxAmount = 9999;
|
||||||
if (amount > maxAmount)
|
if (amount > maxAmount)
|
||||||
{
|
{
|
||||||
GetText("slot_maxbet", maxAmount + CurrencySign);
|
GetText("slot_maxbet", maxAmount + _bc.CurrencySign);
|
||||||
await ReplyErrorLocalized("max_bet_limit", maxAmount + CurrencySign).ConfigureAwait(false);
|
await ReplyErrorLocalized("max_bet_limit", maxAmount + _bc.CurrencySign).ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!await CurrencyHandler.RemoveCurrencyAsync(Context.User, "Slot Machine", amount, false))
|
if (!await _ch.RemoveCurrencyAsync(Context.User, "Slot Machine", amount, false))
|
||||||
{
|
{
|
||||||
await ReplyErrorLocalized("not_enough", CurrencySign).ConfigureAwait(false);
|
await ReplyErrorLocalized("not_enough", _bc.CurrencySign).ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Interlocked.Add(ref _totalBet, amount);
|
Interlocked.Add(ref _totalBet, amount);
|
||||||
using (var bgFileStream = NadekoBot.Images.SlotBackground.ToStream())
|
using (var bgFileStream = _images.SlotBackground.ToStream())
|
||||||
{
|
{
|
||||||
var bgImage = new ImageSharp.Image(bgFileStream);
|
var bgImage = new ImageSharp.Image(bgFileStream);
|
||||||
|
|
||||||
@ -180,7 +185,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
var digit = printWon % 10;
|
var digit = printWon % 10;
|
||||||
using (var fs = NadekoBot.Images.SlotNumbers[digit].ToStream())
|
using (var fs = _images.SlotNumbers[digit].ToStream())
|
||||||
using (var img = new ImageSharp.Image(fs))
|
using (var img = new ImageSharp.Image(fs))
|
||||||
{
|
{
|
||||||
bgImage.DrawImage(img, 100, default(Size), new Point(230 - n * 16, 462));
|
bgImage.DrawImage(img, 100, default(Size), new Point(230 - n * 16, 462));
|
||||||
@ -204,19 +209,19 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
var msg = GetText("better_luck");
|
var msg = GetText("better_luck");
|
||||||
if (result.Multiplier != 0)
|
if (result.Multiplier != 0)
|
||||||
{
|
{
|
||||||
await CurrencyHandler.AddCurrencyAsync(Context.User, $"Slot Machine x{result.Multiplier}", amount * result.Multiplier, false);
|
await _ch.AddCurrencyAsync(Context.User, $"Slot Machine x{result.Multiplier}", amount * result.Multiplier, false);
|
||||||
Interlocked.Add(ref _totalPaidOut, amount * result.Multiplier);
|
Interlocked.Add(ref _totalPaidOut, amount * result.Multiplier);
|
||||||
if (result.Multiplier == 1)
|
if (result.Multiplier == 1)
|
||||||
msg = GetText("slot_single", CurrencySign, 1);
|
msg = GetText("slot_single", _bc.CurrencySign, 1);
|
||||||
else if (result.Multiplier == 4)
|
else if (result.Multiplier == 4)
|
||||||
msg = GetText("slot_two", CurrencySign, 4);
|
msg = GetText("slot_two", _bc.CurrencySign, 4);
|
||||||
else if (result.Multiplier == 10)
|
else if (result.Multiplier == 10)
|
||||||
msg = GetText("slot_three", 10);
|
msg = GetText("slot_three", 10);
|
||||||
else if (result.Multiplier == 30)
|
else if (result.Multiplier == 30)
|
||||||
msg = GetText("slot_jackpot", 30);
|
msg = GetText("slot_jackpot", 30);
|
||||||
}
|
}
|
||||||
|
|
||||||
await Context.Channel.SendFileAsync(bgImage.ToStream(), "result.png", Context.User.Mention + " " + msg + $"\n`{GetText("slot_bet")}:`{amount} `{GetText("slot_won")}:` {amount * result.Multiplier}{NadekoBot.BotConfig.CurrencySign}").ConfigureAwait(false);
|
await Context.Channel.SendFileAsync(bgImage.ToStream(), "result.png", Context.User.Mention + " " + msg + $"\n`{GetText("slot_bet")}:`{amount} `{GetText("slot_won")}:` {amount * result.Multiplier}{_bc.CurrencySign}").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
@ -57,13 +57,20 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
InsufficientAmount
|
InsufficientAmount
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public WaifuClaimCommands(BotConfig bc, CurrencyHandler ch, DbHandler db)
|
||||||
|
{
|
||||||
|
_bc = bc;
|
||||||
|
_ch = ch;
|
||||||
|
_db = db;
|
||||||
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task WaifuClaim(int amount, [Remainder]IUser target)
|
public async Task WaifuClaim(int amount, [Remainder]IUser target)
|
||||||
{
|
{
|
||||||
if (amount < 50)
|
if (amount < 50)
|
||||||
{
|
{
|
||||||
await ReplyErrorLocalized("waifu_isnt_cheap", 50 + CurrencySign).ConfigureAwait(false);
|
await ReplyErrorLocalized("waifu_isnt_cheap", 50 + _bc.CurrencySign).ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,7 +83,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
WaifuClaimResult result;
|
WaifuClaimResult result;
|
||||||
WaifuInfo w;
|
WaifuInfo w;
|
||||||
bool isAffinity;
|
bool isAffinity;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = _db.UnitOfWork)
|
||||||
{
|
{
|
||||||
w = uow.Waifus.ByWaifuUserId(target.Id);
|
w = uow.Waifus.ByWaifuUserId(target.Id);
|
||||||
isAffinity = (w?.Affinity?.UserId == Context.User.Id);
|
isAffinity = (w?.Affinity?.UserId == Context.User.Id);
|
||||||
@ -84,7 +91,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
{
|
{
|
||||||
var claimer = uow.DiscordUsers.GetOrCreate(Context.User);
|
var claimer = uow.DiscordUsers.GetOrCreate(Context.User);
|
||||||
var waifu = uow.DiscordUsers.GetOrCreate(target);
|
var waifu = uow.DiscordUsers.GetOrCreate(target);
|
||||||
if (!await CurrencyHandler.RemoveCurrencyAsync(Context.User.Id, "Claimed Waifu", amount, uow).ConfigureAwait(false))
|
if (!await _ch.RemoveCurrencyAsync(Context.User.Id, "Claimed Waifu", amount, uow).ConfigureAwait(false))
|
||||||
{
|
{
|
||||||
result = WaifuClaimResult.NotEnoughFunds;
|
result = WaifuClaimResult.NotEnoughFunds;
|
||||||
}
|
}
|
||||||
@ -109,7 +116,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
}
|
}
|
||||||
else if (isAffinity && amount > w.Price * 0.88f)
|
else if (isAffinity && amount > w.Price * 0.88f)
|
||||||
{
|
{
|
||||||
if (!await CurrencyHandler.RemoveCurrencyAsync(Context.User.Id, "Claimed Waifu", amount, uow).ConfigureAwait(false))
|
if (!await _ch.RemoveCurrencyAsync(Context.User.Id, "Claimed Waifu", amount, uow).ConfigureAwait(false))
|
||||||
{
|
{
|
||||||
result = WaifuClaimResult.NotEnoughFunds;
|
result = WaifuClaimResult.NotEnoughFunds;
|
||||||
}
|
}
|
||||||
@ -131,7 +138,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
}
|
}
|
||||||
else if (amount >= w.Price * 1.1f) // if no affinity
|
else if (amount >= w.Price * 1.1f) // if no affinity
|
||||||
{
|
{
|
||||||
if (!await CurrencyHandler.RemoveCurrencyAsync(Context.User.Id, "Claimed Waifu", amount, uow).ConfigureAwait(false))
|
if (!await _ch.RemoveCurrencyAsync(Context.User.Id, "Claimed Waifu", amount, uow).ConfigureAwait(false))
|
||||||
{
|
{
|
||||||
result = WaifuClaimResult.NotEnoughFunds;
|
result = WaifuClaimResult.NotEnoughFunds;
|
||||||
}
|
}
|
||||||
@ -165,14 +172,14 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
}
|
}
|
||||||
if (result == WaifuClaimResult.NotEnoughFunds)
|
if (result == WaifuClaimResult.NotEnoughFunds)
|
||||||
{
|
{
|
||||||
await ReplyErrorLocalized("not_enough", CurrencySign).ConfigureAwait(false);
|
await ReplyErrorLocalized("not_enough", _bc.CurrencySign).ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var msg = GetText("waifu_claimed",
|
var msg = GetText("waifu_claimed",
|
||||||
Format.Bold(target.ToString()),
|
Format.Bold(target.ToString()),
|
||||||
amount + CurrencySign);
|
amount + _bc.CurrencySign);
|
||||||
if (w.Affinity?.UserId == Context.User.Id)
|
if (w.Affinity?.UserId == Context.User.Id)
|
||||||
msg += "\n" + GetText("waifu_fulfilled", target, w.Price + CurrencySign);
|
msg += "\n" + GetText("waifu_fulfilled", target, w.Price + _bc.CurrencySign);
|
||||||
else
|
else
|
||||||
msg = " " + msg;
|
msg = " " + msg;
|
||||||
await Context.Channel.SendConfirmAsync(Context.User.Mention + msg).ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync(Context.User.Mention + msg).ConfigureAwait(false);
|
||||||
@ -205,7 +212,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
var difference = TimeSpan.Zero;
|
var difference = TimeSpan.Zero;
|
||||||
var amount = 0;
|
var amount = 0;
|
||||||
WaifuInfo w = null;
|
WaifuInfo w = null;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = _db.UnitOfWork)
|
||||||
{
|
{
|
||||||
w = uow.Waifus.ByWaifuUserId(targetId);
|
w = uow.Waifus.ByWaifuUserId(targetId);
|
||||||
var now = DateTime.UtcNow;
|
var now = DateTime.UtcNow;
|
||||||
@ -223,13 +230,13 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
|
|
||||||
if (w.Affinity?.UserId == Context.User.Id)
|
if (w.Affinity?.UserId == Context.User.Id)
|
||||||
{
|
{
|
||||||
await CurrencyHandler.AddCurrencyAsync(w.Waifu.UserId, "Waifu Compensation", amount, uow).ConfigureAwait(false);
|
await _ch.AddCurrencyAsync(w.Waifu.UserId, "Waifu Compensation", amount, uow).ConfigureAwait(false);
|
||||||
w.Price = (int)Math.Floor(w.Price * 0.75f);
|
w.Price = (int)Math.Floor(w.Price * 0.75f);
|
||||||
result = DivorceResult.SucessWithPenalty;
|
result = DivorceResult.SucessWithPenalty;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
await CurrencyHandler.AddCurrencyAsync(Context.User.Id, "Waifu Refund", amount, uow).ConfigureAwait(false);
|
await _ch.AddCurrencyAsync(Context.User.Id, "Waifu Refund", amount, uow).ConfigureAwait(false);
|
||||||
|
|
||||||
result = DivorceResult.Success;
|
result = DivorceResult.Success;
|
||||||
}
|
}
|
||||||
@ -250,11 +257,11 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
|
|
||||||
if (result == DivorceResult.SucessWithPenalty)
|
if (result == DivorceResult.SucessWithPenalty)
|
||||||
{
|
{
|
||||||
await ReplyConfirmLocalized("waifu_divorced_like", Format.Bold(w.Waifu.ToString()), amount + CurrencySign).ConfigureAwait(false);
|
await ReplyConfirmLocalized("waifu_divorced_like", Format.Bold(w.Waifu.ToString()), amount + _bc.CurrencySign).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
else if (result == DivorceResult.Success)
|
else if (result == DivorceResult.Success)
|
||||||
{
|
{
|
||||||
await ReplyConfirmLocalized("waifu_divorced_notlike", amount + CurrencySign).ConfigureAwait(false);
|
await ReplyConfirmLocalized("waifu_divorced_notlike", amount + _bc.CurrencySign).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
else if (result == DivorceResult.NotYourWife)
|
else if (result == DivorceResult.NotYourWife)
|
||||||
{
|
{
|
||||||
@ -270,6 +277,10 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static readonly TimeSpan _affinityLimit = TimeSpan.FromMinutes(30);
|
private static readonly TimeSpan _affinityLimit = TimeSpan.FromMinutes(30);
|
||||||
|
private readonly BotConfig _bc;
|
||||||
|
private readonly CurrencyHandler _ch;
|
||||||
|
private readonly DbHandler _db;
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task WaifuClaimerAffinity([Remainder]IGuildUser u = null)
|
public async Task WaifuClaimerAffinity([Remainder]IGuildUser u = null)
|
||||||
@ -283,7 +294,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
var sucess = false;
|
var sucess = false;
|
||||||
var cooldown = false;
|
var cooldown = false;
|
||||||
var difference = TimeSpan.Zero;
|
var difference = TimeSpan.Zero;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = _db.UnitOfWork)
|
||||||
{
|
{
|
||||||
var w = uow.Waifus.ByWaifuUserId(Context.User.Id);
|
var w = uow.Waifus.ByWaifuUserId(Context.User.Id);
|
||||||
var newAff = u == null ? null : uow.DiscordUsers.GetOrCreate(u);
|
var newAff = u == null ? null : uow.DiscordUsers.GetOrCreate(u);
|
||||||
@ -369,7 +380,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
public async Task WaifuLeaderboard()
|
public async Task WaifuLeaderboard()
|
||||||
{
|
{
|
||||||
IList<WaifuInfo> waifus;
|
IList<WaifuInfo> waifus;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = _db.UnitOfWork)
|
||||||
{
|
{
|
||||||
waifus = uow.Waifus.GetTop(9);
|
waifus = uow.Waifus.GetTop(9);
|
||||||
}
|
}
|
||||||
@ -389,7 +400,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
var w = waifus[i];
|
var w = waifus[i];
|
||||||
|
|
||||||
var j = i;
|
var j = i;
|
||||||
embed.AddField(efb => efb.WithName("#" + (j + 1) + " - " + w.Price + NadekoBot.BotConfig.CurrencySign).WithValue(w.ToString()).WithIsInline(false));
|
embed.AddField(efb => efb.WithName("#" + (j + 1) + " - " + w.Price + _bc.CurrencySign).WithValue(w.ToString()).WithIsInline(false));
|
||||||
}
|
}
|
||||||
|
|
||||||
await Context.Channel.EmbedAsync(embed).ConfigureAwait(false);
|
await Context.Channel.EmbedAsync(embed).ConfigureAwait(false);
|
||||||
@ -404,7 +415,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
WaifuInfo w;
|
WaifuInfo w;
|
||||||
IList<WaifuInfo> claims;
|
IList<WaifuInfo> claims;
|
||||||
int divorces;
|
int divorces;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = _db.UnitOfWork)
|
||||||
{
|
{
|
||||||
w = uow.Waifus.ByWaifuUserId(target.Id);
|
w = uow.Waifus.ByWaifuUserId(target.Id);
|
||||||
claims = uow.Waifus.ByClaimerUserId(target.Id);
|
claims = uow.Waifus.ByClaimerUserId(target.Id);
|
||||||
@ -460,10 +471,10 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static WaifuProfileTitle GetClaimTitle(ulong userId)
|
private WaifuProfileTitle GetClaimTitle(ulong userId)
|
||||||
{
|
{
|
||||||
int count;
|
int count;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = _db.UnitOfWork)
|
||||||
{
|
{
|
||||||
count = uow.Waifus.ByClaimerUserId(userId).Count;
|
count = uow.Waifus.ByClaimerUserId(userId).Count;
|
||||||
}
|
}
|
||||||
@ -497,10 +508,10 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
return new WaifuProfileTitle(count, title.ToString().Replace('_', ' '));
|
return new WaifuProfileTitle(count, title.ToString().Replace('_', ' '));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static WaifuProfileTitle GetAffinityTitle(ulong userId)
|
private WaifuProfileTitle GetAffinityTitle(ulong userId)
|
||||||
{
|
{
|
||||||
int count;
|
int count;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = _db.UnitOfWork)
|
||||||
{
|
{
|
||||||
count = uow._context.WaifuUpdates
|
count = uow._context.WaifuUpdates
|
||||||
.Where(w => w.User.UserId == userId && w.UpdateType == WaifuUpdateType.AffinityChanged && w.New != null)
|
.Where(w => w.User.UserId == userId && w.UpdateType == WaifuUpdateType.AffinityChanged && w.New != null)
|
||||||
|
@ -11,23 +11,26 @@ using System.Collections.Generic;
|
|||||||
|
|
||||||
namespace NadekoBot.Modules.Gambling
|
namespace NadekoBot.Modules.Gambling
|
||||||
{
|
{
|
||||||
[NadekoModule("Gambling", "$")]
|
|
||||||
public partial class Gambling : NadekoTopLevelModule
|
public partial class Gambling : NadekoTopLevelModule
|
||||||
{
|
{
|
||||||
public static string CurrencyName { get; set; }
|
private readonly BotConfig _bc;
|
||||||
public static string CurrencyPluralName { get; set; }
|
private readonly DbHandler _db;
|
||||||
public static string CurrencySign { get; set; }
|
private readonly CurrencyHandler _currency;
|
||||||
|
|
||||||
static Gambling()
|
private string CurrencyName => _bc.CurrencyName;
|
||||||
|
private string CurrencyPluralName => _bc.CurrencyPluralName;
|
||||||
|
private string CurrencySign => _bc.CurrencySign;
|
||||||
|
|
||||||
|
public Gambling(BotConfig bc, DbHandler db, CurrencyHandler currency)
|
||||||
{
|
{
|
||||||
CurrencyName = NadekoBot.BotConfig.CurrencyName;
|
_bc = bc;
|
||||||
CurrencyPluralName = NadekoBot.BotConfig.CurrencyPluralName;
|
_db = db;
|
||||||
CurrencySign = NadekoBot.BotConfig.CurrencySign;
|
_currency = currency;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static long GetCurrency(ulong id)
|
public long GetCurrency(ulong id)
|
||||||
{
|
{
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = _db.UnitOfWork)
|
||||||
{
|
{
|
||||||
return uow.Currency.GetUserCurrency(id);
|
return uow.Currency.GetUserCurrency(id);
|
||||||
}
|
}
|
||||||
@ -69,13 +72,13 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
{
|
{
|
||||||
if (amount <= 0 || Context.User.Id == receiver.Id)
|
if (amount <= 0 || Context.User.Id == receiver.Id)
|
||||||
return;
|
return;
|
||||||
var success = await CurrencyHandler.RemoveCurrencyAsync((IGuildUser)Context.User, $"Gift to {receiver.Username} ({receiver.Id}).", amount, false).ConfigureAwait(false);
|
var success = await _currency.RemoveCurrencyAsync((IGuildUser)Context.User, $"Gift to {receiver.Username} ({receiver.Id}).", amount, false).ConfigureAwait(false);
|
||||||
if (!success)
|
if (!success)
|
||||||
{
|
{
|
||||||
await ReplyErrorLocalized("not_enough", CurrencyPluralName).ConfigureAwait(false);
|
await ReplyErrorLocalized("not_enough", CurrencyPluralName).ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await CurrencyHandler.AddCurrencyAsync(receiver, $"Gift from {Context.User.Username} ({Context.User.Id}).", amount, true).ConfigureAwait(false);
|
await _currency.AddCurrencyAsync(receiver, $"Gift from {Context.User.Username} ({Context.User.Id}).", amount, true).ConfigureAwait(false);
|
||||||
await ReplyConfirmLocalized("gifted", amount + CurrencySign, Format.Bold(receiver.ToString()))
|
await ReplyConfirmLocalized("gifted", amount + CurrencySign, Format.Bold(receiver.ToString()))
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
@ -95,7 +98,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
if (amount <= 0)
|
if (amount <= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
await CurrencyHandler.AddCurrencyAsync(usrId, $"Awarded by bot owner. ({Context.User.Username}/{Context.User.Id})", amount).ConfigureAwait(false);
|
await _currency.AddCurrencyAsync(usrId, $"Awarded by bot owner. ({Context.User.Username}/{Context.User.Id})", amount).ConfigureAwait(false);
|
||||||
await ReplyConfirmLocalized("awarded", amount + CurrencySign, $"<@{usrId}>").ConfigureAwait(false);
|
await ReplyConfirmLocalized("awarded", amount + CurrencySign, $"<@{usrId}>").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,7 +111,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
var users = (await Context.Guild.GetUsersAsync())
|
var users = (await Context.Guild.GetUsersAsync())
|
||||||
.Where(u => u.GetRoles().Contains(role))
|
.Where(u => u.GetRoles().Contains(role))
|
||||||
.ToList();
|
.ToList();
|
||||||
await Task.WhenAll(users.Select(u => CurrencyHandler.AddCurrencyAsync(u.Id,
|
await Task.WhenAll(users.Select(u => _currency.AddCurrencyAsync(u.Id,
|
||||||
$"Awarded by bot owner to **{role.Name}** role. ({Context.User.Username}/{Context.User.Id})",
|
$"Awarded by bot owner to **{role.Name}** role. ({Context.User.Username}/{Context.User.Id})",
|
||||||
amount)))
|
amount)))
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
@ -127,7 +130,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
if (amount <= 0)
|
if (amount <= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (await CurrencyHandler.RemoveCurrencyAsync(user, $"Taken by bot owner.({Context.User.Username}/{Context.User.Id})", amount, true).ConfigureAwait(false))
|
if (await _currency.RemoveCurrencyAsync(user, $"Taken by bot owner.({Context.User.Username}/{Context.User.Id})", amount, true).ConfigureAwait(false))
|
||||||
await ReplyConfirmLocalized("take", amount+CurrencySign, Format.Bold(user.ToString())).ConfigureAwait(false);
|
await ReplyConfirmLocalized("take", amount+CurrencySign, Format.Bold(user.ToString())).ConfigureAwait(false);
|
||||||
else
|
else
|
||||||
await ReplyErrorLocalized("take_fail", amount + CurrencySign, Format.Bold(user.ToString()), CurrencyPluralName).ConfigureAwait(false);
|
await ReplyErrorLocalized("take_fail", amount + CurrencySign, Format.Bold(user.ToString()), CurrencyPluralName).ConfigureAwait(false);
|
||||||
@ -141,7 +144,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
if (amount <= 0)
|
if (amount <= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (await CurrencyHandler.RemoveCurrencyAsync(usrId, $"Taken by bot owner.({Context.User.Username}/{Context.User.Id})", amount).ConfigureAwait(false))
|
if (await _currency.RemoveCurrencyAsync(usrId, $"Taken by bot owner.({Context.User.Username}/{Context.User.Id})", amount).ConfigureAwait(false))
|
||||||
await ReplyConfirmLocalized("take", amount + CurrencySign, $"<@{usrId}>").ConfigureAwait(false);
|
await ReplyConfirmLocalized("take", amount + CurrencySign, $"<@{usrId}>").ConfigureAwait(false);
|
||||||
else
|
else
|
||||||
await ReplyErrorLocalized("take_fail", amount + CurrencySign, Format.Code(usrId.ToString()), CurrencyPluralName).ConfigureAwait(false);
|
await ReplyErrorLocalized("take_fail", amount + CurrencySign, Format.Code(usrId.ToString()), CurrencyPluralName).ConfigureAwait(false);
|
||||||
@ -208,7 +211,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
if (amount < 1)
|
if (amount < 1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!await CurrencyHandler.RemoveCurrencyAsync(Context.User, "Betroll Gamble", amount, false).ConfigureAwait(false))
|
if (!await _currency.RemoveCurrencyAsync(Context.User, "Betroll Gamble", amount, false).ConfigureAwait(false))
|
||||||
{
|
{
|
||||||
await ReplyErrorLocalized("not_enough", CurrencyPluralName).ConfigureAwait(false);
|
await ReplyErrorLocalized("not_enough", CurrencyPluralName).ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
@ -224,21 +227,21 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
{
|
{
|
||||||
if (rnd < 91)
|
if (rnd < 91)
|
||||||
{
|
{
|
||||||
str += GetText("br_win", (amount * NadekoBot.BotConfig.Betroll67Multiplier) + CurrencySign, 66);
|
str += GetText("br_win", (amount * _bc.Betroll67Multiplier) + CurrencySign, 66);
|
||||||
await CurrencyHandler.AddCurrencyAsync(Context.User, "Betroll Gamble",
|
await _currency.AddCurrencyAsync(Context.User, "Betroll Gamble",
|
||||||
(int) (amount * NadekoBot.BotConfig.Betroll67Multiplier), false).ConfigureAwait(false);
|
(int) (amount * _bc.Betroll67Multiplier), false).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
else if (rnd < 100)
|
else if (rnd < 100)
|
||||||
{
|
{
|
||||||
str += GetText("br_win", (amount * NadekoBot.BotConfig.Betroll91Multiplier) + CurrencySign, 90);
|
str += GetText("br_win", (amount * _bc.Betroll91Multiplier) + CurrencySign, 90);
|
||||||
await CurrencyHandler.AddCurrencyAsync(Context.User, "Betroll Gamble",
|
await _currency.AddCurrencyAsync(Context.User, "Betroll Gamble",
|
||||||
(int) (amount * NadekoBot.BotConfig.Betroll91Multiplier), false).ConfigureAwait(false);
|
(int) (amount * _bc.Betroll91Multiplier), false).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
str += GetText("br_win", (amount * NadekoBot.BotConfig.Betroll100Multiplier) + CurrencySign, 100) + " 👑";
|
str += GetText("br_win", (amount * _bc.Betroll100Multiplier) + CurrencySign, 100) + " 👑";
|
||||||
await CurrencyHandler.AddCurrencyAsync(Context.User, "Betroll Gamble",
|
await _currency.AddCurrencyAsync(Context.User, "Betroll Gamble",
|
||||||
(int) (amount * NadekoBot.BotConfig.Betroll100Multiplier), false).ConfigureAwait(false);
|
(int) (amount * _bc.Betroll100Multiplier), false).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await Context.Channel.SendConfirmAsync(str).ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync(str).ConfigureAwait(false);
|
||||||
@ -251,14 +254,14 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
List<Currency> richest;
|
List<Currency> richest;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = _db.UnitOfWork)
|
||||||
{
|
{
|
||||||
richest = uow.Currency.GetTopRichest(9, 9 * (page - 1)).ToList();
|
richest = uow.Currency.GetTopRichest(9, 9 * (page - 1)).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
var embed = new EmbedBuilder()
|
var embed = new EmbedBuilder()
|
||||||
.WithOkColor()
|
.WithOkColor()
|
||||||
.WithTitle(NadekoBot.BotConfig.CurrencySign +
|
.WithTitle(CurrencySign +
|
||||||
" " + GetText("leaderboard"))
|
" " + GetText("leaderboard"))
|
||||||
.WithFooter(efb => efb.WithText(GetText("page", page)));
|
.WithFooter(efb => efb.WithText(GetText("page", page)));
|
||||||
|
|
||||||
@ -279,7 +282,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
|
|
||||||
var j = i;
|
var j = i;
|
||||||
embed.AddField(efb => efb.WithName("#" + (9 * (page - 1) + j + 1) + " " + usrStr)
|
embed.AddField(efb => efb.WithName("#" + (9 * (page - 1) + j + 1) + " " + usrStr)
|
||||||
.WithValue(x.Amount.ToString() + " " + NadekoBot.BotConfig.CurrencySign)
|
.WithValue(x.Amount.ToString() + " " + CurrencySign)
|
||||||
.WithIsInline(true));
|
.WithIsInline(true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,25 +30,27 @@
|
|||||||
<Compile Remove="data\**\*;credentials.json;credentials_example.json" />
|
<Compile Remove="data\**\*;credentials.json;credentials_example.json" />
|
||||||
<Compile Remove="Modules\Administration\**" />
|
<Compile Remove="Modules\Administration\**" />
|
||||||
<Compile Remove="Modules\CustomReactions\**" />
|
<Compile Remove="Modules\CustomReactions\**" />
|
||||||
<Compile Remove="Modules\Gambling\**" />
|
|
||||||
<Compile Remove="Modules\Games\**" />
|
<Compile Remove="Modules\Games\**" />
|
||||||
<Compile Remove="Modules\NSFW\**" />
|
<Compile Remove="Modules\NSFW\**" />
|
||||||
<Compile Remove="Modules\Permissions\**" />
|
<Compile Remove="Modules\Permissions\**" />
|
||||||
<Compile Remove="Modules\Searches\**" />
|
<Compile Remove="Modules\Searches\**" />
|
||||||
|
<Compile Remove="Services\CustomReactions\**" />
|
||||||
<EmbeddedResource Remove="Modules\Administration\**" />
|
<EmbeddedResource Remove="Modules\Administration\**" />
|
||||||
<EmbeddedResource Remove="Modules\CustomReactions\**" />
|
<EmbeddedResource Remove="Modules\CustomReactions\**" />
|
||||||
<EmbeddedResource Remove="Modules\Gambling\**" />
|
|
||||||
<EmbeddedResource Remove="Modules\Games\**" />
|
<EmbeddedResource Remove="Modules\Games\**" />
|
||||||
<EmbeddedResource Remove="Modules\NSFW\**" />
|
<EmbeddedResource Remove="Modules\NSFW\**" />
|
||||||
<EmbeddedResource Remove="Modules\Permissions\**" />
|
<EmbeddedResource Remove="Modules\Permissions\**" />
|
||||||
<EmbeddedResource Remove="Modules\Searches\**" />
|
<EmbeddedResource Remove="Modules\Searches\**" />
|
||||||
|
<EmbeddedResource Remove="Services\CustomReactions\**" />
|
||||||
<None Remove="Modules\Administration\**" />
|
<None Remove="Modules\Administration\**" />
|
||||||
<None Remove="Modules\CustomReactions\**" />
|
<None Remove="Modules\CustomReactions\**" />
|
||||||
<None Remove="Modules\Gambling\**" />
|
|
||||||
<None Remove="Modules\Games\**" />
|
<None Remove="Modules\Games\**" />
|
||||||
<None Remove="Modules\NSFW\**" />
|
<None Remove="Modules\NSFW\**" />
|
||||||
<None Remove="Modules\Permissions\**" />
|
<None Remove="Modules\Permissions\**" />
|
||||||
<None Remove="Modules\Searches\**" />
|
<None Remove="Modules\Searches\**" />
|
||||||
|
<None Remove="Services\CustomReactions\**" />
|
||||||
|
<Compile Remove="Modules\Gambling\Commands\Lucky7Commands.cs" />
|
||||||
|
<Compile Remove="Modules\Gambling\Commands\WaifuClaimCommands.cs" />
|
||||||
<None Update="libsodium.dll;opus.dll;libsodium.so;libopus.so">
|
<None Update="libsodium.dll;opus.dll;libsodium.so;libopus.so">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
|
@ -6,7 +6,6 @@ using System.Threading.Tasks;
|
|||||||
using Discord;
|
using Discord;
|
||||||
using NLog;
|
using NLog;
|
||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using Discord.Net;
|
|
||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
@ -469,7 +468,7 @@ namespace NadekoBot.Services
|
|||||||
var commands = searchResult.Commands;
|
var commands = searchResult.Commands;
|
||||||
for (int i = commands.Count - 1; i >= 0; i--)
|
for (int i = commands.Count - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
var preconditionResult = await commands[i].CheckPreconditionsAsync(context).ConfigureAwait(false);
|
var preconditionResult = await commands[i].CheckPreconditionsAsync(context, serviceProvider).ConfigureAwait(false);
|
||||||
if (!preconditionResult.IsSuccess)
|
if (!preconditionResult.IsSuccess)
|
||||||
{
|
{
|
||||||
if (commands.Count == 1)
|
if (commands.Count == 1)
|
||||||
|
@ -4,8 +4,6 @@ using System.Linq;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Discord;
|
using Discord;
|
||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
using NadekoBot.Modules;
|
|
||||||
using NadekoBot.Services.Impl;
|
|
||||||
using NadekoBot.Services.Database.Models;
|
using NadekoBot.Services.Database.Models;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using NLog;
|
using NLog;
|
||||||
@ -22,7 +20,6 @@ namespace NadekoBot.Services.Music
|
|||||||
private readonly IGoogleApiService _google;
|
private readonly IGoogleApiService _google;
|
||||||
private readonly NadekoStrings _strings;
|
private readonly NadekoStrings _strings;
|
||||||
private readonly ILocalization _localization;
|
private readonly ILocalization _localization;
|
||||||
private GoogleApiService google;
|
|
||||||
private readonly DbHandler _db;
|
private readonly DbHandler _db;
|
||||||
private readonly Logger _log;
|
private readonly Logger _log;
|
||||||
private readonly SoundCloudApiService _sc;
|
private readonly SoundCloudApiService _sc;
|
||||||
|
Loading…
Reference in New Issue
Block a user