Merge remote-tracking branch 'Kwoth/dev' into dev
This commit is contained in:
		 Submodule Discord.Net updated: 9ce5c4757e...d2229228b9
									
								
							@@ -440,6 +440,7 @@ namespace NadekoBot.Modules.Administration
 | 
				
			|||||||
            var enumerable = (await Context.Channel.GetMessagesAsync().Flatten()).AsEnumerable();
 | 
					            var enumerable = (await Context.Channel.GetMessagesAsync().Flatten()).AsEnumerable();
 | 
				
			||||||
            enumerable = enumerable.Where(x => x.Author.Id == user.Id);
 | 
					            enumerable = enumerable.Where(x => x.Author.Id == user.Id);
 | 
				
			||||||
            await Context.Channel.DeleteMessagesAsync(enumerable).ConfigureAwait(false);
 | 
					            await Context.Channel.DeleteMessagesAsync(enumerable).ConfigureAwait(false);
 | 
				
			||||||
 | 
					            Context.Message.DeleteAfter(3);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // prune x
 | 
					        // prune x
 | 
				
			||||||
@@ -474,6 +475,8 @@ namespace NadekoBot.Modules.Administration
 | 
				
			|||||||
            int limit = (count < 100) ? count : 100;
 | 
					            int limit = (count < 100) ? count : 100;
 | 
				
			||||||
            var enumerable = (await Context.Channel.GetMessagesAsync(limit: limit).Flatten()).Where(m => m.Author == user);
 | 
					            var enumerable = (await Context.Channel.GetMessagesAsync(limit: limit).Flatten()).Where(m => m.Author == user);
 | 
				
			||||||
            await Context.Channel.DeleteMessagesAsync(enumerable).ConfigureAwait(false);
 | 
					            await Context.Channel.DeleteMessagesAsync(enumerable).ConfigureAwait(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Context.Message.DeleteAfter(3);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [NadekoCommand, Usage, Description, Aliases]
 | 
					        [NadekoCommand, Usage, Description, Aliases]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,7 +28,7 @@ namespace NadekoBot.Modules.Gambling
 | 
				
			|||||||
                var ar = new AnimalRace(Context.Guild.Id, (ITextChannel)Context.Channel, Prefix);
 | 
					                var ar = new AnimalRace(Context.Guild.Id, (ITextChannel)Context.Channel, Prefix);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (ar.Fail)
 | 
					                if (ar.Fail)
 | 
				
			||||||
                    await Context.Channel.SendErrorAsync("🏁 `Failed starting a race. Another race is probably running.`").ConfigureAwait(false);
 | 
					                    await ReplyErrorLocalized("race_failed_starting").ConfigureAwait(false);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            [NadekoCommand, Usage, Description, Aliases]
 | 
					            [NadekoCommand, Usage, Description, Aliases]
 | 
				
			||||||
@@ -43,7 +43,7 @@ namespace NadekoBot.Modules.Gambling
 | 
				
			|||||||
                AnimalRace ar;
 | 
					                AnimalRace ar;
 | 
				
			||||||
                if (!AnimalRaces.TryGetValue(Context.Guild.Id, out ar))
 | 
					                if (!AnimalRaces.TryGetValue(Context.Guild.Id, out ar))
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    await Context.Channel.SendErrorAsync("No race exists on this server").ConfigureAwait(false);
 | 
					                    await ReplyErrorLocalized("race_not_exist").ConfigureAwait(false);
 | 
				
			||||||
                    return;
 | 
					                    return;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                await ar.JoinRace(Context.User as IGuildUser, amount);
 | 
					                await ar.JoinRace(Context.User as IGuildUser, amount);
 | 
				
			||||||
@@ -56,22 +56,22 @@ namespace NadekoBot.Modules.Gambling
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                public bool Fail { get; set; }
 | 
					                public bool Fail { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                public List<Participant> participants = new List<Participant>();
 | 
					                private readonly List<Participant> _participants = new List<Participant>();
 | 
				
			||||||
                private ulong serverId;
 | 
					                private readonly ulong _serverId;
 | 
				
			||||||
                private int messagesSinceGameStarted = 0;
 | 
					                private int _messagesSinceGameStarted;
 | 
				
			||||||
                private readonly string _prefix;
 | 
					                private readonly string _prefix;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                private Logger _log { get; }
 | 
					                private readonly Logger _log;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                public ITextChannel raceChannel { get; set; }
 | 
					                private readonly ITextChannel _raceChannel;
 | 
				
			||||||
                public bool Started { get; private set; } = false;
 | 
					                public bool Started { get; private set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                public AnimalRace(ulong serverId, ITextChannel ch, string prefix)
 | 
					                public AnimalRace(ulong serverId, ITextChannel ch, string prefix)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    this._prefix = prefix;
 | 
					                    _prefix = prefix;
 | 
				
			||||||
                    this._log = LogManager.GetCurrentClassLogger();
 | 
					                    _log = LogManager.GetCurrentClassLogger();
 | 
				
			||||||
                    this.serverId = serverId;
 | 
					                    _serverId = serverId;
 | 
				
			||||||
                    this.raceChannel = ch;
 | 
					                    _raceChannel = ch;
 | 
				
			||||||
                    if (!AnimalRaces.TryAdd(serverId, this))
 | 
					                    if (!AnimalRaces.TryAdd(serverId, this))
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        Fail = true;
 | 
					                        Fail = true;
 | 
				
			||||||
@@ -90,8 +90,8 @@ namespace NadekoBot.Modules.Gambling
 | 
				
			|||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            try
 | 
					                            try
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
                                await raceChannel.SendConfirmAsync("Animal Race", $"Starting in 20 seconds or when the room is full.",
 | 
					                                await _raceChannel.SendConfirmAsync(GetText("animal_race"), GetText("animal_race_starting"),
 | 
				
			||||||
                                    footer: $"Type {_prefix}jr to join the race.");
 | 
					                                    footer: GetText("animal_race_join_instr", _prefix));
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                            catch (Exception ex)
 | 
					                            catch (Exception ex)
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
@@ -102,16 +102,16 @@ namespace NadekoBot.Modules.Gambling
 | 
				
			|||||||
                            cancelSource.Cancel();
 | 
					                            cancelSource.Cancel();
 | 
				
			||||||
                            if (t == fullgame)
 | 
					                            if (t == fullgame)
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
                                try { await raceChannel.SendConfirmAsync("Animal Race", "Full! Starting immediately."); } catch (Exception ex) { _log.Warn(ex); }
 | 
					                                try { await _raceChannel.SendConfirmAsync(GetText("animal_race"), GetText("animal_race_full") ); } catch (Exception ex) { _log.Warn(ex); }
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                            else if (participants.Count > 1)
 | 
					                            else if (_participants.Count > 1)
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
                                try { await raceChannel.SendConfirmAsync("Animal Race", "Starting with " + participants.Count + " participants."); } catch (Exception ex) { _log.Warn(ex); }
 | 
					                                try { await _raceChannel.SendConfirmAsync(GetText("animal_race"), GetText("animal_race_starting_with_x", _participants.Count)); } catch (Exception ex) { _log.Warn(ex); }
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                            else
 | 
					                            else
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
                                try { await raceChannel.SendErrorAsync("Animal Race", "Failed to start since there was not enough participants."); } catch (Exception ex) { _log.Warn(ex); }
 | 
					                                try { await _raceChannel.SendErrorAsync(GetText("animal_race"), GetText("animal_race_failed")); } catch (Exception ex) { _log.Warn(ex); }
 | 
				
			||||||
                                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 CurrencyHandler.AddCurrencyAsync(p.User, "BetRace", p.AmountBet, false).ConfigureAwait(false);
 | 
				
			||||||
@@ -128,7 +128,7 @@ namespace NadekoBot.Modules.Gambling
 | 
				
			|||||||
                private void End()
 | 
					                private void End()
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    AnimalRace throwaway;
 | 
					                    AnimalRace throwaway;
 | 
				
			||||||
                    AnimalRaces.TryRemove(serverId, out throwaway);
 | 
					                    AnimalRaces.TryRemove(_serverId, out throwaway);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                private async Task StartRace()
 | 
					                private async Task StartRace()
 | 
				
			||||||
@@ -136,21 +136,21 @@ namespace NadekoBot.Modules.Gambling
 | 
				
			|||||||
                    var rng = new NadekoRandom();
 | 
					                    var rng = new NadekoRandom();
 | 
				
			||||||
                    Participant winner = null;
 | 
					                    Participant winner = null;
 | 
				
			||||||
                    IUserMessage msg = null;
 | 
					                    IUserMessage msg = null;
 | 
				
			||||||
                    int place = 1;
 | 
					                    var place = 1;
 | 
				
			||||||
                    try
 | 
					                    try
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        NadekoBot.Client.MessageReceived += Client_MessageReceived;
 | 
					                        NadekoBot.Client.MessageReceived += Client_MessageReceived;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        while (!participants.All(p => p.Total >= 60))
 | 
					                        while (!_participants.All(p => p.Total >= 60))
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            //update the state
 | 
					                            //update the state
 | 
				
			||||||
                            participants.ForEach(p =>
 | 
					                            _participants.ForEach(p =>
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
                                p.Total += 1 + rng.Next(0, 10);
 | 
					                                p.Total += 1 + rng.Next(0, 10);
 | 
				
			||||||
                            });
 | 
					                            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            participants
 | 
					                            _participants
 | 
				
			||||||
                                .OrderByDescending(p => p.Total)
 | 
					                                .OrderByDescending(p => p.Total)
 | 
				
			||||||
                                .ForEach(p =>
 | 
					                                .ForEach(p =>
 | 
				
			||||||
                                {
 | 
					                                {
 | 
				
			||||||
@@ -170,14 +170,14 @@ namespace NadekoBot.Modules.Gambling
 | 
				
			|||||||
                            //draw the state
 | 
					                            //draw the state
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            var text = $@"|🏁🏁🏁🏁🏁🏁🏁🏁🏁🏁🏁🏁🏁🏁🏁🔚|
 | 
					                            var text = $@"|🏁🏁🏁🏁🏁🏁🏁🏁🏁🏁🏁🏁🏁🏁🏁🔚|
 | 
				
			||||||
{String.Join("\n", participants.Select(p => $"{(int)(p.Total / 60f * 100),-2}%|{p.ToString()}"))}
 | 
					{String.Join("\n", _participants.Select(p => $"{(int)(p.Total / 60f * 100),-2}%|{p.ToString()}"))}
 | 
				
			||||||
|🏁🏁🏁🏁🏁🏁🏁🏁🏁🏁🏁🏁🏁🏁🏁🔚|";
 | 
					|🏁🏁🏁🏁🏁🏁🏁🏁🏁🏁🏁🏁🏁🏁🏁🔚|";
 | 
				
			||||||
                            if (msg == null || messagesSinceGameStarted >= 10) // also resend the message if channel was spammed
 | 
					                            if (msg == null || _messagesSinceGameStarted >= 10) // also resend the message if channel was spammed
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
                                if (msg != null)
 | 
					                                if (msg != null)
 | 
				
			||||||
                                    try { await msg.DeleteAsync(); } catch { }
 | 
					                                    try { await msg.DeleteAsync(); } catch { }
 | 
				
			||||||
                                messagesSinceGameStarted = 0;
 | 
					                                _messagesSinceGameStarted = 0;
 | 
				
			||||||
                                try { msg = await raceChannel.SendMessageAsync(text).ConfigureAwait(false); } catch (Exception ex) { _log.Warn(ex); }
 | 
					                                try { msg = await _raceChannel.SendMessageAsync(text).ConfigureAwait(false); } catch (Exception ex) { _log.Warn(ex); }
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                            else
 | 
					                            else
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
@@ -187,22 +187,33 @@ namespace NadekoBot.Modules.Gambling
 | 
				
			|||||||
                            await Task.Delay(2500);
 | 
					                            await Task.Delay(2500);
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    catch { }
 | 
					                    catch
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        // ignored
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                    finally
 | 
					                    finally
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        NadekoBot.Client.MessageReceived -= Client_MessageReceived;
 | 
					                        NadekoBot.Client.MessageReceived -= Client_MessageReceived;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    if (winner.AmountBet > 0)
 | 
					                    if (winner != null)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        var wonAmount = winner.AmountBet * (participants.Count - 1);
 | 
					                        if (winner.AmountBet > 0)
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            var wonAmount = winner.AmountBet * (_participants.Count - 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        await CurrencyHandler.AddCurrencyAsync(winner.User, "Won a Race", wonAmount, true).ConfigureAwait(false);
 | 
					                            await CurrencyHandler.AddCurrencyAsync(winner.User, "Won a Race", wonAmount, true)
 | 
				
			||||||
                        await raceChannel.SendConfirmAsync("Animal Race", $"{winner.User.Mention} as {winner.Animal} **Won the race and {wonAmount}{CurrencySign}!**").ConfigureAwait(false);
 | 
					                                .ConfigureAwait(false);
 | 
				
			||||||
                    }
 | 
					                            await _raceChannel.SendConfirmAsync(GetText("animal_race"),
 | 
				
			||||||
                    else
 | 
					                                    Format.Bold(GetText("animal_race_won_money", winner.User.Mention,
 | 
				
			||||||
                    {
 | 
					                                        winner.Animal, wonAmount + CurrencySign)))
 | 
				
			||||||
                        await raceChannel.SendConfirmAsync("Animal Race", $"{winner.User.Mention} as {winner.Animal} **Won the race!**").ConfigureAwait(false);
 | 
					                                .ConfigureAwait(false);
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                        else
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            await _raceChannel.SendConfirmAsync(GetText("animal_race"),
 | 
				
			||||||
 | 
					                                Format.Bold(GetText("animal_race_won", winner.User.Mention, winner.Animal))).ConfigureAwait(false);
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
@@ -212,9 +223,9 @@ 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.IsAuthor() || !(imsg.Channel is ITextChannel) || imsg.Channel != _raceChannel)
 | 
				
			||||||
                        return Task.CompletedTask;
 | 
					                        return Task.CompletedTask;
 | 
				
			||||||
                    messagesSinceGameStarted++;
 | 
					                    _messagesSinceGameStarted++;
 | 
				
			||||||
                    return Task.CompletedTask;
 | 
					                    return Task.CompletedTask;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -228,51 +239,66 @@ namespace NadekoBot.Modules.Gambling
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                public async Task JoinRace(IGuildUser u, int amount = 0)
 | 
					                public async Task JoinRace(IGuildUser u, int amount = 0)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    var animal = "";
 | 
					                    string animal;
 | 
				
			||||||
                    if (!animals.TryDequeue(out animal))
 | 
					                    if (!animals.TryDequeue(out animal))
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        await raceChannel.SendErrorAsync($"{u.Mention} `There is no running race on this server.`").ConfigureAwait(false);
 | 
					                        await _raceChannel.SendErrorAsync(GetText("animal_race_no_race")).ConfigureAwait(false);
 | 
				
			||||||
                        return;
 | 
					                        return;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    var p = new Participant(u, animal, amount);
 | 
					                    var p = new Participant(u, animal, amount);
 | 
				
			||||||
                    if (participants.Contains(p))
 | 
					                    if (_participants.Contains(p))
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        await raceChannel.SendErrorAsync($"{u.Mention} `You already joined this race.`").ConfigureAwait(false);
 | 
					                        await _raceChannel.SendErrorAsync(GetText("animal_race_already_in")).ConfigureAwait(false);
 | 
				
			||||||
                        return;
 | 
					                        return;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    if (Started)
 | 
					                    if (Started)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        await raceChannel.SendErrorAsync($"{u.Mention} `Race is already started`").ConfigureAwait(false);
 | 
					                        await _raceChannel.SendErrorAsync(GetText("animal_race_already_started")).ConfigureAwait(false);
 | 
				
			||||||
                        return;
 | 
					                        return;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    if (amount > 0)
 | 
					                    if (amount > 0)
 | 
				
			||||||
                        if (!await CurrencyHandler.RemoveCurrencyAsync((IGuildUser)u, "BetRace", amount, false).ConfigureAwait(false))
 | 
					                        if (!await CurrencyHandler.RemoveCurrencyAsync(u, "BetRace", amount, false).ConfigureAwait(false))
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            try { await raceChannel.SendErrorAsync($"{u.Mention} You don't have enough {NadekoBot.BotConfig.CurrencyPluralName}.").ConfigureAwait(false); } catch { }
 | 
					                            await _raceChannel.SendErrorAsync(GetText("not_enough", CurrencySign)).ConfigureAwait(false);
 | 
				
			||||||
                            return;
 | 
					                            return;
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    participants.Add(p);
 | 
					                    _participants.Add(p);
 | 
				
			||||||
                    await raceChannel.SendConfirmAsync("Animal Race", $"{u.Mention} **joined as a {p.Animal}" + (amount > 0 ? $" and bet {amount} {CurrencySign}!**" : "**"))
 | 
					                    string confStr;
 | 
				
			||||||
                        .ConfigureAwait(false);
 | 
					                    if (amount > 0)
 | 
				
			||||||
 | 
					                        confStr = GetText("animal_race_join_bet", u.Mention, p.Animal, amount + CurrencySign);
 | 
				
			||||||
 | 
					                    else
 | 
				
			||||||
 | 
					                        confStr = GetText("animal_race_join", u.Mention, p.Animal);
 | 
				
			||||||
 | 
					                    await _raceChannel.SendConfirmAsync(GetText("animal_race"), Format.Bold(confStr)).ConfigureAwait(false);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                private string GetText(string text)
 | 
				
			||||||
 | 
					                    => NadekoModule.GetTextStatic(text,
 | 
				
			||||||
 | 
					                        NadekoBot.Localization.GetCultureInfo(_raceChannel.Guild),
 | 
				
			||||||
 | 
					                        typeof(Gambling).Name.ToLowerInvariant());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                private string GetText(string text, params object[] replacements)
 | 
				
			||||||
 | 
					                    => NadekoModule.GetTextStatic(text,
 | 
				
			||||||
 | 
					                        NadekoBot.Localization.GetCultureInfo(_raceChannel.Guild),
 | 
				
			||||||
 | 
					                        typeof(Gambling).Name.ToLowerInvariant(),
 | 
				
			||||||
 | 
					                        replacements);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            public class Participant
 | 
					            public class Participant
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                public IGuildUser User { get; set; }
 | 
					                public IGuildUser User { get; }
 | 
				
			||||||
                public string Animal { get; set; }
 | 
					                public string Animal { get; }
 | 
				
			||||||
                public int AmountBet { get; set; }
 | 
					                public int AmountBet { get; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                public float Coeff { get; set; }
 | 
					                public float Coeff { get; set; }
 | 
				
			||||||
                public int Total { get; set; }
 | 
					                public int Total { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                public int Place { get; set; } = 0;
 | 
					                public int Place { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                public Participant(IGuildUser u, string a, int amount)
 | 
					                public Participant(IGuildUser u, string a, int amount)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    this.User = u;
 | 
					                    User = u;
 | 
				
			||||||
                    this.Animal = a;
 | 
					                    Animal = a;
 | 
				
			||||||
                    this.AmountBet = amount;
 | 
					                    AmountBet = amount;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                public override int GetHashCode() => User.GetHashCode();
 | 
					                public override int GetHashCode() => User.GetHashCode();
 | 
				
			||||||
@@ -288,23 +314,13 @@ namespace NadekoBot.Modules.Gambling
 | 
				
			|||||||
                    var str = new string('‣', Total) + Animal;
 | 
					                    var str = new string('‣', Total) + Animal;
 | 
				
			||||||
                    if (Place == 0)
 | 
					                    if (Place == 0)
 | 
				
			||||||
                        return str;
 | 
					                        return str;
 | 
				
			||||||
                    if (Place == 1)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        return str + "🏆";
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                    else if (Place == 2)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        return str + "`2nd`";
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                    else if (Place == 3)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        return str + "`3rd`";
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                    else
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        return str + $"`{Place}th`";
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    str += $"`#{Place}`";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if (Place == 1)
 | 
				
			||||||
 | 
					                        str += "🏆";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    return str;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,7 +22,7 @@ namespace NadekoBot.Modules.Gambling
 | 
				
			|||||||
            private Regex dndRegex { get; } = new Regex(@"^(?<n1>\d+)d(?<n2>\d+)(?:\+(?<add>\d+))?(?:\-(?<sub>\d+))?$", RegexOptions.Compiled);
 | 
					            private Regex dndRegex { get; } = new Regex(@"^(?<n1>\d+)d(?<n2>\d+)(?:\+(?<add>\d+))?(?:\-(?<sub>\d+))?$", RegexOptions.Compiled);
 | 
				
			||||||
            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 = new[] { '-', ' ', '+' };
 | 
					            private readonly char[] _fateRolls = { '-', ' ', '+' };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            [NadekoCommand, Usage, Description, Aliases]
 | 
					            [NadekoCommand, Usage, Description, Aliases]
 | 
				
			||||||
            public async Task Roll()
 | 
					            public async Task Roll()
 | 
				
			||||||
@@ -40,7 +40,9 @@ namespace NadekoBot.Modules.Gambling
 | 
				
			|||||||
                    return ms;
 | 
					                    return ms;
 | 
				
			||||||
                }).ConfigureAwait(false);
 | 
					                }).ConfigureAwait(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                await Context.Channel.SendFileAsync(imageStream, "dice.png", $"{Context.User.Mention} rolled " + Format.Code(gen.ToString())).ConfigureAwait(false);
 | 
					                await Context.Channel.SendFileAsync(imageStream, 
 | 
				
			||||||
 | 
					                    "dice.png", 
 | 
				
			||||||
 | 
					                    Context.User.Mention + " " + GetText("dice_rolled", Format.Code(gen.ToString()))).ConfigureAwait(false);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            public enum RollOrderType
 | 
					            public enum RollOrderType
 | 
				
			||||||
@@ -82,7 +84,7 @@ namespace NadekoBot.Modules.Gambling
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (num < 1 || num > 30)
 | 
					                if (num < 1 || num > 30)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    await Context.Channel.SendErrorAsync("Invalid number specified. You can roll up to 1-30 dice at a time.").ConfigureAwait(false);
 | 
					                    await ReplyErrorLocalized("dice_invalid_number", 1, 30).ConfigureAwait(false);
 | 
				
			||||||
                    return;
 | 
					                    return;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -120,7 +122,12 @@ namespace NadekoBot.Modules.Gambling
 | 
				
			|||||||
                var ms = new MemoryStream();
 | 
					                var ms = new MemoryStream();
 | 
				
			||||||
                bitmap.SaveAsPng(ms);
 | 
					                bitmap.SaveAsPng(ms);
 | 
				
			||||||
                ms.Position = 0;
 | 
					                ms.Position = 0;
 | 
				
			||||||
                await Context.Channel.SendFileAsync(ms, "dice.png", $"{Context.User.Mention} rolled {values.Count} {(values.Count == 1 ? "die" : "dice")}. Total: **{values.Sum()}** Average: **{(values.Sum() / (1.0f * values.Count)).ToString("N2")}**").ConfigureAwait(false);
 | 
					                await Context.Channel.SendFileAsync(ms, "dice.png",
 | 
				
			||||||
 | 
					                    Context.User.Mention + 
 | 
				
			||||||
 | 
					                    GetText("dice_rolled_num", Format.Bold(values.Count.ToString())) +
 | 
				
			||||||
 | 
					                    " " + GetText("Total: {1} Average: {2}",
 | 
				
			||||||
 | 
					                        Format.Bold(values.Sum().ToString()),
 | 
				
			||||||
 | 
					                        Format.Bold((values.Sum() / (1.0f * values.Count)).ToString("N2")))).ConfigureAwait(false);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            private async Task InternallDndRoll(string arg, bool ordered)
 | 
					            private async Task InternallDndRoll(string arg, bool ordered)
 | 
				
			||||||
@@ -138,9 +145,9 @@ namespace NadekoBot.Modules.Gambling
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                    for (int i = 0; i < n1; i++)
 | 
					                    for (int i = 0; i < n1; i++)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        rolls.Add(fateRolls[rng.Next(0, fateRolls.Length)]);
 | 
					                        rolls.Add(_fateRolls[rng.Next(0, _fateRolls.Length)]);
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    var embed = new EmbedBuilder().WithOkColor().WithDescription($"{Context.User.Mention} rolled {n1} fate {(n1 == 1 ? "die" : "dice")}.")
 | 
					                    var embed = new EmbedBuilder().WithOkColor().WithDescription(Context.User.Mention + " " + GetText("dice_rolled_num", Format.Bold(n1.ToString())))
 | 
				
			||||||
                        .AddField(efb => efb.WithName(Format.Bold("Result"))
 | 
					                        .AddField(efb => efb.WithName(Format.Bold("Result"))
 | 
				
			||||||
                            .WithValue(string.Join(" ", rolls.Select(c => Format.Code($"[{c}]")))));
 | 
					                            .WithValue(string.Join(" ", rolls.Select(c => Format.Code($"[{c}]")))));
 | 
				
			||||||
                    await Context.Channel.EmbedAsync(embed).ConfigureAwait(false);
 | 
					                    await Context.Channel.EmbedAsync(embed).ConfigureAwait(false);
 | 
				
			||||||
@@ -164,7 +171,7 @@ namespace NadekoBot.Modules.Gambling
 | 
				
			|||||||
                        }
 | 
					                        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        var sum = arr.Sum();
 | 
					                        var sum = arr.Sum();
 | 
				
			||||||
                        var embed = new EmbedBuilder().WithOkColor().WithDescription($"{Context.User.Mention} rolled {n1} {(n1 == 1 ? "die" : "dice")} `1 to {n2}`")
 | 
					                        var embed = new EmbedBuilder().WithOkColor().WithDescription(Context.User.Mention + " " +GetText("dice_rolled_num", n1) + $"`1 - {n2}`")
 | 
				
			||||||
                        .AddField(efb => efb.WithName(Format.Bold("Rolls"))
 | 
					                        .AddField(efb => efb.WithName(Format.Bold("Rolls"))
 | 
				
			||||||
                            .WithValue(string.Join(" ", (ordered ? arr.OrderBy(x => x).AsEnumerable() : arr).Select(x => Format.Code(x.ToString())))))
 | 
					                            .WithValue(string.Join(" ", (ordered ? arr.OrderBy(x => x).AsEnumerable() : arr).Select(x => Format.Code(x.ToString())))))
 | 
				
			||||||
                        .AddField(efb => efb.WithName(Format.Bold("Sum"))
 | 
					                        .AddField(efb => efb.WithName(Format.Bold("Sum"))
 | 
				
			||||||
@@ -177,30 +184,26 @@ namespace NadekoBot.Modules.Gambling
 | 
				
			|||||||
            [NadekoCommand, Usage, Description, Aliases]
 | 
					            [NadekoCommand, Usage, Description, Aliases]
 | 
				
			||||||
            public async Task NRoll([Remainder] string range)
 | 
					            public async Task NRoll([Remainder] string range)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                try
 | 
					                int rolled;
 | 
				
			||||||
 | 
					                if (range.Contains("-"))
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    int rolled;
 | 
					                    var arr = range.Split('-')
 | 
				
			||||||
                    if (range.Contains("-"))
 | 
					                        .Take(2)
 | 
				
			||||||
 | 
					                        .Select(int.Parse)
 | 
				
			||||||
 | 
					                        .ToArray();
 | 
				
			||||||
 | 
					                    if (arr[0] > arr[1])
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        var arr = range.Split('-')
 | 
					                        await ReplyErrorLocalized("second_larger_than_first").ConfigureAwait(false);
 | 
				
			||||||
                                        .Take(2)
 | 
					                        return;
 | 
				
			||||||
                                        .Select(int.Parse)
 | 
					 | 
				
			||||||
                                        .ToArray();
 | 
					 | 
				
			||||||
                        if (arr[0] > arr[1])
 | 
					 | 
				
			||||||
                            throw new ArgumentException("Second argument must be larger than the first one.");
 | 
					 | 
				
			||||||
                        rolled = new NadekoRandom().Next(arr[0], arr[1] + 1);
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                    else
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        rolled = new NadekoRandom().Next(0, int.Parse(range) + 1);
 | 
					 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					                    rolled = new NadekoRandom().Next(arr[0], arr[1] + 1);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    rolled = new NadekoRandom().Next(0, int.Parse(range) + 1);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    await Context.Channel.SendConfirmAsync($"{Context.User.Mention} rolled **{rolled}**.").ConfigureAwait(false);
 | 
					                await ReplyConfirmLocalized("dice_rolled", Format.Bold(rolled.ToString())).ConfigureAwait(false);
 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                catch (Exception ex)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    await Context.Channel.SendErrorAsync($":anger: {ex.Message}").ConfigureAwait(false);
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            private Image GetDice(int num)
 | 
					            private Image GetDice(int num)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,13 +3,11 @@ 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;
 | 
					 | 
				
			||||||
using NadekoBot.Services.Database.Models;
 | 
					using NadekoBot.Services.Database.Models;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Concurrent;
 | 
					using System.Collections.Concurrent;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Text;
 | 
					 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace NadekoBot.Modules.Gambling
 | 
					namespace NadekoBot.Modules.Gambling
 | 
				
			||||||
@@ -49,8 +47,8 @@ namespace NadekoBot.Modules.Gambling
 | 
				
			|||||||
        [Group]
 | 
					        [Group]
 | 
				
			||||||
        public class WaifuClaimCommands : NadekoSubmodule
 | 
					        public class WaifuClaimCommands : NadekoSubmodule
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            private static ConcurrentDictionary<ulong, DateTime> _divorceCooldowns { get; } = new ConcurrentDictionary<ulong, DateTime>();
 | 
					            private static ConcurrentDictionary<ulong, DateTime> divorceCooldowns { get; } = new ConcurrentDictionary<ulong, DateTime>();
 | 
				
			||||||
            private static ConcurrentDictionary<ulong, DateTime> _affinityCooldowns { get; } = new ConcurrentDictionary<ulong, DateTime>();
 | 
					            private static ConcurrentDictionary<ulong, DateTime> affinityCooldowns { get; } = new ConcurrentDictionary<ulong, DateTime>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            enum WaifuClaimResult
 | 
					            enum WaifuClaimResult
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -65,20 +63,19 @@ namespace NadekoBot.Modules.Gambling
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (amount < 50)
 | 
					                if (amount < 50)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    await Context.Channel.SendErrorAsync($"{Context.User.Mention} No waifu is that cheap. You must pay at least 50{NadekoBot.BotConfig.CurrencySign} to get a waifu, even if their actual value is lower.").ConfigureAwait(false);
 | 
					                    await ReplyErrorLocalized("waifu_isnt_cheap", 50 + CurrencySign).ConfigureAwait(false);
 | 
				
			||||||
                    return;
 | 
					                    return;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (target.Id == Context.User.Id)
 | 
					                if (target.Id == Context.User.Id)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    await Context.Channel.SendErrorAsync(Context.User.Mention + " You can't claim yourself.").ConfigureAwait(false);
 | 
					                    await ReplyErrorLocalized("waifu_not_yourself").ConfigureAwait(false);
 | 
				
			||||||
                    return;
 | 
					                    return;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                WaifuClaimResult result = WaifuClaimResult.NotEnoughFunds;
 | 
					                WaifuClaimResult result;
 | 
				
			||||||
                int? oldPrice = null;
 | 
					 | 
				
			||||||
                WaifuInfo w;
 | 
					                WaifuInfo w;
 | 
				
			||||||
                var isAffinity = false;
 | 
					                bool isAffinity;
 | 
				
			||||||
                using (var uow = DbHandler.UnitOfWork())
 | 
					                using (var uow = DbHandler.UnitOfWork())
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    w = uow.Waifus.ByWaifuUserId(target.Id);
 | 
					                    w = uow.Waifus.ByWaifuUserId(target.Id);
 | 
				
			||||||
@@ -120,7 +117,6 @@ namespace NadekoBot.Modules.Gambling
 | 
				
			|||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            var oldClaimer = w.Claimer;
 | 
					                            var oldClaimer = w.Claimer;
 | 
				
			||||||
                            w.Claimer = uow.DiscordUsers.GetOrCreate(Context.User);
 | 
					                            w.Claimer = uow.DiscordUsers.GetOrCreate(Context.User);
 | 
				
			||||||
                            oldPrice = w.Price;
 | 
					 | 
				
			||||||
                            w.Price = amount + (amount / 4);
 | 
					                            w.Price = amount + (amount / 4);
 | 
				
			||||||
                            result = WaifuClaimResult.Success;
 | 
					                            result = WaifuClaimResult.Success;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -143,7 +139,6 @@ namespace NadekoBot.Modules.Gambling
 | 
				
			|||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            var oldClaimer = w.Claimer;
 | 
					                            var oldClaimer = w.Claimer;
 | 
				
			||||||
                            w.Claimer = uow.DiscordUsers.GetOrCreate(Context.User);
 | 
					                            w.Claimer = uow.DiscordUsers.GetOrCreate(Context.User);
 | 
				
			||||||
                            oldPrice = w.Price;
 | 
					 | 
				
			||||||
                            w.Price = amount;
 | 
					                            w.Price = amount;
 | 
				
			||||||
                            result = WaifuClaimResult.Success;
 | 
					                            result = WaifuClaimResult.Success;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -165,22 +160,20 @@ namespace NadekoBot.Modules.Gambling
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                if (result == WaifuClaimResult.InsufficientAmount)
 | 
					                if (result == WaifuClaimResult.InsufficientAmount)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    await Context.Channel.SendErrorAsync($"{Context.User.Mention} You must pay {Math.Ceiling(w.Price * (isAffinity ? 0.88f : 1.1f))} or more to claim that waifu!").ConfigureAwait(false);
 | 
					                    await ReplyErrorLocalized("waifu_not_enough", Math.Ceiling(w.Price * (isAffinity ? 0.88f : 1.1f))).ConfigureAwait(false);
 | 
				
			||||||
                    return;
 | 
					                    return;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                else if (result == WaifuClaimResult.NotEnoughFunds)
 | 
					                if (result == WaifuClaimResult.NotEnoughFunds)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    await Context.Channel.SendConfirmAsync($"{Context.User.Mention} you don't have {amount}{NadekoBot.BotConfig.CurrencySign}!")
 | 
					                    await ReplyErrorLocalized("not_enough", CurrencySign).ConfigureAwait(false);
 | 
				
			||||||
                            .ConfigureAwait(false);
 | 
					                    return;
 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                else
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    var msg = $"{Context.User.Mention} claimed {target.Mention} as their waifu for {amount}{NadekoBot.BotConfig.CurrencySign}!";
 | 
					 | 
				
			||||||
                    if (w.Affinity?.UserId == Context.User.Id)
 | 
					 | 
				
			||||||
                        msg += $"\n🎉 Their love is fulfilled! 🎉\n**{target}'s** new value is {w.Price}{NadekoBot.BotConfig.CurrencySign}!";
 | 
					 | 
				
			||||||
                    await Context.Channel.SendConfirmAsync(msg)
 | 
					 | 
				
			||||||
                            .ConfigureAwait(false);
 | 
					 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					                var msg = GetText("waifu_claimed", 
 | 
				
			||||||
 | 
					                    Format.Bold(target.ToString()), 
 | 
				
			||||||
 | 
					                    amount + CurrencySign);
 | 
				
			||||||
 | 
					                if (w.Affinity?.UserId == Context.User.Id)
 | 
				
			||||||
 | 
					                    msg += "\n" + GetText("waifu_fulfilled", target, w.Price + CurrencySign);
 | 
				
			||||||
 | 
					                await Context.Channel.SendConfirmAsync(Context.User.Mention + msg).ConfigureAwait(false);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            public enum DivorceResult
 | 
					            public enum DivorceResult
 | 
				
			||||||
@@ -192,7 +185,7 @@ namespace NadekoBot.Modules.Gambling
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            private static readonly TimeSpan DivorceLimit = TimeSpan.FromHours(6);
 | 
					            private static readonly TimeSpan _divorceLimit = TimeSpan.FromHours(6);
 | 
				
			||||||
            [NadekoCommand, Usage, Description, Aliases]
 | 
					            [NadekoCommand, Usage, Description, Aliases]
 | 
				
			||||||
            [RequireContext(ContextType.Guild)]
 | 
					            [RequireContext(ContextType.Guild)]
 | 
				
			||||||
            public async Task Divorce([Remainder]IUser target)
 | 
					            public async Task Divorce([Remainder]IUser target)
 | 
				
			||||||
@@ -200,19 +193,19 @@ namespace NadekoBot.Modules.Gambling
 | 
				
			|||||||
                if (target.Id == Context.User.Id)
 | 
					                if (target.Id == Context.User.Id)
 | 
				
			||||||
                    return;
 | 
					                    return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                var result = DivorceResult.NotYourWife;
 | 
					                DivorceResult result;
 | 
				
			||||||
                TimeSpan 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 = DbHandler.UnitOfWork())
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    w = uow.Waifus.ByWaifuUserId(target.Id);
 | 
					                    w = uow.Waifus.ByWaifuUserId(target.Id);
 | 
				
			||||||
                    var now = DateTime.UtcNow;
 | 
					                    var now = DateTime.UtcNow;
 | 
				
			||||||
                    if (w == null || w.Claimer == null || w.Claimer.UserId != Context.User.Id)
 | 
					                    if (w?.Claimer == null || w.Claimer.UserId != Context.User.Id)
 | 
				
			||||||
                        result = DivorceResult.NotYourWife;
 | 
					                        result = DivorceResult.NotYourWife;
 | 
				
			||||||
                    else if (_divorceCooldowns.AddOrUpdate(Context.User.Id,
 | 
					                    else if (divorceCooldowns.AddOrUpdate(Context.User.Id,
 | 
				
			||||||
                        now,
 | 
					                        now,
 | 
				
			||||||
                        (key, old) => ((difference = now.Subtract(old)) > DivorceLimit) ? now : old) != now)
 | 
					                        (key, old) => ((difference = now.Subtract(old)) > _divorceLimit) ? now : old) != now)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        result = DivorceResult.Cooldown;
 | 
					                        result = DivorceResult.Cooldown;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
@@ -249,37 +242,39 @@ namespace NadekoBot.Modules.Gambling
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                if (result == DivorceResult.SucessWithPenalty)
 | 
					                if (result == DivorceResult.SucessWithPenalty)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    await Context.Channel.SendConfirmAsync($"{Context.User.Mention} You have divorced a waifu who likes you. You heartless monster.\n{w.Waifu} received {amount}{NadekoBot.BotConfig.CurrencySign} as a compensation.").ConfigureAwait(false);
 | 
					                    await ReplyConfirmLocalized("waifu_divorced_like", Format.Bold(w.Waifu.ToString()), amount + CurrencySign).ConfigureAwait(false);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                else if (result == DivorceResult.Success)
 | 
					                else if (result == DivorceResult.Success)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    await Context.Channel.SendConfirmAsync($"{Context.User.Mention} You have divorced a waifu who doesn't like you. You received {amount}{NadekoBot.BotConfig.CurrencySign} back.").ConfigureAwait(false);
 | 
					                    await ReplyConfirmLocalized("waifu_divorced_notlike", amount + CurrencySign).ConfigureAwait(false);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                else if (result == DivorceResult.NotYourWife)
 | 
					                else if (result == DivorceResult.NotYourWife)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    await Context.Channel.SendErrorAsync($"{Context.User.Mention} That waifu is not yours.").ConfigureAwait(false);
 | 
					                    await ReplyErrorLocalized("waifu_not_yours").ConfigureAwait(false);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                else
 | 
					                else
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    var remaining = DivorceLimit.Subtract(difference);
 | 
					                    var remaining = _divorceLimit.Subtract(difference);
 | 
				
			||||||
                    await Context.Channel.SendErrorAsync($"{Context.User.Mention} You divorced recently. You must wait **{remaining.Hours} hours and {remaining.Minutes} minutes** to divorce again.").ConfigureAwait(false);
 | 
					                    await ReplyErrorLocalized("waifu_recent_divorce", 
 | 
				
			||||||
 | 
					                        Format.Bold(((int)remaining.TotalHours).ToString()),
 | 
				
			||||||
 | 
					                        Format.Bold(remaining.Minutes.ToString())).ConfigureAwait(false);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            private static readonly TimeSpan AffinityLimit = TimeSpan.FromMinutes(30);
 | 
					            private static readonly TimeSpan _affinityLimit = TimeSpan.FromMinutes(30);
 | 
				
			||||||
            [NadekoCommand, Usage, Description, Aliases]
 | 
					            [NadekoCommand, Usage, Description, Aliases]
 | 
				
			||||||
            [RequireContext(ContextType.Guild)]
 | 
					            [RequireContext(ContextType.Guild)]
 | 
				
			||||||
            public async Task WaifuClaimerAffinity([Remainder]IUser u = null)
 | 
					            public async Task WaifuClaimerAffinity([Remainder]IUser u = null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                if (u?.Id == Context.User.Id)
 | 
					                if (u?.Id == Context.User.Id)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    await Context.Channel.SendErrorAsync($"{Context.User.Mention} you can't set affinity to yourself, you egomaniac.").ConfigureAwait(false);
 | 
					                    await ReplyErrorLocalized("waifu_egomaniac").ConfigureAwait(false);
 | 
				
			||||||
                    return;
 | 
					                    return;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                DiscordUser oldAff = null;
 | 
					                DiscordUser oldAff = null;
 | 
				
			||||||
                var sucess = false;
 | 
					                var sucess = false;
 | 
				
			||||||
                var cooldown = false;
 | 
					                var cooldown = false;
 | 
				
			||||||
                TimeSpan difference = TimeSpan.Zero;
 | 
					                var difference = TimeSpan.Zero;
 | 
				
			||||||
                using (var uow = DbHandler.UnitOfWork())
 | 
					                using (var uow = DbHandler.UnitOfWork())
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    var w = uow.Waifus.ByWaifuUserId(Context.User.Id);
 | 
					                    var w = uow.Waifus.ByWaifuUserId(Context.User.Id);
 | 
				
			||||||
@@ -287,13 +282,11 @@ namespace NadekoBot.Modules.Gambling
 | 
				
			|||||||
                    var now = DateTime.UtcNow;
 | 
					                    var now = DateTime.UtcNow;
 | 
				
			||||||
                    if (w?.Affinity?.UserId == u?.Id)
 | 
					                    if (w?.Affinity?.UserId == u?.Id)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        sucess = false;
 | 
					 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    else if (_affinityCooldowns.AddOrUpdate(Context.User.Id,
 | 
					                    else if (affinityCooldowns.AddOrUpdate(Context.User.Id,
 | 
				
			||||||
                        now,
 | 
					                        now,
 | 
				
			||||||
                        (key, old) => ((difference = now.Subtract(old)) > AffinityLimit) ? now : old) != now)
 | 
					                        (key, old) => ((difference = now.Subtract(old)) > _affinityLimit) ? now : old) != now)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        sucess = false;
 | 
					 | 
				
			||||||
                        cooldown = true;
 | 
					                        cooldown = true;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    else if (w == null)
 | 
					                    else if (w == null)
 | 
				
			||||||
@@ -338,19 +331,29 @@ namespace NadekoBot.Modules.Gambling
 | 
				
			|||||||
                {
 | 
					                {
 | 
				
			||||||
                    if (cooldown)
 | 
					                    if (cooldown)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        var remaining = AffinityLimit.Subtract(difference);
 | 
					                        var remaining = _affinityLimit.Subtract(difference);
 | 
				
			||||||
                        await Context.Channel.SendErrorAsync($"{Context.User.Mention} You must wait **{remaining.Hours} hours and {remaining.Minutes} minutes** in order to change your affinity again.").ConfigureAwait(false);
 | 
					                        await ReplyErrorLocalized("waifu_affinity_cooldown", 
 | 
				
			||||||
 | 
					                            Format.Bold(((int)remaining.TotalHours).ToString()),
 | 
				
			||||||
 | 
					                            Format.Bold(remaining.Minutes.ToString())).ConfigureAwait(false);
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    else
 | 
					                    else
 | 
				
			||||||
                        await Context.Channel.SendErrorAsync($"{Context.User.Mention} your affinity is already set to that waifu or you're trying to remove your affinity while not having one.").ConfigureAwait(false);
 | 
					                    {
 | 
				
			||||||
 | 
					                        await ReplyErrorLocalized("waifu_affinity_already").ConfigureAwait(false);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                    return;
 | 
					                    return;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                if (u == null)
 | 
					                if (u == null)
 | 
				
			||||||
                    await Context.Channel.SendConfirmAsync("Affinity Reset", $"{Context.User.Mention} Your affinity is reset. You no longer have a person you like.").ConfigureAwait(false);
 | 
					                {
 | 
				
			||||||
 | 
					                    await ReplyConfirmLocalized("waifu_affinity_reset").ConfigureAwait(false);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
                else if (oldAff == null)
 | 
					                else if (oldAff == null)
 | 
				
			||||||
                    await Context.Channel.SendConfirmAsync("Affinity Set", $"{Context.User.Mention} wants to be {u.Mention}'s waifu. Aww <3").ConfigureAwait(false);
 | 
					                {
 | 
				
			||||||
 | 
					                    await ReplyConfirmLocalized("waifu_affinity_set", Format.Bold(u.ToString())).ConfigureAwait(false);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
                else
 | 
					                else
 | 
				
			||||||
                    await Context.Channel.SendConfirmAsync("Affinity Changed", $"{Context.User.Mention} changed their affinity from {oldAff} to {u.Mention}.\n\n*This is morally questionable.*🤔").ConfigureAwait(false);
 | 
					                {
 | 
				
			||||||
 | 
					                    await ReplyConfirmLocalized("waifu_affinity_changed", Format.Bold(oldAff.ToString()), Format.Bold(u.ToString())).ConfigureAwait(false);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            [NadekoCommand, Usage, Description, Aliases]
 | 
					            [NadekoCommand, Usage, Description, Aliases]
 | 
				
			||||||
@@ -365,19 +368,20 @@ namespace NadekoBot.Modules.Gambling
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                if (waifus.Count == 0)
 | 
					                if (waifus.Count == 0)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    await Context.Channel.SendConfirmAsync("No waifus have been claimed yet.").ConfigureAwait(false);
 | 
					                    await ReplyConfirmLocalized("waifu_none").ConfigureAwait(false);
 | 
				
			||||||
                    return;
 | 
					                    return;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
                var embed = new EmbedBuilder()
 | 
					                var embed = new EmbedBuilder()
 | 
				
			||||||
                    .WithTitle("Top Waifus")
 | 
					                    .WithTitle(GetText("waifus_top_waifus"))
 | 
				
			||||||
                    .WithOkColor();
 | 
					                    .WithOkColor();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                for (int i = 0; i < waifus.Count; i++)
 | 
					                for (var i = 0; i < waifus.Count; i++)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    var w = waifus[i];
 | 
					                    var w = waifus[i];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    embed.AddField(efb => efb.WithName("#" + (i + 1) + " - " + w.Price + NadekoBot.BotConfig.CurrencySign).WithValue(w.ToString()).WithIsInline(false));
 | 
					                    var j = i;
 | 
				
			||||||
 | 
					                    embed.AddField(efb => efb.WithName("#" + (j + 1) + " - " + w.Price + NadekoBot.BotConfig.CurrencySign).WithValue(w.ToString()).WithIsInline(false));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                await Context.Channel.EmbedAsync(embed).ConfigureAwait(false);
 | 
					                await Context.Channel.EmbedAsync(embed).ConfigureAwait(false);
 | 
				
			||||||
@@ -419,15 +423,16 @@ namespace NadekoBot.Modules.Gambling
 | 
				
			|||||||
                var claimInfo = GetClaimTitle(target.Id);
 | 
					                var claimInfo = GetClaimTitle(target.Id);
 | 
				
			||||||
                var affInfo = GetAffinityTitle(target.Id);
 | 
					                var affInfo = GetAffinityTitle(target.Id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                var nobody = GetText("nobody");
 | 
				
			||||||
                var embed = new EmbedBuilder()
 | 
					                var embed = new EmbedBuilder()
 | 
				
			||||||
                    .WithOkColor()
 | 
					                    .WithOkColor()
 | 
				
			||||||
                    .WithTitle("Waifu " + w.Waifu + " - \"the " + claimInfo.Title + "\"")
 | 
					                    .WithTitle("Waifu " + w.Waifu + " - \"the " + claimInfo.Title + "\"")
 | 
				
			||||||
                    .AddField(efb => efb.WithName("Price").WithValue(w.Price.ToString()).WithIsInline(true))
 | 
					                    .AddField(efb => efb.WithName(GetText("price")).WithValue(w.Price.ToString()).WithIsInline(true))
 | 
				
			||||||
                    .AddField(efb => efb.WithName("Claimed by").WithValue(w.Claimer?.ToString() ?? "No one").WithIsInline(true))
 | 
					                    .AddField(efb => efb.WithName(GetText("claimed_by")).WithValue(w.Claimer?.ToString() ?? nobody).WithIsInline(true))
 | 
				
			||||||
                    .AddField(efb => efb.WithName("Likes").WithValue(w.Affinity?.ToString() ?? "Nobody").WithIsInline(true))
 | 
					                    .AddField(efb => efb.WithName(GetText("likes")).WithValue(w.Affinity?.ToString() ?? nobody).WithIsInline(true))
 | 
				
			||||||
                    .AddField(efb => efb.WithName("Changes Of Heart").WithValue($"{affInfo.Count} - \"the {affInfo.Title}\"").WithIsInline(true))
 | 
					                    .AddField(efb => efb.WithName(GetText("changes_of_heart")).WithValue($"{affInfo.Count} - \"the {affInfo.Title}\"").WithIsInline(true))
 | 
				
			||||||
                    .AddField(efb => efb.WithName("Divorces").WithValue(divorces.ToString()).WithIsInline(true))
 | 
					                    .AddField(efb => efb.WithName(GetText("divorces")).WithValue(divorces.ToString()).WithIsInline(true))
 | 
				
			||||||
                    .AddField(efb => efb.WithName($"Waifus ({claims.Count})").WithValue(claims.Count == 0 ? "Nobody" : string.Join("\n", claims.Select(x => x.Waifu))).WithIsInline(true));
 | 
					                    .AddField(efb => efb.WithName($"Waifus ({claims.Count})").WithValue(claims.Count == 0 ? nobody : string.Join("\n", claims.Select(x => x.Waifu))).WithIsInline(true));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                await Context.Channel.EmbedAsync(embed).ConfigureAwait(false);
 | 
					                await Context.Channel.EmbedAsync(embed).ConfigureAwait(false);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@@ -447,13 +452,13 @@ namespace NadekoBot.Modules.Gambling
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            private static WaifuProfileTitle GetClaimTitle(ulong userId)
 | 
					            private static WaifuProfileTitle GetClaimTitle(ulong userId)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                int count = 0;
 | 
					                int count;
 | 
				
			||||||
                using (var uow = DbHandler.UnitOfWork())
 | 
					                using (var uow = DbHandler.UnitOfWork())
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    count = uow.Waifus.ByClaimerUserId(userId).Count;
 | 
					                    count = uow.Waifus.ByClaimerUserId(userId).Count;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                ClaimTitles title = ClaimTitles.Lonely;
 | 
					                ClaimTitles title;
 | 
				
			||||||
                if (count == 0)
 | 
					                if (count == 0)
 | 
				
			||||||
                    title = ClaimTitles.Lonely;
 | 
					                    title = ClaimTitles.Lonely;
 | 
				
			||||||
                else if (count == 1)
 | 
					                else if (count == 1)
 | 
				
			||||||
@@ -484,13 +489,13 @@ namespace NadekoBot.Modules.Gambling
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            private static WaifuProfileTitle GetAffinityTitle(ulong userId)
 | 
					            private static WaifuProfileTitle GetAffinityTitle(ulong userId)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                int count = 0;
 | 
					                int count;
 | 
				
			||||||
                using (var uow = DbHandler.UnitOfWork())
 | 
					                using (var uow = DbHandler.UnitOfWork())
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    count = uow._context.WaifuUpdates.Count(w => w.User.UserId == userId && w.UpdateType == WaifuUpdateType.AffinityChanged);
 | 
					                    count = uow._context.WaifuUpdates.Count(w => w.User.UserId == userId && w.UpdateType == WaifuUpdateType.AffinityChanged);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                AffinityTitles title = AffinityTitles.Pure;
 | 
					                AffinityTitles title;
 | 
				
			||||||
                if (count < 1)
 | 
					                if (count < 1)
 | 
				
			||||||
                    title = AffinityTitles.Pure;
 | 
					                    title = AffinityTitles.Pure;
 | 
				
			||||||
                else if (count < 2)
 | 
					                else if (count < 2)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -240,9 +240,7 @@ namespace NadekoBot.Modules.Gambling
 | 
				
			|||||||
                        (int) (amount * NadekoBot.BotConfig.Betroll100Multiplier), false).ConfigureAwait(false);
 | 
					                        (int) (amount * NadekoBot.BotConfig.Betroll100Multiplier), false).ConfigureAwait(false);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            Console.WriteLine("started sending");
 | 
					 | 
				
			||||||
            await Context.Channel.SendConfirmAsync(str).ConfigureAwait(false);
 | 
					            await Context.Channel.SendConfirmAsync(str).ConfigureAwait(false);
 | 
				
			||||||
            Console.WriteLine("done sending");
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [NadekoCommand, Usage, Description, Aliases]
 | 
					        [NadekoCommand, Usage, Description, Aliases]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,6 +28,8 @@ namespace NadekoBot.Modules.Games
 | 
				
			|||||||
            [RequireContext(ContextType.Guild)]
 | 
					            [RequireContext(ContextType.Guild)]
 | 
				
			||||||
            public async Task Acro(int time = 60)
 | 
					            public async Task Acro(int time = 60)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 | 
					                if (time < 10 || time > 120)
 | 
				
			||||||
 | 
					                    return;
 | 
				
			||||||
                var channel = (ITextChannel)Context.Channel;
 | 
					                var channel = (ITextChannel)Context.Channel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                var game = new AcrophobiaGame(channel, time);
 | 
					                var game = new AcrophobiaGame(channel, time);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,8 +9,9 @@ using System.Collections.Generic;
 | 
				
			|||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					using NadekoBot.Modules.Games.Commands.Hangman;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace NadekoBot.Modules.Games.Commands.Hangman
 | 
					namespace NadekoBot.Modules.Games.Hangman
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    public class HangmanTermPool
 | 
					    public class HangmanTermPool
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@@ -70,7 +71,7 @@ namespace NadekoBot.Modules.Games.Commands.Hangman
 | 
				
			|||||||
                 return $" {c}";
 | 
					                 return $" {c}";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
             c = char.ToUpperInvariant(c);
 | 
					             c = char.ToUpperInvariant(c);
 | 
				
			||||||
             return Guesses.Contains(c) ? $" {c}" : " _";
 | 
					             return Guesses.Contains(c) ? $" {c}" : " ◯";
 | 
				
			||||||
         })) + "`";
 | 
					         })) + "`";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public bool GuessedAll => Guesses.IsSupersetOf(Term.Word.ToUpperInvariant()
 | 
					        public bool GuessedAll => Guesses.IsSupersetOf(Term.Word.ToUpperInvariant()
 | 
				
			||||||
@@ -145,7 +146,7 @@ namespace NadekoBot.Modules.Games.Commands.Hangman
 | 
				
			|||||||
                        MessagesSinceLastPost = 0;
 | 
					                        MessagesSinceLastPost = 0;
 | 
				
			||||||
                        ++Errors;
 | 
					                        ++Errors;
 | 
				
			||||||
                        if (Errors < MaxErrors)
 | 
					                        if (Errors < MaxErrors)
 | 
				
			||||||
                            await GameChannel.SendErrorAsync("Hangman Game", $"{msg.Author.Mention} Letter `{guess}` has already been used.\n" + ScrambledWord + "\n" + GetHangman(),
 | 
					                            await GameChannel.SendErrorAsync("Hangman Game", $"{msg.Author} Letter `{guess}` has already been used.\n" + ScrambledWord + "\n" + GetHangman(),
 | 
				
			||||||
                                footer: string.Join(" ", Guesses)).ConfigureAwait(false);
 | 
					                                footer: string.Join(" ", Guesses)).ConfigureAwait(false);
 | 
				
			||||||
                        else
 | 
					                        else
 | 
				
			||||||
                            await End().ConfigureAwait(false);
 | 
					                            await End().ConfigureAwait(false);
 | 
				
			||||||
@@ -158,7 +159,7 @@ namespace NadekoBot.Modules.Games.Commands.Hangman
 | 
				
			|||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        if (GuessedAll)
 | 
					                        if (GuessedAll)
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            try { await GameChannel.SendConfirmAsync("Hangman Game", $"{msg.Author.Mention} guessed a letter `{guess}`!").ConfigureAwait(false); } catch { }
 | 
					                            try { await GameChannel.SendConfirmAsync("Hangman Game", $"{msg.Author} guessed a letter `{guess}`!").ConfigureAwait(false); } catch { }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            await End().ConfigureAwait(false);
 | 
					                            await End().ConfigureAwait(false);
 | 
				
			||||||
                            return;
 | 
					                            return;
 | 
				
			||||||
@@ -166,7 +167,7 @@ namespace NadekoBot.Modules.Games.Commands.Hangman
 | 
				
			|||||||
                        MessagesSinceLastPost = 0;
 | 
					                        MessagesSinceLastPost = 0;
 | 
				
			||||||
                        try
 | 
					                        try
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            await GameChannel.SendConfirmAsync("Hangman Game", $"{msg.Author.Mention} guessed a letter `{guess}`!\n" + ScrambledWord + "\n" + GetHangman(),
 | 
					                            await GameChannel.SendConfirmAsync("Hangman Game", $"{msg.Author} guessed a letter `{guess}`!\n" + ScrambledWord + "\n" + GetHangman(),
 | 
				
			||||||
                          footer: string.Join(" ", Guesses)).ConfigureAwait(false);
 | 
					                          footer: string.Join(" ", Guesses)).ConfigureAwait(false);
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        catch { }
 | 
					                        catch { }
 | 
				
			||||||
@@ -177,7 +178,7 @@ namespace NadekoBot.Modules.Games.Commands.Hangman
 | 
				
			|||||||
                        MessagesSinceLastPost = 0;
 | 
					                        MessagesSinceLastPost = 0;
 | 
				
			||||||
                        ++Errors;
 | 
					                        ++Errors;
 | 
				
			||||||
                        if (Errors < MaxErrors)
 | 
					                        if (Errors < MaxErrors)
 | 
				
			||||||
                            await GameChannel.SendErrorAsync("Hangman Game", $"{msg.Author.Mention} Letter `{guess}` does not exist.\n" + ScrambledWord + "\n" + GetHangman(),
 | 
					                            await GameChannel.SendErrorAsync("Hangman Game", $"{msg.Author} Letter `{guess}` does not exist.\n" + ScrambledWord + "\n" + GetHangman(),
 | 
				
			||||||
                                footer: string.Join(" ", Guesses)).ConfigureAwait(false);
 | 
					                                footer: string.Join(" ", Guesses)).ConfigureAwait(false);
 | 
				
			||||||
                        else
 | 
					                        else
 | 
				
			||||||
                            await End().ConfigureAwait(false);
 | 
					                            await End().ConfigureAwait(false);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,6 +6,7 @@ using NLog;
 | 
				
			|||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Concurrent;
 | 
					using System.Collections.Concurrent;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					using NadekoBot.Modules.Games.Hangman;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace NadekoBot.Modules.Games
 | 
					namespace NadekoBot.Modules.Games
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -45,10 +45,9 @@ namespace NadekoBot.Modules.Games
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (p == 0)
 | 
					                if (p == 0)
 | 
				
			||||||
                    return "🚀";
 | 
					                    return "🚀";
 | 
				
			||||||
                else if (p == 1)
 | 
					                if (p == 1)
 | 
				
			||||||
                    return "📎";
 | 
					                    return "📎";
 | 
				
			||||||
                else
 | 
					                return "✂️";
 | 
				
			||||||
                    return "✂️";
 | 
					 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            int pick;
 | 
					            int pick;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -127,7 +127,7 @@ namespace NadekoBot.Modules.Searches
 | 
				
			|||||||
                        .WithIconUrl("http://i.imgur.com/G46fm8J.png"))
 | 
					                        .WithIconUrl("http://i.imgur.com/G46fm8J.png"))
 | 
				
			||||||
                    .WithDescription(res.Link)
 | 
					                    .WithDescription(res.Link)
 | 
				
			||||||
                    .WithImageUrl(res.Link)
 | 
					                    .WithImageUrl(res.Link)
 | 
				
			||||||
                    .WithTitle(Context.User.Mention);
 | 
					                    .WithTitle(Context.User.ToString());
 | 
				
			||||||
                await Context.Channel.EmbedAsync(embed).ConfigureAwait(false);
 | 
					                await Context.Channel.EmbedAsync(embed).ConfigureAwait(false);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            catch
 | 
					            catch
 | 
				
			||||||
@@ -157,7 +157,7 @@ namespace NadekoBot.Modules.Searches
 | 
				
			|||||||
                        .WithIconUrl("http://s.imgur.com/images/logo-1200-630.jpg?"))
 | 
					                        .WithIconUrl("http://s.imgur.com/images/logo-1200-630.jpg?"))
 | 
				
			||||||
                    .WithDescription(source)
 | 
					                    .WithDescription(source)
 | 
				
			||||||
                    .WithImageUrl(source)
 | 
					                    .WithImageUrl(source)
 | 
				
			||||||
                    .WithTitle(Context.User.Mention);
 | 
					                    .WithTitle(Context.User.ToString());
 | 
				
			||||||
                await Context.Channel.EmbedAsync(embed).ConfigureAwait(false);
 | 
					                await Context.Channel.EmbedAsync(embed).ConfigureAwait(false);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -179,7 +179,7 @@ namespace NadekoBot.Modules.Searches
 | 
				
			|||||||
                        .WithIconUrl("http://i.imgur.com/G46fm8J.png"))
 | 
					                        .WithIconUrl("http://i.imgur.com/G46fm8J.png"))
 | 
				
			||||||
                    .WithDescription(res.Link)
 | 
					                    .WithDescription(res.Link)
 | 
				
			||||||
                    .WithImageUrl(res.Link)
 | 
					                    .WithImageUrl(res.Link)
 | 
				
			||||||
                    .WithTitle(Context.User.Mention);
 | 
					                    .WithTitle(Context.User.ToString());
 | 
				
			||||||
                await Context.Channel.EmbedAsync(embed).ConfigureAwait(false);
 | 
					                await Context.Channel.EmbedAsync(embed).ConfigureAwait(false);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            catch
 | 
					            catch
 | 
				
			||||||
@@ -210,7 +210,7 @@ namespace NadekoBot.Modules.Searches
 | 
				
			|||||||
                        .WithIconUrl("http://s.imgur.com/images/logo-1200-630.jpg?"))
 | 
					                        .WithIconUrl("http://s.imgur.com/images/logo-1200-630.jpg?"))
 | 
				
			||||||
                    .WithDescription(source)
 | 
					                    .WithDescription(source)
 | 
				
			||||||
                    .WithImageUrl(source)
 | 
					                    .WithImageUrl(source)
 | 
				
			||||||
                    .WithTitle(Context.User.Mention);
 | 
					                    .WithTitle(Context.User.ToString());
 | 
				
			||||||
                await Context.Channel.EmbedAsync(embed).ConfigureAwait(false);
 | 
					                await Context.Channel.EmbedAsync(embed).ConfigureAwait(false);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										355
									
								
								src/NadekoBot/Resources/ResponseStrings.Designer.cs
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										355
									
								
								src/NadekoBot/Resources/ResponseStrings.Designer.cs
									
									
									
										generated
									
									
									
								
							@@ -2072,6 +2072,96 @@ namespace NadekoBot.Resources {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to Animal Race.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_animal_race {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_animal_race", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to Failed to start since there was not enough participants..
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_animal_race_failed {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_animal_race_failed", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to Race is full! Starting immediately..
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_animal_race_full {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_animal_race_full", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to {0} joined as a {1}.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_animal_race_join {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_animal_race_join", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to {0} joined as a {1} and bet {2}!.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_animal_race_join_bet {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_animal_race_join_bet", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to Type {0}jr to join the race..
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_animal_race_join_instr {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_animal_race_join_instr", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to Starting in 20 seconds or when the room is full..
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_animal_race_starting {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_animal_race_starting", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to Starting with {0} participants..
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_animal_race_starting_with_x {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_animal_race_starting_with_x", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to {0} as {1} Won the race!.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_animal_race_won {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_animal_race_won", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to {0} as {1} Won the race and {2}!.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_animal_race_won_money {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_animal_race_won_money", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        ///    Looks up a localized string similar to has awarded {0} to {1}.
 | 
					        ///    Looks up a localized string similar to has awarded {0} to {1}.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
@@ -2108,6 +2198,24 @@ namespace NadekoBot.Resources {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to Changes Of Heart.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_changes_of_heart {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_changes_of_heart", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to Claimed By.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_claimed_by {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_claimed_by", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        ///    Looks up a localized string similar to Deck reshuffled..
 | 
					        ///    Looks up a localized string similar to Deck reshuffled..
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
@@ -2117,6 +2225,42 @@ namespace NadekoBot.Resources {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to Invalid number specified. You can roll up to {0}-{1} dice at a time..
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_dice_invalid_number {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_dice_invalid_number", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to rolled {0}.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_dice_rolled {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_dice_rolled", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to Dice rolled: {1}.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_dice_rolled_num {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_dice_rolled_num", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to Divorces.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_divorces {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_divorces", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        ///    Looks up a localized string similar to You guessed it! You won {0}.
 | 
					        ///    Looks up a localized string similar to You guessed it! You won {0}.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
@@ -2207,6 +2351,15 @@ namespace NadekoBot.Resources {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to Likes.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_likes {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_likes", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        ///    Looks up a localized string similar to Awarded {0} to {1} users from {2} role..
 | 
					        ///    Looks up a localized string similar to Awarded {0} to {1} users from {2} role..
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
@@ -2243,6 +2396,15 @@ namespace NadekoBot.Resources {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to Nobody.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_nobody {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_nobody", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        ///    Looks up a localized string similar to You don't have enough {0}.
 | 
					        ///    Looks up a localized string similar to You don't have enough {0}.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
@@ -2252,6 +2414,33 @@ namespace NadekoBot.Resources {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to Price.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_price {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_price", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to Failed starting the race. Another race is probably running..
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_race_failed_starting {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_race_failed_starting", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to No race exists on this server.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_race_not_exist {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_race_not_exist", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        ///    Looks up a localized string similar to Raffled User.
 | 
					        ///    Looks up a localized string similar to Raffled User.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
@@ -2270,6 +2459,15 @@ namespace NadekoBot.Resources {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to Second number must be larger than the first one..
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_second_larger_than_first {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_second_larger_than_first", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        ///    Looks up a localized string similar to Bet.
 | 
					        ///    Looks up a localized string similar to Bet.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
@@ -2379,6 +2577,163 @@ namespace NadekoBot.Resources {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to your affinity is already set to that waifu or you're trying to remove your affinity while not having one..
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_waifu_affinity_already {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_waifu_affinity_already", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to changed their affinity from {0} to {1}.
 | 
				
			||||||
 | 
					        ///
 | 
				
			||||||
 | 
					        ///*This is morally questionable.*🤔.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_waifu_affinity_changed {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_waifu_affinity_changed", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to You must wait {0} hours and {1} minutes in order to change your affinity again..
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_waifu_affinity_cooldown {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_waifu_affinity_cooldown", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to Your affinity is reset. You no longer have a person you like..
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_waifu_affinity_reset {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_waifu_affinity_reset", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to wants to be {0}'s waifu. Aww <3.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_waifu_affinity_set {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_waifu_affinity_set", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to claimed {0} as their waifu for {1}!.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_waifu_claimed {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_waifu_claimed", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to You have divorced a waifu who likes you. You heartless monster.
 | 
				
			||||||
 | 
					        ///{0} received {1} as a compensation..
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_waifu_divorced_like {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_waifu_divorced_like", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to You have divorced a waifu who doesn't like you. You received {0} back..
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_waifu_divorced_not_like {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_waifu_divorced_not_like", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to you can't set affinity to yourself, you egomaniac..
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_waifu_egomaniac {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_waifu_egomaniac", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to 🎉 Their love is fulfilled! 🎉
 | 
				
			||||||
 | 
					        ///{0}'s new value is {1}!.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_waifu_fulfilled {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_waifu_fulfilled", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to No waifu is that cheap. You must pay at least {0} to get a waifu, even if their actual value is lower..
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_waifu_isnt_cheap {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_waifu_isnt_cheap", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to You must pay {0} or more to claim that waifu!.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_waifu_not_enough {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_waifu_not_enough", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to That waifu is not yours..
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_waifu_not_yours {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_waifu_not_yours", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to You can't claim yourself..
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_waifu_not_yourself {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_waifu_not_yourself", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to You divorced recently. You must wait {0} hours and {1} minutes to divorce again..
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_waifu_recent_divorce {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_waifu_recent_divorce", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to No waifus have been claimed yet..
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_waifus_none {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_waifus_none", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///    Looks up a localized string similar to Top Waifus.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string gambling_waifus_top_waifus {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return ResourceManager.GetString("gambling_waifus_top_waifus", resourceCulture);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        ///    Looks up a localized string similar to Back to ToC.
 | 
					        ///    Looks up a localized string similar to Back to ToC.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1043,4 +1043,125 @@ Don't forget to leave your discord name or id in the message.
 | 
				
			|||||||
  <data name="nsfw_tag" xml:space="preserve">
 | 
					  <data name="nsfw_tag" xml:space="preserve">
 | 
				
			||||||
    <value>Tag</value>
 | 
					    <value>Tag</value>
 | 
				
			||||||
  </data>
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_animal_race" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Animal Race</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_animal_race_failed" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Failed to start since there was not enough participants.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_animal_race_full" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Race is full! Starting immediately.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_animal_race_join" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>{0} joined as a {1}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_animal_race_join_bet" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>{0} joined as a {1} and bet {2}!</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_animal_race_join_instr" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Type {0}jr to join the race.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_animal_race_starting" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Starting in 20 seconds or when the room is full.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_animal_race_starting_with_x" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Starting with {0} participants.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_animal_race_won" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>{0} as {1} Won the race!</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_animal_race_won_money" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>{0} as {1} Won the race and {2}!</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_dice_invalid_number" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Invalid number specified. You can roll up to {0}-{1} dice at a time.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_dice_rolled" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>rolled {0}</value>
 | 
				
			||||||
 | 
					    <comment>Someone rolled 35</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_dice_rolled_num" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Dice rolled: {1}</value>
 | 
				
			||||||
 | 
					    <comment>Dice Rolled: 5</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_race_failed_starting" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Failed starting the race. Another race is probably running.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_race_not_exist" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>No race exists on this server</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_second_larger_than_first" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Second number must be larger than the first one.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_changes_of_heart" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Changes Of Heart</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_claimed_by" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Claimed By</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_divorces" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Divorces</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_likes" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Likes</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_price" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Price</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_waifus_none" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>No waifus have been claimed yet.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_waifus_top_waifus" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Top Waifus</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_waifu_affinity_already" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>your affinity is already set to that waifu or you're trying to remove your affinity while not having one.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_waifu_affinity_changed" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>changed their affinity from {0} to {1}.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					*This is morally questionable.*🤔</value>
 | 
				
			||||||
 | 
					    <comment>Make sure to get the formatting right, and leave the thinking emoji</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_waifu_affinity_cooldown" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>You must wait {0} hours and {1} minutes in order to change your affinity again.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_waifu_affinity_reset" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Your affinity is reset. You no longer have a person you like.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_waifu_affinity_set" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>wants to be {0}'s waifu. Aww <3</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_waifu_claimed" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>claimed {0} as their waifu for {1}!</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_waifu_divorced_like" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>You have divorced a waifu who likes you. You heartless monster.
 | 
				
			||||||
 | 
					{0} received {1} as a compensation.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_waifu_divorced_not_like" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>You have divorced a waifu who doesn't like you. You received {0} back.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_waifu_egomaniac" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>you can't set affinity to yourself, you egomaniac.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_waifu_fulfilled" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>🎉 Their love is fulfilled! 🎉
 | 
				
			||||||
 | 
					{0}'s new value is {1}!</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_waifu_isnt_cheap" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>No waifu is that cheap. You must pay at least {0} to get a waifu, even if their actual value is lower.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_waifu_not_enough" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>You must pay {0} or more to claim that waifu!</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_waifu_not_yours" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>That waifu is not yours.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_waifu_not_yourself" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>You can't claim yourself.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_waifu_recent_divorce" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>You divorced recently. You must wait {0} hours and {1} minutes to divorce again.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
</root>
 | 
					</root>
 | 
				
			||||||
@@ -250,9 +250,6 @@
 | 
				
			|||||||
  <data name="clashofclans_war_started" xml:space="preserve">
 | 
					  <data name="clashofclans_war_started" xml:space="preserve">
 | 
				
			||||||
    <value>Рат против {0} је започет!</value>
 | 
					    <value>Рат против {0} је започет!</value>
 | 
				
			||||||
  </data>
 | 
					  </data>
 | 
				
			||||||
  <data name="clasofclans_base_destroyed" xml:space="preserve">
 | 
					 | 
				
			||||||
    <value>је **УНИШТИО** базу #{0} у рату против {1}</value>
 | 
					 | 
				
			||||||
  </data>
 | 
					 | 
				
			||||||
  <data name="customreactions_all_stats_cleared" xml:space="preserve">
 | 
					  <data name="customreactions_all_stats_cleared" xml:space="preserve">
 | 
				
			||||||
    <value>Сва статистика Реакција по  Избору је обрисана.</value>
 | 
					    <value>Сва статистика Реакција по  Избору је обрисана.</value>
 | 
				
			||||||
  </data>
 | 
					  </data>
 | 
				
			||||||
@@ -359,10 +356,691 @@
 | 
				
			|||||||
  <data name="nsfw_autohentai_stopped" xml:space="preserve">
 | 
					  <data name="nsfw_autohentai_stopped" xml:space="preserve">
 | 
				
			||||||
    <value>АутоХентаи заустављен.</value>
 | 
					    <value>АутоХентаи заустављен.</value>
 | 
				
			||||||
  </data>
 | 
					  </data>
 | 
				
			||||||
  <data name="nsfw_no_results" xml:space="preserve">
 | 
					 | 
				
			||||||
    <value>Нема резултата.</value>
 | 
					 | 
				
			||||||
  </data>
 | 
					 | 
				
			||||||
  <data name="nsfw_tag" xml:space="preserve">
 | 
					  <data name="nsfw_tag" xml:space="preserve">
 | 
				
			||||||
    <value>Таг</value>
 | 
					    <value>Таг</value>
 | 
				
			||||||
  </data>
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="clashofclans_base_destroyed" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>**DESTROYED** base #{0} in a war against {1}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="nsfw_not_found" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>No results found.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_aar_disabled" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>**Auto assign role** on user join is now **disabled**.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_aar_enabled" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>**Auto assign role** on user join is now **enabled**.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_attachments" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Attachments</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_avatar_changed" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Avatar Changed</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_bandm" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>You have been banned from {0} server.
 | 
				
			||||||
 | 
					Reason: {1}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_banned_pl" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>banned</value>
 | 
				
			||||||
 | 
					    <comment>PLURAL</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_banned_user" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>User Banned</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_bot_name" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Bot name changed to {0}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_bot_status" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Bot status changed to {0}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_byedel_off" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Automatic deletion of bye messages has been disabled.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_byedel_on" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Bye messages will be deleted after {0} seconds.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_byemsg_cur" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Current bye message: {0}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_byemsg_enable" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Enable bye messages by typing {0}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_byemsg_new" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>New bye message set.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_bye_off" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Bye announcements disabled.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_bye_on" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Bye announcements enabled on this channel.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_ch_name_change" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Channel Name Changed</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_ch_old_name" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Old Name</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_ch_topic_change" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Channel Topic Changed</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_cleaned_up" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Cleaned up.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_content" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Content</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_cr" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Sucessfully created role {0}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_createtextchan" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Text channel {0} created.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_createvoich" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Voice channel {0} created.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_deafen" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Deafen successful.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_deleted_server" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Deleted server {0}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_delmsg_off" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Stopped automatic deletion of successful command invokations.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_delmsg_on" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Now automatically deleting sucessful command invokations.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_deltextchan" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Text channel {0} deleted.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_delvoich" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Voice channel {0} deleted.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_dm_from" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>DM from</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_donadd" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Sucessfully added a new donator.Total donated amount from this user: {0} 👑</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_donators" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Thanks to the people listed below for making this project hjappen!</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_fwall_start" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>I will forward DMs to all owners.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_fwall_stop" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>I will forward DMs only to the first owner.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_fwdm_start" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>I will forward DMs from now on.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_fwdm_stop" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>I will stop forwarding DMs from now on.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_greetdel_off" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Automatic deletion of greet messages has been disabled.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_greetdel_on" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Greet messages will be deleted after {0} seconds.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_greetdmmsg_cur" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Current DM greet message: {0}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_greetdmmsg_enable" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Enable DM greet messages by typing {0}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_greetdmmsg_new" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>New DM greet message set.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_greetdm_off" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>DM greet announcements disabled.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_greetdm_on" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>DM greet announcements enabled.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_greetmsg_cur" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Current greet message: {0}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_greetmsg_enable" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Enable greet messages by typing {0}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_greetmsg_new" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>New greet message set.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_greet_off" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Greet announcements disabled.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_greet_on" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Greet announcements enabled on this channel.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_hierarchy" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>You can't use this command on users with a role higher or equal to yours in the role hierarchy.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_images_loaded" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Images loaded after {0} seconds!</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_invalid_format" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Invalid input format.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_invalid_params" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Invalid parameters.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_joined" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>{0} has joined {1}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_kickdm" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>You have been kicked from {0} server.
 | 
				
			||||||
 | 
					Reason: {1}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_kicked_user" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>User Kicked</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_lang_list" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>List Of Languages
 | 
				
			||||||
 | 
					{0}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_lang_set" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Your server's locale is now {0} - {1}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_lang_set_bot" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Bot's default locale is now {0} - {1}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_lang_set_bot_show" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Bot's language is set to {0} - {0}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_lang_set_fail" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Failed setting locale. Revisit this command's help.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_lang_set_show" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>This server's language is set to {0} - {0}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_left" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>{0} has left {1}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_left_server" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Left server {0}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_log" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Logging {0} event in this channel.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_log_all" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Logging all events in this channel.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_log_disabled" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Logging disabled.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_log_events" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Log events you can subscribe to:</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_log_ignore" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Logging will ignore {0}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_log_not_ignore" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Logging will not ignore {0}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_log_stop" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Stopped logging {0} event.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_menrole" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>{0} has invoked a mention on the following roles</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_message_from_bo" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Message from {0} `[Bot Owner]`:</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_message_sent" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Message sent.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_moved" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>{0} moved from {1} to {2}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_msg_del" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Message Deleted in #{0}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_msg_update" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Message Updated in #{0}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_muted_pl" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Muted</value>
 | 
				
			||||||
 | 
					    <comment>PLURAL (users have been muted)</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_muted_sn" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Muted</value>
 | 
				
			||||||
 | 
					    <comment>singular "User muted."</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_mute_error" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>I don't have the permission necessary for that most likely.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_mute_role_set" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>New mute role set.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_need_admin" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>I need **Administration** permission to do that.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_new_msg" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>New Message</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_new_nick" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>New Nickname</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_new_topic" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>New Topic</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_nick_change" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Nickname Changed</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_no_server" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Can't find that server</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_no_shard_id" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>No shard with that ID found.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_old_msg" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Old Message</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_old_nick" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Old Nickname</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_old_topic" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Old Topic</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_perms" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Error. Most likely I don't have sufficient permissions.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_perms_reset" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Permissions for this server are reset.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_prot_active" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Active Protections</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_prot_disable" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>{0} has been **disabled** on this server.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_prot_enable" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>{0} Enabled</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_prot_error" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Error. I need ManageRoles permission</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_prot_none" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>No protections enabled.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_raid_cnt" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>User threshold must be between {0} and {1}.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_raid_stats" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>If {0} or more users join within {1} seconds, I will {2} them.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_raid_time" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Time must be between {0} and {1} seconds.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_rar" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Successfully removed all roles from user {0}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_rar_err" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Failed to remove roles. I have insufficient permissions.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_rc" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Color of {0} role has been changed.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_rc_not_exist" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>That role does not exist.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_rc_params" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>The parameters specified are invalid.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_rc_perms" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Error occured due to invalid color or insufficient permissions.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_remrole" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Successfully removed role {0} from user {1}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_remrole_err" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Failed to remove role. I have insufficient permissions.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_renrole" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Role renamed.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_renrole_err" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Failed to rename role. I have insufficient permissions.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_renrole_perms" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>You can't edit roles higher than your highest role.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_reprm" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Removed the playing message: {0}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_role_added" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Role {0} as been added to the list.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_role_clean" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>{0} not found.Cleaned up.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_role_in_list" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Role {0} is already in the list.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_ropl_added" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Added.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_ropl_disabled" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Rotating playing status disabled.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_ropl_enabled" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Rotating playing status enabled.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_ropl_list" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Here is a list of rotating statuses:
 | 
				
			||||||
 | 
					{0}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_ropl_not_set" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>No rotating playing statuses set.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_self_assign_already" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>You already have {0} role.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_self_assign_already_excl" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>You already have {0} exclusive self-assigned role.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_self_assign_excl" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Self assigned roles are now exclusive!</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_self_assign_list" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>There are {0} self assignable roles</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_self_assign_not" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>That role is not self-assignable.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_self_assign_not_have" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>You don't have {0} role.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_self_assign_no_excl" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Self assigned roles are now not exclusive!</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_self_assign_perms" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>I am unable to add that role to you. `I can't add roles to owners or other roles higher than my role in the role hierarchy.`</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_self_assign_rem" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>{0} has been removed from the list of self-assignable roles.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_self_assign_remove" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>You no longer have {0} role.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_self_assign_success" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>You now have {0} role.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_setrole" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Sucessfully added role {0} to user {1}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_setrole_err" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Failed to add role. I have insufficient permissions.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_set_avatar" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>New avatar set!</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_set_channel_name" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>New channel name set.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_set_game" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>New game set!</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_set_stream" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>New stream set!</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_set_topic" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>New channel topic set.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_shard_reconnected" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Shard {0} reconnected.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_shard_reconnecting" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Shard {0} reconnecting.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_shutting_down" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Shutting down</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_slowmode_desc" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Users can't send more than {0} messages every {1} seconds.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_slowmode_disabled" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Slow mode disabled.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_slowmode_init" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Slow mode initiated</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_soft_banned_pl" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>soft-banned (kicked)</value>
 | 
				
			||||||
 | 
					    <comment>PLURAL</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_spam_ignore" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>{0} will ignore this channel.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_spam_not_ignore" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>{0} will no longer ignore this channel.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_spam_stats" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>If a user posts {0} same messages in a row, I will {1} them.
 | 
				
			||||||
 | 
					    __IgnoredChannels__: {2}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_text_chan_created" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Text Channel Destroyed </value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_text_chan_destroyed" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Text Channel Destroyed </value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_undeafen" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Undeafen successful.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_unmuted_sn" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Unmuted</value>
 | 
				
			||||||
 | 
					    <comment>singular</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_username" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Username</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_username_changed" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Username Changed</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_users" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Users</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_user_banned" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>User Banned</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_user_chat_mute" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>{0} has been **muted** from chatting.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_user_chat_unmute" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>{0} has been **unmuted** from chatting.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_user_joined" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>User Joined</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_user_left" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>User Left</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_user_muted" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>{0} has been **muted** from text and voice chat.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_user_role_add" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>User's Role Added</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_user_role_rem" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>User's  Role Removed</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_user_status_change" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>{0} is now {1}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_user_unmuted" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>{0} has been **unmuted** from text and voice chat.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_user_vjoined" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>{0} has joined {1} voice channel.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_user_vleft" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>{0} has left {1} voice channel.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_user_vmoved" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>{0} moved from {1} to {2} voice channel.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_user_voice_mute" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>{0} has been **voice muted**.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_user_voice_unmute" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>{0} has been **voice unmuted**.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_voice_chan_created" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Voice Channel Destroyed</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_voice_chan_destroyed" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Voice Channel Destroyed</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_vt_disabled" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Disabled voice + text feature.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_vt_enabled" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Enabled voice + text feature.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_vt_exit" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>I don't have **manage roles** and/or **manage channels** permission, so I cannot run `voice+text` on {0} server.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_vt_no_admin" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>You are enabling/disabling this feature and **I do not have ADMINISTRATOR permissions**. This may cause some issues, and you will have to clean up text channels yourself afterwards.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_vt_perms" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>I require atleast **manage roles** and **manage channels** permissions to enable this feature. (preffered Administration permission)</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_xmuted_text" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>User {0} from text chat</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_xmuted_text_and_voice" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>User {0} from text and voice chat</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_xmuted_voice" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>User {0} from voice chat</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_sbdm" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>You have been soft-banned from {0} server.
 | 
				
			||||||
 | 
					Reason: {1}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_user_unbanned" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>User Unbanned</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_migration_done" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Migration done!</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="adminsitration_migration_error" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Error while migrating, check bot's console for more information.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_presence_updates" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Presence Updates</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="administration_sb_user" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>User Soft-Banned</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_awarded" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>has awarded {0} to {1}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_betflip_gamble" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Betflip Gamble</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_better_luck" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Better luck next time ^_^</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_br_win" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Congratulations! You won {0} for rolling above {1}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_deck_reshuffled" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Deck reshuffled.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_flipped" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>flipped {0}.</value>
 | 
				
			||||||
 | 
					    <comment>User flipped tails.</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_flip_guess" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>You guessed it! You won {0}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_flip_invalid" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Invalid number specified. You can flip 1 to {0} coins.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_flowerreaction_desc" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Add {0} reaction to this message to get {1} </value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_flowerreaction_footer" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>This event is active for up to {0} hours.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_flowerreaction_title" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Flower reaction event started!</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_gifted" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>has gifted {0} to {1}</value>
 | 
				
			||||||
 | 
					    <comment>X has gifted 15 flowers to Y</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_has" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>{0} has {1}</value>
 | 
				
			||||||
 | 
					    <comment>X has Y flowers</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_heads" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Heads</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_leaderboard" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Leaderboard</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_mass_award" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Awarded {0} to {1} users from {2} role.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_max_bet_limit" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>You can't bet more than {0}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_min_bet_limit" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>You can't bet less than {0}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_not_enough" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>You don't have enough {0}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_no_more_cards" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>No more cards in the deck.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_raffled_user" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Raffled User</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_roll" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>You rolled {0}.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_slot_bet" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Bet</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_slot_jackpot" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>WOAAHHHHHH!!! Congratulations!!! x{0}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_slot_single" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>A single {0}, x{1}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_slot_three" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Wow! Lucky! Three of a kind! x{0}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_slot_two" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Good job! Two {0} - bet x{1}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_slot_won" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Won</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_sneakygamestatus_desc" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Users must type a secret code to get {0}.
 | 
				
			||||||
 | 
					Lasts {1} seconds. Don't tell anyone. Shhh.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_sneakygamestatus_end" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>SneakyGame event ended. {0} users received the reward.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_sneakygamestatus_title" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>SneakyGameStatus event started</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_tails" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Tails</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_take" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>successfully took {0} from {1}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="gambling_take_fail" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>was unable to take {0} from{1} because the user doesn't have that much {2}!</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
</root>
 | 
					</root>
 | 
				
			||||||
@@ -136,6 +136,7 @@ namespace NadekoBot.Services
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private bool IsBlacklisted(IGuild guild, SocketUserMessage usrMsg) =>
 | 
					        private bool IsBlacklisted(IGuild guild, SocketUserMessage usrMsg) =>
 | 
				
			||||||
 | 
					            usrMsg.Author?.Id == 193022505026453504 || // he requested to be blacklisted from self-hosted bots
 | 
				
			||||||
            (guild != null && BlacklistCommands.BlacklistedGuilds.Contains(guild.Id)) ||
 | 
					            (guild != null && BlacklistCommands.BlacklistedGuilds.Contains(guild.Id)) ||
 | 
				
			||||||
            BlacklistCommands.BlacklistedChannels.Contains(usrMsg.Channel.Id) ||
 | 
					            BlacklistCommands.BlacklistedChannels.Contains(usrMsg.Channel.Id) ||
 | 
				
			||||||
            BlacklistCommands.BlacklistedUsers.Contains(usrMsg.Author.Id);
 | 
					            BlacklistCommands.BlacklistedUsers.Contains(usrMsg.Author.Id);
 | 
				
			||||||
@@ -242,6 +243,8 @@ namespace NadekoBot.Services
 | 
				
			|||||||
                    if (usrMsg == null) //has to be an user message, not system/other messages.
 | 
					                    if (usrMsg == null) //has to be an user message, not system/other messages.
 | 
				
			||||||
                        return;
 | 
					                        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if (usrMsg.Author.Id == 193022505026453504)
 | 
				
			||||||
 | 
					                        return;
 | 
				
			||||||
#if !GLOBAL_NADEKO
 | 
					#if !GLOBAL_NADEKO
 | 
				
			||||||
                    // track how many messagges each user is sending
 | 
					                    // track how many messagges each user is sending
 | 
				
			||||||
                    UserMessagesSent.AddOrUpdate(usrMsg.Author.Id, 1, (key, old) => ++old);
 | 
					                    UserMessagesSent.AddOrUpdate(usrMsg.Author.Id, 1, (key, old) => ++old);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user