From e58141994555d8a62eaa1bf39af7e9988b6494c4 Mon Sep 17 00:00:00 2001 From: Master Kwoth Date: Wed, 1 Nov 2017 14:01:42 +0100 Subject: [PATCH 1/3] Working on .novel and .waifutransfer --- .../Modules/Gambling/Services/WaifuService.cs | 30 +++++++++++++++++-- .../Modules/Gambling/WaifuClaimCommands.cs | 25 ++++++++++++---- .../Modules/Searches/AnimeSearchCommands.cs | 26 ++++++++++++++++ .../Modules/Searches/Common/NovelData.cs | 20 +++++++++++++ .../Searches/Services/AnimeSearchService.cs | 27 +++++++++++++++++ 5 files changed, 121 insertions(+), 7 deletions(-) create mode 100644 NadekoBot.Core/Modules/Searches/Common/NovelData.cs diff --git a/NadekoBot.Core/Modules/Gambling/Services/WaifuService.cs b/NadekoBot.Core/Modules/Gambling/Services/WaifuService.cs index 17ccb4eb..7c67c638 100644 --- a/NadekoBot.Core/Modules/Gambling/Services/WaifuService.cs +++ b/NadekoBot.Core/Modules/Gambling/Services/WaifuService.cs @@ -1,14 +1,40 @@ -using NadekoBot.Core.Services; +using Discord; +using NadekoBot.Core.Services; using System; using System.Collections.Concurrent; +using System.Threading.Tasks; namespace NadekoBot.Modules.Gambling.Services { public class WaifuService : INService { + private readonly DbService _db; + public ConcurrentDictionary DivorceCooldowns { get; } = new ConcurrentDictionary(); public ConcurrentDictionary AffinityCooldowns { get; } = new ConcurrentDictionary(); - + public WaifuService(DbService db) + { + _db = db; + } + + public async Task WaifuTransfer(IUser owner, ulong waifuId, IUser newOwner) + { + using (var uow = _db.UnitOfWork) + { + var waifu = uow.Waifus.ByWaifuUserId(waifuId); + var ownerUser = uow.DiscordUsers.GetOrCreate(owner); + + // owner has to be the owner of the waifu + if (waifu.ClaimerId != ownerUser.Id) + return false; + + //new claimerId is the id of the new owner + var newOwnerUser = uow.DiscordUsers.GetOrCreate(newOwner); + waifu.ClaimerId = newOwnerUser.Id; + + await uow.CompleteAsync().ConfigureAwait(false); + } + } } } diff --git a/NadekoBot.Core/Modules/Gambling/WaifuClaimCommands.cs b/NadekoBot.Core/Modules/Gambling/WaifuClaimCommands.cs index 630a1652..b0ae970d 100644 --- a/NadekoBot.Core/Modules/Gambling/WaifuClaimCommands.cs +++ b/NadekoBot.Core/Modules/Gambling/WaifuClaimCommands.cs @@ -55,6 +55,11 @@ namespace NadekoBot.Modules.Gambling InsufficientAmount } + private static readonly TimeSpan _affinityLimit = TimeSpan.FromMinutes(30); + private readonly IBotConfigProvider _bc; + private readonly CurrencyService _cs; + private readonly DbService _db; + public WaifuClaimCommands(IBotConfigProvider bc, CurrencyService cs, DbService db) { _bc = bc; @@ -183,6 +188,20 @@ namespace NadekoBot.Modules.Gambling await Context.Channel.SendConfirmAsync(Context.User.Mention + msg).ConfigureAwait(false); } + [NadekoCommand, Usage, Description, Aliases] + [RequireContext(ContextType.Guild)] + public async Task WaifuTransfer(IGuildUser waifu, IGuildUser newOwner) + { + if(!await _service.WaifuTransfer(waifu.Id, newOwner.Id) + .ConfigureAwait(false)) + { + await ReplyErrorLocalized("waifu_transfer_fail").ConfigureAwait(false); + return; + } + + await ReplyConfirmLocalized("waifu_transfer_success").ConfigureAwait(false); + } + public enum DivorceResult { Success, @@ -274,11 +293,6 @@ namespace NadekoBot.Modules.Gambling } } - private static readonly TimeSpan _affinityLimit = TimeSpan.FromMinutes(30); - private readonly IBotConfigProvider _bc; - private readonly CurrencyService _cs; - private readonly DbService _db; - [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] public async Task WaifuClaimerAffinity([Remainder]IGuildUser u = null) @@ -299,6 +313,7 @@ namespace NadekoBot.Modules.Gambling var now = DateTime.UtcNow; if (w?.Affinity?.UserId == u?.Id) { + //todo don't let people change affinity on different shards } else if (_service.AffinityCooldowns.AddOrUpdate(Context.User.Id, now, diff --git a/NadekoBot.Core/Modules/Searches/AnimeSearchCommands.cs b/NadekoBot.Core/Modules/Searches/AnimeSearchCommands.cs index f6825b7d..d6eb5839 100644 --- a/NadekoBot.Core/Modules/Searches/AnimeSearchCommands.cs +++ b/NadekoBot.Core/Modules/Searches/AnimeSearchCommands.cs @@ -16,6 +16,32 @@ namespace NadekoBot.Modules.Searches [Group] public class AnimeSearchCommands : NadekoSubmodule { + [NadekoCommand, Usage, Description, Aliases] + public async Task Novel([Remainder] string query) + { + if (string.IsNullOrWhiteSpace(query)) + return; + + var novelData = await _service.GetNovelData(query).ConfigureAwait(false); + + if (novelData == null) + { + await ReplyErrorLocalized("failed_finding_novel").ConfigureAwait(false); + return; + } + + var embed = new EmbedBuilder().WithColor(NadekoBot.OkColor) + .WithDescription(novelData.Description.Replace("
", Environment.NewLine)) + .WithTitle(novelData.Title) + .WithUrl(novelData.Link) + .WithImageUrl(novelData.ImageUrl) + .AddField(efb => efb.WithName(GetText("authors")).WithValue(String.Join("\n", novelData.Authors)).WithIsInline(true)) + .AddField(efb => efb.WithName(GetText("status")).WithValue(novelData.Status).WithIsInline(true)) + .AddField(efb => efb.WithName(GetText("genres")).WithValue(string.Join(",\n", novelData.Genres.Any() ? novelData.Genres : new[] { "none" })).WithIsInline(true)) + .WithFooter(efb => efb.WithText(GetText("score") + " " + novelData.Score)); + await Context.Channel.EmbedAsync(embed).ConfigureAwait(false); + } + [NadekoCommand, Usage, Description, Aliases] [Priority(0)] public async Task Mal([Remainder] string name) diff --git a/NadekoBot.Core/Modules/Searches/Common/NovelData.cs b/NadekoBot.Core/Modules/Searches/Common/NovelData.cs new file mode 100644 index 00000000..4a4a0768 --- /dev/null +++ b/NadekoBot.Core/Modules/Searches/Common/NovelData.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace NadekoBot.Modules.Searches.Common +{ + public class NovelData + { + public string Description { get; set; } + public string Title { get; set; } + public string Link { get; set; } + public string ImageUrl { get; set; } + public string[] Authors { get; set; } + public string Status { get; set; } + public string[] Genres { get; set; } + public string Score { get; set; } + } +} diff --git a/NadekoBot.Core/Modules/Searches/Services/AnimeSearchService.cs b/NadekoBot.Core/Modules/Searches/Services/AnimeSearchService.cs index 0a495806..1ce9ccf8 100644 --- a/NadekoBot.Core/Modules/Searches/Services/AnimeSearchService.cs +++ b/NadekoBot.Core/Modules/Searches/Services/AnimeSearchService.cs @@ -46,6 +46,33 @@ namespace NadekoBot.Modules.Searches.Services } } + public async Task GetNovelData(string query) + { + if (string.IsNullOrWhiteSpace(query)) + throw new ArgumentNullException(nameof(query)); + + query = query.Replace(" ", "-"); + try + { + + var link = "http://www.novelupdates.com/series/" + Uri.EscapeDataString(query.Replace("/", " ")); + link = link.ToLowerInvariant(); + var (ok, data) = await _cache.TryGetAnimeDataAsync(link).ConfigureAwait(false); + if (!ok) + { + data = await _http.GetStringAsync(link).ConfigureAwait(false); + await _cache.SetAnimeDataAsync(link, data).ConfigureAwait(false); + } + + + return JsonConvert.DeserializeObject(data); + } + catch + { + return null; + } + } + public async Task GetMangaData(string query) { if (string.IsNullOrWhiteSpace(query)) From 6aeec724c03dbd28f5d884e18df7e2ad4f04dbd9 Mon Sep 17 00:00:00 2001 From: Master Kwoth Date: Thu, 2 Nov 2017 18:22:17 +0100 Subject: [PATCH 2/3] .novel done, waifutransfer almost done --- .../Modules/Gambling/Services/WaifuService.cs | 14 +- .../Modules/Gambling/WaifuClaimCommands.cs | 4 +- .../Modules/Searches/AnimeSearchCommands.cs | 2 +- .../Modules/Searches/Common/NovelData.cs | 2 +- .../Searches/Services/AnimeSearchService.cs | 67 +- NadekoBot.Core/Services/IDataCache.cs | 2 + NadekoBot.Core/Services/Impl/RedisCache.cs | 11 + .../_strings/ResponseStrings.en-US.json | 1819 +++++++++-------- src/NadekoBot/data/command_strings.json | 14 + 9 files changed, 1013 insertions(+), 922 deletions(-) diff --git a/NadekoBot.Core/Modules/Gambling/Services/WaifuService.cs b/NadekoBot.Core/Modules/Gambling/Services/WaifuService.cs index 7c67c638..7e1ccb82 100644 --- a/NadekoBot.Core/Modules/Gambling/Services/WaifuService.cs +++ b/NadekoBot.Core/Modules/Gambling/Services/WaifuService.cs @@ -9,13 +9,15 @@ namespace NadekoBot.Modules.Gambling.Services public class WaifuService : INService { private readonly DbService _db; + private readonly CurrencyService _cs; public ConcurrentDictionary DivorceCooldowns { get; } = new ConcurrentDictionary(); public ConcurrentDictionary AffinityCooldowns { get; } = new ConcurrentDictionary(); - public WaifuService(DbService db) + public WaifuService(DbService db, CurrencyService cs) { _db = db; + _cs = cs; } public async Task WaifuTransfer(IUser owner, ulong waifuId, IUser newOwner) @@ -29,12 +31,22 @@ namespace NadekoBot.Modules.Gambling.Services if (waifu.ClaimerId != ownerUser.Id) return false; + if (!await _cs.RemoveAsync(owner.Id, + "Waifu Transfer", + waifu.Price / 10, + uow).ConfigureAwait(false)) + { + return false; + } + //new claimerId is the id of the new owner var newOwnerUser = uow.DiscordUsers.GetOrCreate(newOwner); waifu.ClaimerId = newOwnerUser.Id; await uow.CompleteAsync().ConfigureAwait(false); } + + return true; } } } diff --git a/NadekoBot.Core/Modules/Gambling/WaifuClaimCommands.cs b/NadekoBot.Core/Modules/Gambling/WaifuClaimCommands.cs index b0ae970d..f33ac99e 100644 --- a/NadekoBot.Core/Modules/Gambling/WaifuClaimCommands.cs +++ b/NadekoBot.Core/Modules/Gambling/WaifuClaimCommands.cs @@ -190,9 +190,9 @@ namespace NadekoBot.Modules.Gambling [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task WaifuTransfer(IGuildUser waifu, IGuildUser newOwner) + public async Task WaifuTransfer(IUser waifu, IUser newOwner) { - if(!await _service.WaifuTransfer(waifu.Id, newOwner.Id) + if(!await _service.WaifuTransfer(Context.User, waifu.Id, newOwner) .ConfigureAwait(false)) { await ReplyErrorLocalized("waifu_transfer_fail").ConfigureAwait(false); diff --git a/NadekoBot.Core/Modules/Searches/AnimeSearchCommands.cs b/NadekoBot.Core/Modules/Searches/AnimeSearchCommands.cs index d6eb5839..1b8c89a3 100644 --- a/NadekoBot.Core/Modules/Searches/AnimeSearchCommands.cs +++ b/NadekoBot.Core/Modules/Searches/AnimeSearchCommands.cs @@ -37,7 +37,7 @@ namespace NadekoBot.Modules.Searches .WithImageUrl(novelData.ImageUrl) .AddField(efb => efb.WithName(GetText("authors")).WithValue(String.Join("\n", novelData.Authors)).WithIsInline(true)) .AddField(efb => efb.WithName(GetText("status")).WithValue(novelData.Status).WithIsInline(true)) - .AddField(efb => efb.WithName(GetText("genres")).WithValue(string.Join(",\n", novelData.Genres.Any() ? novelData.Genres : new[] { "none" })).WithIsInline(true)) + .AddField(efb => efb.WithName(GetText("genres")).WithValue(string.Join(" ", novelData.Genres.Any() ? novelData.Genres : new[] { "none" })).WithIsInline(true)) .WithFooter(efb => efb.WithText(GetText("score") + " " + novelData.Score)); await Context.Channel.EmbedAsync(embed).ConfigureAwait(false); } diff --git a/NadekoBot.Core/Modules/Searches/Common/NovelData.cs b/NadekoBot.Core/Modules/Searches/Common/NovelData.cs index 4a4a0768..b3be1be4 100644 --- a/NadekoBot.Core/Modules/Searches/Common/NovelData.cs +++ b/NadekoBot.Core/Modules/Searches/Common/NovelData.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; namespace NadekoBot.Modules.Searches.Common { - public class NovelData + public class NovelResult { public string Description { get; set; } public string Title { get; set; } diff --git a/NadekoBot.Core/Modules/Searches/Services/AnimeSearchService.cs b/NadekoBot.Core/Modules/Searches/Services/AnimeSearchService.cs index 1ce9ccf8..e236fa51 100644 --- a/NadekoBot.Core/Modules/Searches/Services/AnimeSearchService.cs +++ b/NadekoBot.Core/Modules/Searches/Services/AnimeSearchService.cs @@ -5,6 +5,9 @@ using System; using System.Net.Http; using System.Threading.Tasks; using NadekoBot.Modules.Searches.Common; +using AngleSharp; +using AngleSharp.Dom.Html; +using System.Linq; namespace NadekoBot.Modules.Searches.Services { @@ -46,7 +49,7 @@ namespace NadekoBot.Modules.Searches.Services } } - public async Task GetNovelData(string query) + public async Task GetNovelData(string query) { if (string.IsNullOrWhiteSpace(query)) throw new ArgumentNullException(nameof(query)); @@ -57,18 +60,66 @@ namespace NadekoBot.Modules.Searches.Services var link = "http://www.novelupdates.com/series/" + Uri.EscapeDataString(query.Replace("/", " ")); link = link.ToLowerInvariant(); - var (ok, data) = await _cache.TryGetAnimeDataAsync(link).ConfigureAwait(false); + var (ok, data) = await _cache.TryGetNovelDataAsync(link).ConfigureAwait(false); if (!ok) { - data = await _http.GetStringAsync(link).ConfigureAwait(false); - await _cache.SetAnimeDataAsync(link, data).ConfigureAwait(false); + var config = Configuration.Default.WithDefaultLoader(); + var document = await BrowsingContext.New(config).OpenAsync(link); + + var imageElem = document.QuerySelector("div.seriesimg > img"); + var imageUrl = ((IHtmlImageElement)imageElem).Source; + + var descElem = document.QuerySelector("div#editdescription > p"); + var desc = descElem.InnerHtml; + + var genres = document.QuerySelector("div#seriesgenre").Children + .Select(x => x as IHtmlAnchorElement) + .Where(x => x != null) + .Select(x => $"[{x.InnerHtml}]({x.Href})") + .ToArray(); + + var authors = document + .QuerySelector("div#showauthors") + .Children + .Select(x => x as IHtmlAnchorElement) + .Where(x => x != null) + .Select(x => $"[{x.InnerHtml}]({x.Href})") + .ToArray(); + + var score = ((IHtmlSpanElement)document + .QuerySelector("h5.seriesother > span.uvotes")) + .InnerHtml; + + var status = document + .QuerySelector("div#editstatus") + .InnerHtml; + var title = document + .QuerySelector("div.w-blog-content > div.seriestitlenu") + .InnerHtml; + + var obj = new NovelResult() + { + Description = desc, + Authors = authors, + Genres = genres, + ImageUrl = imageUrl, + Link = link, + Score = score, + Status = status, + Title = title, + }; + + await _cache.SetNovelDataAsync(link, + JsonConvert.SerializeObject(obj)).ConfigureAwait(false); + + return obj; } - - - return JsonConvert.DeserializeObject(data); + + return JsonConvert.DeserializeObject(data); } - catch + catch (Exception ex) { + _log.Error(ex); return null; } } diff --git a/NadekoBot.Core/Services/IDataCache.cs b/NadekoBot.Core/Services/IDataCache.cs index 8526f0aa..20215b20 100644 --- a/NadekoBot.Core/Services/IDataCache.cs +++ b/NadekoBot.Core/Services/IDataCache.cs @@ -9,8 +9,10 @@ namespace NadekoBot.Core.Services ConnectionMultiplexer Redis { get; } Task<(bool Success, byte[] Data)> TryGetImageDataAsync(string key); Task<(bool Success, string Data)> TryGetAnimeDataAsync(string key); + Task<(bool Success, string Data)> TryGetNovelDataAsync(string key); Task SetImageDataAsync(string key, byte[] data); Task SetAnimeDataAsync(string link, string data); + Task SetNovelDataAsync(string link, string data); TimeSpan? AddTimelyClaim(ulong id, int period); void RemoveAllTimelyClaims(); } diff --git a/NadekoBot.Core/Services/Impl/RedisCache.cs b/NadekoBot.Core/Services/Impl/RedisCache.cs index edfdde53..97a097cd 100644 --- a/NadekoBot.Core/Services/Impl/RedisCache.cs +++ b/NadekoBot.Core/Services/Impl/RedisCache.cs @@ -46,6 +46,17 @@ namespace NadekoBot.Core.Services.Impl return _db.StringSetAsync("anime_" + key, data); } + public async Task<(bool Success, string Data)> TryGetNovelDataAsync(string key) + { + string x = await _db.StringGetAsync("novel_" + key); + return (x != null, x); + } + + public Task SetNovelDataAsync(string key, string data) + { + return _db.StringSetAsync("novel_" + key, data); + } + private readonly object timelyLock = new object(); public TimeSpan? AddTimelyClaim(ulong id, int period) { diff --git a/src/NadekoBot/_strings/ResponseStrings.en-US.json b/src/NadekoBot/_strings/ResponseStrings.en-US.json index c695ec4c..02e9270c 100644 --- a/src/NadekoBot/_strings/ResponseStrings.en-US.json +++ b/src/NadekoBot/_strings/ResponseStrings.en-US.json @@ -1,911 +1,912 @@ { - "customreactions_all_stats_cleared": "All custom reaction stats cleared.", - "customreactions_deleted": "Custom Reaction deleted", - "customreactions_insuff_perms": "Insufficient permissions. Requires Bot ownership for global custom reactions, and Administrator for server custom reactions.", - "customreactions_list_all": "List of all custom reactions", - "customreactions_name": "Custom Reactions", - "customreactions_new_cust_react": "New Custom Reaction", - "customreactions_no_found": "No custom reaction found.", - "customreactions_no_found_id": "No custom reaction found with that id.", - "customreactions_response": "Response", - "customreactions_stats": "Custom Reaction Stats", - "customreactions_stats_cleared": "Stats cleared for {0} custom reaction.", - "customreactions_stats_not_found": "No stats for that trigger found, no action taken.", - "customreactions_trigger": "Trigger", - "nsfw_autohentai_stopped": "Autohentai stopped.", - "nsfw_not_found": "No results found.", - "pokemon_already_fainted": "{0} has already fainted.", - "pokemon_already_full": "{0} already has full HP.", - "pokemon_already_that_type": "Your type is already {0}", - "pokemon_attack": "used {0}{1} on {2}{3} for {4} damage.", - "pokemon_cant_attack_again": "You can't attack again without retaliation!", - "pokemon_cant_attack_yourself": "You can't attack yourself.", - "pokemon_fainted": "{0} has fainted!", - "pokemon_healed": "healed {0} with one {1}", - "pokemon_hp_remaining": "{0} has {1} HP remaining.", - "pokemon_invalid_move": "You can't use {0}. Type `{1}ml` to see a list of moves you can use.", - "pokemon_moves": "Movelist for {0} type", - "pokemon_not_effective": "It's not effective.", - "pokemon_no_currency": "You don't have enough {0}", - "pokemon_revive_other": "revived {0} with one {1}", - "pokemon_revive_yourself": "You revived yourself with one {0}", - "pokemon_settype_success": "Your type has been changed to {0} for a {1}", - "pokemon_somewhat_effective": "It's somewhat effective.", - "pokemon_super_effective": "It's super effective!", - "pokemon_too_many_moves": "You used too many moves in a row, so you can't move!", - "pokemon_type_of_user": "Type of {0} is {1}", - "pokemon_user_not_found": "User not found.", - "pokemon_you_fainted": "You fainted, so you are not able to move!", - "administration_aar_disabled": "**Auto assign role** on user join is now **disabled**.", - "administration_aar_enabled": "**Auto assign role** on user join is now **enabled**.", - "administration_attachments": "Attachments", - "administration_avatar_changed": "Avatar Changed", - "administration_bandm": "You have been banned from {0} server.\nReason: {1}", - "administration_banned_pl": "banned", - "administration_banned_user": "User Banned", - "administration_bot_name": "Bot's name changed to {0}", - "administration_bot_status": "Bot status changed to {0}", - "administration_byedel_off": "Automatic deletion of bye messages has been disabled.", - "administration_byedel_on": "Bye messages will be deleted after {0} seconds.", - "administration_byemsg_cur": "Current bye message: {0}", - "administration_byemsg_enable": "Enable bye messages by typing {0}", - "administration_byemsg_new": "New bye message set.", - "administration_bye_off": "Bye announcements disabled.", - "administration_bye_on": "Bye announcements enabled on this channel.", - "administration_ch_name_change": "Channel Name Changed", - "administration_ch_old_name": "Old Name", - "administration_ch_topic_change": "Channel Topic Changed", - "administration_cleaned_up": "Cleaned up.", - "administration_content": "Content", - "administration_cr": "Successfully created role {0}", - "administration_createtextchan": "Text channel {0} created.", - "administration_createvoich": "Voice channel {0} created.", - "administration_deafen": "Deafen successful.", - "administration_deleted_server": "Deleted server {0}", - "administration_delmsg_off": "Stopped automatic deletion of successful command invokations.", - "administration_delmsg_on": "Now automatically deleting sucessful command invokations.", - "administration_deltextchan": "Text channel {0} deleted.", - "administration_delvoich": "Voice channel {0} deleted.", - "administration_dm_from": "DM from", - "administration_donadd": "Successfully added a new donator.Total donated amount from this user: {0} 👑", - "administration_donators": "Thanks to the people listed below for making this project happen!", - "administration_fwall_start": "I will forward DMs to all owners.", - "administration_fwall_stop": "I will forward DMs only to the first owner.", - "administration_fwdm_start": "I will forward DMs from now on.", - "administration_fwdm_stop": "I will stop forwarding DMs from now on.", - "administration_greetdel_off": "Automatic deletion of greet messages has been disabled.", - "administration_greetdel_on": "Greet messages will be deleted after {0} seconds.", - "administration_greetdmmsg_cur": "Current DM greet message: {0}", - "administration_greetdmmsg_enable": "Enable DM greet messages by typing {0}", - "administration_greetdmmsg_new": "New DM greet message set.", - "administration_greetdm_off": "DM greet announcements disabled.", - "administration_greetdm_on": "DM greet announcements enabled.", - "administration_greetmsg_cur": "Current greet message: {0}", - "administration_greetmsg_enable": "Enable greet messages by typing {0}", - "administration_greetmsg_new": "New greet message set.", - "administration_greet_off": "Greet announcements disabled.", - "administration_greet_on": "Greet announcements enabled on this channel.", - "administration_hierarchy": "You can't use this command on users with a role higher or equal to yours in the role hierarchy.", - "administration_images_loaded": "Images loaded after {0} seconds!", - "administration_invalid_format": "Invalid input format.", - "administration_invalid_params": "Invalid parameters.", - "administration_joined": "{0} has joined {1}", - "administration_kickdm": "You have been kicked from {0} server.\nReason: {1}", - "administration_kicked_user": "User kicked", - "administration_lang_list": "List of languages", - "administration_lang_set": "Your server's locale is now {0} - {1}", - "administration_lang_set_bot": "Bot's default locale is now {0} - {1}", - "administration_lang_set_bot_show": "Bot's language is set to {0} - {1}", - "administration_lang_set_fail": "Failed setting locale. Revisit this command's help.", - "administration_lang_set_show": "This server's language is set to {0} - {1}", - "administration_left": "{0} has left {1}", - "administration_left_server": "Left server {0}", - "administration_log": "Logging {0} event in this channel.", - "administration_log_all": "Logging all events in this channel.", - "administration_log_disabled": "Logging disabled.", - "administration_log_events": "Log events you can subscribe to:", - "administration_log_ignore": "Logging will ignore {0}", - "administration_log_not_ignore": "Logging will not ignore {0}", - "administration_log_stop": "Stopped logging {0} event.", - "administration_menrole": "{0} has invoked a mention on the following roles", - "administration_message_from_bo": "Message from {0} `[Bot Owner]`:", - "administration_message_sent": "Message sent.", - "administration_moved": "{0} moved from {1} to {2}", - "administration_msg_del": "Message deleted in #{0}", - "administration_msg_update": "Message updated in #{0}", - "administration_muted_pl": "Muted", - "administration_muted_sn": "Muted", - "administration_mute_error": "I don't have the permission necessary for that most likely.", - "administration_mute_role_set": "New mute role set.", - "administration_need_admin": "I need **Administration** permission to do that.", - "administration_new_msg": "New message", - "administration_new_nick": "New nickname", - "administration_new_topic": "New topic", - "administration_nick_change": "Nickname changed", - "administration_no_server": "Can't find that server", - "administration_no_shard_id": "No shard with that ID found.", - "administration_old_msg": "Old message", - "administration_old_nick": "Old nickname", - "administration_old_topic": "Old topic", - "administration_perms": "Error. Most likely I don't have sufficient permissions.", - "administration_prot_active": "Active protections", - "administration_prot_disable": "{0} has been **disabled** on this server.", - "administration_prot_enable": "{0} Enabled", - "administration_prot_error": "Error. I need ManageRoles permission", - "administration_prot_none": "No protection enabled.", - "administration_raid_cnt": "User threshold must be between {0} and {1}.", - "administration_raid_stats": "If {0} or more users join within {1} seconds, I will {2} them.", - "administration_raid_time": "Time must be between {0} and {1} seconds.", - "administration_rar": "Successfully removed all roles from user {0}", - "administration_rar_err": "Failed to remove roles. I have insufficient permissions.", - "administration_rc": "Color of {0} role has been changed.", - "administration_rc_not_exist": "That role does not exist.", - "administration_rc_params": "The parameters specified are invalid.", - "administration_rc_perms": "Error occurred due to invalid color or insufficient permissions.", - "administration_remrole": "Successfully removed role {0} from user {1}", - "administration_remrole_err": "Failed to remove role. I have insufficient permissions.", - "administration_renrole": "Role renamed.", - "administration_renrole_err": "Failed to rename role. I have insufficient permissions.", - "administration_renrole_perms": "You can't edit roles higher than your highest role.", - "administration_reprm": "Removed the playing message: {0}", - "administration_role_added": "Role {0} has been added to the list in group {1}.", - "administration_role_clean": "{0} not found.Cleaned up.", - "administration_role_in_list": "Role {0} is already in the list.", - "administration_ropl_added": "Added.", - "administration_ropl_disabled": "Rotating playing status disabled.", - "administration_ropl_enabled": "Rotating playing status enabled.", - "administration_ropl_list": "Here is a list of rotating statuses:\n{0}", - "administration_ropl_not_set": "No rotating playing statuses set.", - "administration_self_assign_already": "You already have {0} role.", - "administration_self_assign_already_excl": "You already have {0} exclusive self-assigned role.", - "administration_self_assign_excl": "Self assigned roles are now exclusive!", - "administration_self_assign_list": "There are {0} self assignable roles", - "administration_self_assign_not": "That role is not self-assignable.", - "administration_self_assign_not_have": "You don't have {0} role.", - "administration_self_assign_no_excl": "Self assigned roles are now not exclusive!", - "administration_self_assign_perms": "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.`", - "administration_self_assign_rem": "{0} has been removed from the list of self-assignable roles.", - "administration_self_assign_remove": "You no longer have {0} role.", - "administration_self_assign_success": "You now have {0} role.", - "administration_setrole": "Successfully added role {0} to user {1}", - "administration_setrole_err": "Failed to add role. I have insufficient permissions.", - "administration_set_avatar": "New avatar set!", - "administration_set_channel_name": "New channel name set.", - "administration_set_game": "New game set!", - "administration_set_stream": "New stream set!", - "administration_set_topic": "New channel topic set.", - "administration_shard_reconnected": "Shard {0} reconnected.", - "administration_shard_reconnecting": "Shard {0} reconnecting.", - "administration_shutting_down": "Shutting down", - "administration_slowmode_desc": "Users can't send more than {0} messages every {1} seconds.", - "administration_slowmode_disabled": "Slow mode disabled.", - "administration_slowmode_init": "Slow mode initiated", - "administration_soft_banned_pl": "soft-banned", - "administration_spam_ignore": "{0} will ignore this channel.", - "administration_spam_not_ignore": "{0} will no longer ignore this channel.", - "administration_spam_stats": "If a user posts {0} same messages in a row, I will {1} them.\n __IgnoredChannels__: {2}", - "administration_text_chan_created": "Text channel created.", - "administration_text_chan_destroyed": "Text channel destroyed.", - "administration_undeafen": "Undeafen successful.", - "administration_unmuted_sn": "Unmuted", - "administration_username": "Username", - "administration_username_changed": "Username changed", - "administration_users": "Users", - "administration_user_banned": "User banned", - "administration_user_chat_mute": "{0} has been **muted** from chatting.", - "administration_user_chat_unmute": "{0} has been **unmuted** from chatting.", - "administration_user_joined": "User joined", - "administration_user_left": "User left", - "administration_user_muted": "{0} has been **muted** from text and voice chat.", - "administration_user_role_add": "User's role added", - "administration_user_role_rem": "User's role removed", - "administration_user_status_change": "{0} is now {1}", - "administration_user_unmuted": "{0} has been **unmuted** from text and voice chat.", - "administration_user_vjoined": "{0} has joined {1} voice channel.", - "administration_user_vleft": "{0} has left {1} voice channel.", - "administration_user_vmoved": "{0} moved from {1} to {2} voice channel.", - "administration_user_voice_mute": "{0} has been **voice muted**.", - "administration_user_voice_unmute": "{0} has been **voice unmuted**.", - "administration_voice_chan_created": "Voice channel created", - "administration_voice_chan_destroyed": "Voice channel destroyed", - "administration_vt_disabled": "Disabled voice + text feature.", - "administration_vt_enabled": "Enabled voice + text feature.", - "administration_vt_exit": "I don't have **manage roles** and/or **manage channels** permission, so I cannot run `voice+text` on {0} server.", - "administration_vt_no_admin": "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.", - "administration_vt_perms": "I require at least **manage roles** and **manage channels** permissions to enable this feature. (preferred Administration permission)", - "administration_xmuted_text": "User {0} from text chat", - "administration_xmuted_text_and_voice": "User {0} from text and voice chat", - "administration_xmuted_voice": "User {0} from voice chat", - "administration_sbdm": "You have been soft-banned from {0} server.\nReason: {1}", - "administration_user_unbanned": "User unbanned", - "administration_migration_done": "Migration done!", - "administration_presence_updates": "Presence updates", - "administration_sb_user": "User soft-banned", - "gambling_awarded": "has awarded {0} to {1}", - "gambling_better_luck": "Better luck next time ^_^", - "gambling_br_win": "Congratulations! You won {0} for rolling above {1}", - "gambling_deck_reshuffled": "Deck reshuffled.", - "gambling_flipped": "flipped {0}.", - "gambling_flip_guess": "You guessed it! You won {0}", - "gambling_flip_invalid": "Invalid number specified. You can flip 1 to {0} coins.", - "gambling_flowerreaction_desc": "Add {0} reaction to this message to get {1} ", - "gambling_flowerreaction_footer": "This event is active for up to {0} hours.", - "gambling_flowerreaction_title": "Flower reaction event started!", - "gambling_gifted": "has gifted {0} to {1}", - "gambling_has": "{0} has {1}", - "gambling_heads": "Head", - "gambling_leaderboard": "Leaderboard", - "gambling_mass_award": "Awarded {0} to {1} users from {2} role.", - "gambling_max_bet_limit": "You can't bet more than {0}", - "gambling_min_bet_limit": "You can't bet less than {0}", - "gambling_not_enough": "You don't have enough {0}", - "gambling_no_more_cards": "No more cards in the deck.", - "gambling_raffled_user": "Raffled user", - "gambling_roll": "You rolled {0}.", - "gambling_slot_bet": "Bet", - "gambling_slot_jackpot": "WOAAHHHHHH!!! Congratulations!!! x{0}", - "gambling_slot_single": "A single {0}, x{1}", - "gambling_slot_three": "Wow! Lucky! Three of a kind! x{0}", - "gambling_slot_two": "Good job! Two {0} - bet x{1}", - "gambling_slot_won": "Won", - "gambling_sneakygamestatus_desc": "Users must type a secret code to get {0}.\nLasts {1} seconds. Don't tell anyone. Shhh.", - "gambling_sneakygamestatus_end": "SneakyGame event ended. {0} users received the reward.", - "gambling_sneakygamestatus_title": "SneakyGameStatus event started", - "gambling_tails": "Tail", - "gambling_take": "successfully took {0} from {1}", - "gambling_take_fail": "was unable to take {0} from{1} because the user doesn't have that much {2}!", - "help_back_to_toc": "Back to ToC", - "help_bot_owner_only": "Bot owner only", - "help_channel_permission": "Requires {0} channel permission.", - "help_cmdlist_donate": "You can support the project on patreon: <{0}> or paypal: <{1}>", - "help_cmd_and_alias": "Commands and aliases", - "help_commandlist_regen": "Commandlist regenerated.", - "help_commands_instr": "Type `{0}h CommandName` to see the help for that specified command. e.g. `{0}h {0}8ball`", - "help_command_not_found": "I can't find that command. Please verify that the command exists before trying again.", - "help_desc": "Description", - "help_donate": "You can support the NadekoBot project on \nPatreon <{0}> or\nPaypal <{1}>\nDon't forget to leave your discord name or id in the message.\n\n**Thank you** ♥️", - "help_guide": "**List of commands**: <{0}>\n**Hosting guides and docs can be found here**: <{1}>", - "help_list_of_commands": "List of commands", - "help_list_of_modules": "List of modules", - "help_modules_footer": "Type `{0}cmds ModuleName` to get a list of commands in that module. eg `{0}cmds games`", - "help_module_not_found": "That module does not exist.", - "help_server_permission": "Requires {0} server permission.", - "help_table_of_contents": "Table of contents", - "help_usage": "Usage", - "nsfw_autohentai_started": "Autohentai started. Reposting every {0}s with one of the following tags:\n{1}", - "nsfw_tag": "Tag", - "gambling_animal_race": "Animal race", - "gambling_animal_race_failed": "Failed to start since there was not enough participants.", - "gambling_animal_race_full": "Race is full! Starting immediately.", - "gambling_animal_race_join": "{0} joined as a {1}", - "gambling_animal_race_join_bet": "{0} joined as a {1} and bet {2}!", - "gambling_animal_race_join_instr": "Type {0}jr to join the race.", - "gambling_animal_race_starting": "Starting in 20 seconds or when the room is full.", - "gambling_animal_race_starting_with_x": "Starting with {0} participants.", - "gambling_animal_race_won": "{0} as {1} Won the race!", - "gambling_animal_race_won_money": "{0} as {1} Won the race and {2}!", - "gambling_dice_invalid_number": "Invalid number specified. You can roll {0}-{1} dice at once.", - "gambling_dice_rolled": "rolled {0}", - "gambling_dice_rolled_num": "Dice rolled: {0}", - "gambling_race_failed_starting": "Failed starting the race. Another race is probably running.", - "gambling_race_not_exist": "No race exists on this server", - "gambling_second_larger_than_first": "Second number must be larger than the first one.", - "gambling_changes_of_heart": "Changes of heart", - "gambling_claimed_by": "Claimed by", - "gambling_divorces": "Divorces", - "gambling_likes": "Likes", - "gambling_price": "Price", - "gambling_waifus_none": "No waifus have been claimed yet.", - "gambling_waifus_top_waifus": "Top Waifus", - "gambling_waifu_affinity_already": "your affinity is already set to that waifu or you're trying to remove your affinity while not having one.", - "gambling_waifu_affinity_changed": "changed their affinity from {0} to {1}.\n\n*This is morally questionable.*🤔", - "gambling_waifu_affinity_cooldown": "You must wait {0} hours and {1} minutes in order to change your affinity again.", - "gambling_waifu_affinity_reset": "Your affinity is reset. You no longer have a person you like.", - "gambling_waifu_affinity_set": "wants to be {0}'s waifu. Aww <3", - "gambling_waifu_claimed": "claimed {0} as their waifu for {1}!", - "gambling_waifu_divorced_like": "You have divorced a waifu who likes you. You heartless monster.\n{0} received {1} as a compensation.", - "gambling_waifu_egomaniac": "you can't set affinity to yourself, you egomaniac.", - "gambling_waifu_fulfilled": "🎉 Their love is fulfilled! 🎉\n{0}'s new value is {1}!", - "gambling_waifu_isnt_cheap": "No waifu is that cheap. You must pay at least {0} to get a waifu, even if their actual value is lower.", - "gambling_waifu_not_enough": "You must pay {0} or more to claim that waifu!", - "gambling_waifu_not_yours": "That waifu is not yours.", - "gambling_waifu_not_yourself": "You can't claim yourself.", - "gambling_waifu_recent_divorce": "You divorced recently. You must wait {0} hours and {1} minutes to divorce again.", - "gambling_nobody": "Nobody", - "gambling_waifu_divorced_notlike": "You have divorced a waifu who doesn't like you. You received {0} back.", - "games_8ball": "8ball", - "games_acrophobia": "Acrophobia", - "games_acro_ended_no_sub": "Game ended with no submissions.", - "games_acro_no_votes_cast": "No votes cast. Game ended with no winner.", - "games_acro_nym_was": "Acronym was {0}.", - "games_acro_running": "Acrophobia game is already running in this channel.", - "games_acro_started": "Game started. Create a sentence with the following acronym: {0}.", - "games_acro_started_footer": "You have {0} seconds to make a submission.", - "games_acro_submit": "{0} submitted their sentence. ({1} total)", - "games_acro_vote": "Vote by typing a number of the submission", - "games_acro_vote_cast": "{0} cast their vote!", - "games_acro_winner": "Winner is {0} with {1} points.", - "games_acro_winner_only": "{0} is the winner for being the only user who made a submission!", - "games_question": "Question", - "games_rps_draw": "It's a draw! Both picked {0}", - "games_rps_win": "{0} won! {1} beats {2}", - "games_submissions_closed": "Submissions closed", - "gambling_animal_race_already_started": "Animal Race is already running.", - "gambling_total_average": "Total: {0} Average: {1}", - "games_category": "Category", - "games_cleverbot_disabled": "Disabled cleverbot on this server.", - "games_cleverbot_enabled": "Enabled cleverbot on this server.", - "games_curgen_disabled": "Currency generation has been disabled on this channel.", - "games_curgen_enabled": "Currency generation has been enabled on this channel.", - "games_curgen_pl": "{0} random {1} appeared!", - "games_curgen_sn": "A random {0} appeared!", - "games_failed_loading_question": "Failed loading a question.", - "games_game_started": "Game started", - "games_hangman_game_started": "Hangman game started", - "games_hangman_running": "Hangman game already running on this channel.", - "games_hangman_start_errored": "Starting hangman errored.", - "games_hangman_types": "List of \"{0}hangman\" term types:", - "games_leaderboard": "Leaderboard", - "games_not_enough": "You don't have enough {0}", - "games_no_results": "No results", - "games_picked": "picked {0}", - "games_planted": "{0} planted {1}", - "games_trivia_already_running": "Trivia game is already running on this server.", - "games_trivia_game": "Trivia Game", - "games_trivia_guess": "{0} guessed it! The answer was: {1}", - "games_trivia_none": "No trivia is running on this server.", - "games_trivia_points": "{0} has {1} points", - "games_trivia_stopping": "Stopping after this question.", - "games_trivia_times_up": "Time's up! The correct answer was {0}", - "games_trivia_win": "{0} guessed it and WON the game! The answer was: {1}", - "games_ttt_against_yourself": "You can't play against yourself.", - "games_ttt_already_running": "TicTacToe Game is already running in this channel.", - "games_ttt_a_draw": "A draw!", - "games_ttt_created": "has created a game of TicTacToe.", - "games_ttt_has_won": "{0} has won!", - "games_ttt_matched_three": "Matched three", - "games_ttt_no_moves": "No moves left!", - "games_ttt_time_expired": "Time expired!", - "games_ttt_users_move": "{0}'s move", - "games_vs": "{0} vs {1}", - "music_attempting_to_queue": "Attempting to queue {0} songs...", - "music_autoplay_disabled": "Autoplay disabled.", - "music_autoplay_enabled": "Autoplay enabled.", - "music_defvol_set": "Default volume set to {0}%", - "music_dir_queue_complete": "Directory queue complete.", - "music_fairplay": "Fairplay", - "music_finished_song": "Finished song", - "music_fp_disabled": "Fair play disabled.", - "music_fp_enabled": "Fair play enabled.", - "music_from_position": "From position", - "music_id": "Id", - "music_invalid_input": "Invalid input.", - "music_max_playtime_none": "Max playtime has no limit now.", - "music_max_playtime_set": "Max playtime set to {0} second(s).", - "music_max_queue_unlimited": "Max music queue size set to unlimited.", - "music_max_queue_x": "Max music queue size set to {0} track(s).", - "music_must_be_in_voice": "You need to be in the voice channel on this server.", - "music_name": "Name", - "music_now_playing": "Now playing", - "music_no_player": "No active music player.", - "music_no_search_results": "No search results.", - "music_paused": "Music playback paused.", - "music_player_queue": "Player queue - Page {0}/{1}", - "music_playing_song": "Playing song #{0}", - "music_playlists": "`#{0}` - **{1}** by *{2}* ({3} songs)", - "music_playlists_page": "Page {0} of saved playlists", - "music_playlist_deleted": "Playlist deleted.", - "music_playlist_delete_fail": "Failed to delete that playlist. It either doesn't exist, or you are not its author.", - "music_playlist_id_not_found": "Playlist with that ID doesn't exist.", - "music_playlist_queue_complete": "Playlist queue complete.", - "music_playlist_saved": "Playlist saved", - "music_play_limit": "{0}s limit", - "music_queue": "Queue", - "music_queued_song": "Queued song", - "music_queue_cleared": "Music queue cleared.", - "music_queue_full": "Queue is full at {0}/{0}.", - "music_removed_song": "Removed song", - "music_repeating_cur_song": "Repeating current song", - "music_repeating_playlist": "Repeating playlist", - "music_repeating_track": "Repeating track", - "music_repeating_track_stopped": "Current track repeat stopped.", - "music_resumed": "Music playback resumed.", - "music_rpl_disabled": "Repeat playlist disabled.", - "music_rpl_enabled": "Repeat playlist enabled.", - "music_set_music_channel": "I will now output playing, finished, paused and removed songs in this channel.", - "music_skipped_to": "Skipped to `{0}:{1}`", - "music_song_moved": "Song moved", - "music_time_format": "{0}h {1}m {2}s", - "music_to_position": "To position", - "music_unlimited": "unlimited", - "music_volume_input_invalid": "Volume must be between 0 and 100", - "music_volume_set": "Volume set to {0}%", - "permissions_acm_disable": "Disabled usage of ALL MODULES on channel {0}.", - "permissions_acm_enable": "Enabled usage of ALL MODULES on channel {0}.", - "permissions_allowed": "Allowed", - "permissions_arm_disable": "Disabled usage of ALL MODULES for role {0}.", - "permissions_arm_enable": "Enabled usage of ALL MODULES for role {0}.", - "permissions_asm_disable": "Disabled usage of ALL MODULES on this server.", - "permissions_asm_enable": "Enabled usage of ALL MODULES on this server.", - "permissions_aum_disable": "Disabled usage of ALL MODULES for user {0}.", - "permissions_aum_enable": "Enabled usage of ALL MODULES for user {0}.", - "permissions_blacklisted": "Blacklisted {0} with ID {1}", - "permissions_cmdcd_add": "Command {0} now has a {1}s cooldown.", - "permissions_cmdcd_cleared": "Command {0} has no cooldown now and all existing cooldowns have been cleared.", - "permissions_cmdcd_none": "No command cooldowns set.", - "permissions_command_costs": "Command costs", - "permissions_cx_disable": "Disabled usage of {0} {1} on channel {2}.", - "permissions_cx_enable": "Enabled usage of {0} {1} on channel {2}.", - "permissions_denied": "Denied", - "permissions_filter_word_add": "Added word {0} to the list of filtered words.", - "permissions_filter_word_list": "List of filtered words", - "permissions_filter_word_remove": "Removed word {0} from the list of filtered words.", - "permissions_invalid_second_param_between": "Invalid second parameter.(Must be a number between {0} and {1})", - "permissions_invite_filter_channel_off": "Invite filtering disabled on this channel.", - "permissions_invite_filter_channel_on": "Invite filtering enabled on this channel.", - "permissions_invite_filter_server_off": "Invite filtering disabled on this server.", - "permissions_invite_filter_server_on": "Invite filtering enabled on this server.", - "permissions_moved_permission": "Moved permission {0} from #{1} to #{2}", - "permissions_not_found": "Can't find permission at index #{0}", - "permissions_no_costs": "No costs set.", - "permissions_of_command": "command", - "permissions_of_module": "module", - "permissions_page": "Permissions page {0}", - "permissions_permrole": "Current permissions role is {0}.", - "permissions_permrole_changed": "Users now require {0} role in order to edit permissions.", - "permissions_perm_out_of_range": "No permission found on that index.", - "permissions_removed": "removed permission #{0} - {1}", - "permissions_rx_disable": "Disabled usage of {0} {1} for {2} role.", - "permissions_rx_enable": "Enabled usage of {0} {1} for {2} role.", - "permissions_sec": "sec.", - "permissions_sx_disable": "Disabled usage of {0} {1} on this server.", - "permissions_sx_enable": "Enabled usage of {0} {1} on this server.", - "permissions_unblacklisted": "Unblacklisted {0} with ID {1}", - "permissions_uneditable": "uneditable", - "permissions_ux_disable": "Disabled usage of {0} {1} for {2} user.", - "permissions_ux_enable": "Enabled usage of {0} {1} for {2} user.", - "permissions_verbose_false": "I will no longer show permission warnings.", - "permissions_verbose_true": "I will now show permission warnings.", - "permissions_word_filter_channel_off": "Word filtering disabled on this channel.", - "permissions_word_filter_channel_on": "Word filtering enabled on this channel.", - "permissions_word_filter_server_off": "Word filtering disabled on this server.", - "permissions_word_filter_server_on": "Word filtering enabled on this server.", - "searches_abilities": "Abilities", - "searches_anime_no_fav": "No favorite anime yet", - "searches_atl_ad_started": "Started automatic translation of messages on this channel. User messages will be auto-deleted.", - "searches_atl_removed": "your auto-translate language has been removed.", - "searches_atl_set": "Your auto-translate language has been set to {0}>{1}", - "searches_atl_started": "Started automatic translation of messages on this channel.", - "searches_atl_stopped": "Stopped automatic translation of messages on this channel.", - "searches_bad_input_format": "Bad input format, or something went wrong.", - "searches_card_not_found": "Couldn't find that card.", - "searches_catfact": "fact", - "searches_chapters": "Chapters", - "searches_comic_number": "Comic #", - "searches_compet_loses": "Competitive losses", - "searches_compet_played": "Competitive played", - "searches_compet_rank": "Competitive rank", - "searches_compet_wins": "Competitive Wins", - "searches_completed": "Completed", - "searches_condition": "Condition", - "searches_cost": "Cost", - "searches_date": "Date", - "searches_define": "Define:", - "searches_dropped": "Dropped", - "searches_episodes": "Episodes", - "searches_error_occured": "Error occurred.", - "searches_example": "Example", - "searches_failed_finding_anime": "Failed finding that animu.", - "searches_failed_finding_manga": "Failed finding that mango.", - "searches_genres": "Genres", - "searches_hashtag_error": "Failed finding a definition for that tag.", - "searches_height_weight": "Height/Weight", - "searches_height_weight_val": "{0}m/{1}kg", - "searches_humidity": "Humidity", - "searches_image_search_for": "Image search for:", - "searches_imdb_fail": "Failed to find that movie.", - "searches_invalid_lang": "Invalid source or target language.", - "searches_jokes_not_loaded": "Jokes not loaded.", - "searches_latlong": "Lat/Long", - "searches_level": "Level", - "searches_list_of_place_tags": "List of {0}place tags", - "searches_location": "Location", - "searches_magicitems_not_loaded": "Magic Items not loaded.", - "searches_mal_profile": "{0}'s MAL profile", - "searches_mashape_api_missing": "Bot owner didn't specify MashapeApiKey. You can't use this functionality.", - "searches_min_max": "Min/Max", - "searches_no_channel_found": "No channel found.", - "searches_no_results": "No results found.", - "searches_on_hold": "On-hold", - "searches_original_url": "Original url", - "searches_osu_api_key": "An osu! API key is required.", - "searches_osu_failed": "Failed retrieving osu! signature.", - "searches_over_x": "Found over {0} images. Showing random {0}.", - "searches_ow_user_not_found": "User not found! Please check the Region and BattleTag before trying again.", - "searches_plan_to_watch": "Plan to watch", - "searches_platform": "Platform", - "searches_pokemon_ability_none": "No ability found.", - "searches_pokemon_none": "No pokemon found.", - "searches_profile_link": "Profile link:", - "searches_quality": "Quality:", - "searches_quick_playtime": "Quick playtime", - "searches_quick_wins": "Quick wins", - "searches_rating": "Rating", - "searches_score": "Score:", - "searches_search_for": "Search for:", - "searches_shorten_fail": "Failed to shorten that url.", - "searches_short_url": "Short url", - "searches_something_went_wrong": "Something went wrong.", - "searches_specify_search_params": "Please specify search parameters.", - "searches_status": "Status", - "searches_store_url": "Store url", - "searches_streamer_offline": "Streamer {0} is offline.", - "searches_streamer_online": "Streamer {0} is online with {1} viewers.", - "searches_streams_following": "You are following {0} streams on this server.", - "searches_streams_none": "You are not following any streams on this server.", - "searches_stream_no": "No such stream.", - "searches_stream_not_exist": "Stream probably doesn't exist.", - "searches_stream_removed": "Removed {0}'s stream ({1}) from notifications.", - "searches_stream_tracked": "I will notify this channel when status changes.", - "searches_sunrise": "Sunrise", - "searches_sunset": "Sunset", - "searches_temperature": "Temperature", - "searches_title": "Title:", - "searches_top_3_fav_anime": "Top 3 favorite anime:", - "searches_translation": "Translation:", - "searches_types": "Types", - "searches_ud_error": "Failed finding definition for that term.", - "searches_url": "Url", - "searches_viewers": "Viewers", - "searches_watching": "Watching", - "searches_wikia_error": "Failed finding that term on the specified wikia.", - "searches_wikia_input_error": "Please enter a target wikia, followed by search query.", - "searches_wiki_page_not_found": "Page not found.", - "searches_wind_speed": "Wind speed", - "searches_x_most_banned_champs": "The {0} most banned champions", - "searches_yodify_error": "Failed to yodify your sentence.", - "utiliity_joined": "Joined", - "utility_activity_line": "`{0}.` {1} [{2:F2}/s] - {3} total", - "utility_activity_page": "Activity page #{0}", - "utility_activity_users_total": "{0} users total.", - "utility_author": "Author", - "utility_botid": "Bot ID", - "utility_calcops": "List of functions in {0}calc command", - "utility_channelid": "{0} of this channel is {1}", - "utility_channel_topic": "Channel topic", - "utility_commands_ran": "Commands ran", - "utility_convert": "{0} {1} is equal to {2} {3}", - "utility_convertlist": "Units which can be used by the converter", - "utility_convert_not_found": "Cannot convert {0} to {1}: units not found", - "utility_convert_type_error": "Cannot convert {0} to {1}: types of unit are not equal", - "utility_created_at": "Created at", - "utility_custom_emojis": "Custom emojis", - "utility_error": "Error", - "utility_features": "Features", - "utility_id": "ID", - "utility_index_out_of_range": "Index out of range.", - "utility_inrole_list": "List of users in {0} role", - "utility_inrole_not_allowed": "You are not allowed to use this command on roles with a lot of users in them to prevent abuse.", - "utility_invalid_value": "Invalid {0} value.", - "utility_joined_discord": "Joined Discord", - "utility_joined_server": "Joined server", - "utility_listservers": "ID: {0}\nMembers: {1}\nOwner ID: {2}", - "utility_listservers_none": "No servers found on that page.", - "utility_list_of_repeaters": "List of repeater", - "utility_members": "Members", - "utility_memory": "Memory", - "utility_messages": "Messages", - "utility_message_repeater": "Message repeater", - "utility_name": "Name", - "utility_nickname": "Nickname", - "utility_nobody_playing_game": "Nobody is playing that game.", - "utility_no_active_repeaters": "No active repeaters.", - "utility_no_roles_on_page": "No roles on this page.", - "utility_no_shards_on_page": "No shards on this page.", - "utility_no_topic_set": "No topic set.", - "utility_owner": "Owner", - "utility_owner_ids": "Owner IDs", - "utility_presence": "Presence", - "utility_presence_txt": "{0} Servers\n{1} Text Channels\n{2} Voice Channels", - "utility_quotes_deleted": "Deleted all quotes with {0} keyword.", - "utility_quotes_page": "Page {0} of quotes", - "utility_quotes_page_none": "No quotes found on that page.", - "utility_quotes_remove_none": "No quotes found which you can remove.", - "utility_quote_added": "Quote Added", - "utility_quote_deleted": "Quote #{0} deleted.", - "utility_region": "Region", - "utility_registered_on": "Registered on", - "utility_remind": "I will remind {0} to {1} in {2} `({3:d.M.yyyy.} at {4:HH:mm})`", - "utility_remind_invalid_format": "Not a valid time format. Check the commandlist.", - "utility_remind_template": "New remind template set.", - "utility_repeater": "Repeating {0} every {1} day(s), {2} hour(s) and {3} minute(s).", - "utility_repeaters_list": "List of repeaters", - "utility_repeaters_none": "No repeaters running on this server.", - "utility_repeater_stopped": "#{0} stopped.", - "utility_repeat_invoke_none": "No repeating messages found on this server.", - "utility_result": "Result", - "utility_roles": "Roles", - "utility_roles_all_page": "Page #{0} of all roles on this server:", - "utility_roles_page": "Page #{0} of roles for {1}", - "utility_rrc_no_colors": "No colors are in the correct format. Use `#00ff00` for example.", - "utility_rrc_start": "Started rotating {0} role's color.", - "utility_rrc_stop": "Stopped rotating colors for the {0} role", - "utility_serverid": "{0} of this server is {1}", - "utility_server_info": "Server info", - "utility_shard": "Shard", - "utility_shard_stats": "Shard stats", - "utility_shard_stats_txt": "Shard **#{0}** is in {1} state with {2} servers - {3} ago", - "utility_showemojis": "**Name:** {0} **Link:** {1}", - "utility_showemojis_none": "No special emojis found.", - "utility_stats_songs": "Playing {0} songs, {1} queued.", - "utility_text_channels": "Text channels", - "utility_togtub_room_link": "Here is your room link:", - "utility_uptime": "Uptime", - "utility_userid": "{0} of the user {1} is {2}", - "utility_users": "Users", - "utility_voice_channels": "Voice channels", - "gambling_animal_race_already_in": "You've already joined this race!", - "games_current_poll_results": "Current poll results", - "games_no_votes_cast": "No votes cast.", - "games_poll_already_running": "Poll is already running on this server.", - "games_poll_created": "📃 {0} has created a poll", - "games_poll_result": "`{0}.` {1} with {2} votes.", - "games_poll_voted": "{0} voted.", - "games_poll_vote_private": "Private Message me with the corresponding number of the answer.", - "games_poll_vote_public": "Send a Message here with the corresponding number of the answer.", - "games_thanks_for_voting": "Thank you for voting, {0}", - "games_x_votes_cast": "{0} total votes cast.", - "games_pick_pl": "Pick them up by typing `{0}pick`", - "games_pick_sn": "Pick it up by typing `{0}pick`", - "gambling_no_users_found": "No user found.", - "gambling_page": "page {0}", - "administration_must_be_in_voice": "You must be in a voice channel on this server.", - "administration_no_vcroles": "There are no voice channel roles.", - "administration_user_muted_time": "{0} has been **muted** from text and voice chat for {1} minutes.", - "administration_vcrole_added": "Users who join {0} voice channel will get {1} role.", - "administration_vcrole_removed": "Users who join {0} voice channel will no longer get a role.", - "administration_vc_role_list": "Voice channel roles", - "customreactions_crad_disabled": "Message triggering the custom reaction with id {0} won't get automatically deleted.", - "customreactions_crad_enabled": "Message triggering the custom reaction with id {0} will get automatically deleted.", - "customreactions_crdm_disabled": "Response message for the custom reaction with id {0} won't be sent as a DM.", - "customreactions_crdm_enabled": "Response message for the custom reaction with id {0} will be sent as a DM.", - "utility_aliases_none": "No alias found", - "utility_alias_added": "Typing {0} will now be an alias of {1}.", - "utility_alias_list": "List of aliases", - "utility_alias_removed": "Trigger {0} no longer has an alias.", - "utility_alias_remove_fail": "Trigger {0} didn't have an alias.", - "searches_compet_playtime": "Competitive playtime", - "administration_channel": "Channel", - "administration_command_text": "Command Text", - "administration_kicked_pl": "Kicked", - "administration_moderator": "Moderator", - "administration_page": "page {0}", - "administration_reason": "Reason", - "administration_scadd": "New startup command added.", - "administration_scrm": "Startup command successfully removed.", - "administration_scrm_fail": "Startup command not found.", - "administration_server": "Server", - "administration_startcmdlist_none": "No startup commands on this page.", - "administration_startcmds_cleared": "Cleared all startup commands.", - "administration_unbanned_user": "User {0} has been unbanned.", - "administration_user_not_found": "User not found.", - "administration_user_warned": "User {0} has been warned.", - "administration_user_warned_and_punished": "User {0} has been warned and {1} punishment has been applied.", - "administration_warned_on": "Warned on {0} server", - "administration_warned_on_by": "On {0} at {1} by {2}", - "administration_warnings_cleared": "All warnings have been cleared for {0}.", - "administration_warnings_none": "No warning on this page.", - "administration_warnlog_for": "Warnlog for {0}", - "administration_warnpl_none": "No punishments set.", - "administration_warn_cleared_by": "cleared by {0}", - "administration_warn_punish_list": "Warning punishment list", - "administration_warn_punish_rem": "Having {0} warnings will no longer trigger a punishment.", - "administration_warn_punish_set": "I will apply {0} punishment to users with {1} warnings.", - "administration_slowmodewl_role_start": "Slowmode will now ignore {0} role.", - "administration_slowmodewl_role_stop": "Slowmode will no longer ignore {0} role.", - "administration_slowmodewl_user_start": "Slowmode will now ignore user {0}.", - "administration_slowmodewl_user_stop": "Slowmode will no longer ignore user {0}.", - "utility_clpa_fail": "Failed claiming rewards due to one of the following reasons:", - "utility_clpa_fail_already": "Maybe you've already received your reward for this month. You can receive rewards only once a month unless you increase your pledge.", - "utility_clpa_fail_already_title": "Already rewarded", - "utility_clpa_fail_conn": "Your discord account might not be connected to Patreon. If you are unsure what that means, or don't know how to connect it - you have to go to [Patreon account settings page](https://patreon.com/settings/account) and click 'Connect to discord' button.", - "utility_clpa_fail_conn_title": "Discord account not connected", - "utility_clpa_fail_sup": "In order to be eligible for the reward, you must support the project on patreon. You can use {0} command to get the link.", - "utility_clpa_fail_sup_title": "Not supporting", - "utility_clpa_fail_wait": "You have to wait a few hours after making your pledge, if you didn't, try again later.", - "utility_clpa_fail_wait_title": "Wait some time", - "utility_clpa_success": "You've received {0} Thanks for supporting the project!", - "utility_clpa_too_early": "Rewards can be claimed on or after 5th of each month.", - "searches_time": "Time in {0} is {1} - {2}", - "administration_rh": "Set the display of guild role {0} to {1}.", - "gambling_name": "Name", - "gambling_shop": "Shop", - "gambling_shop_item_add": "Shop item added", - "gambling_shop_none": "No shop items found on this page.", - "gambling_shop_role": "You will get {0} role.", - "gambling_type": "Type", - "utility_clpa_next_update": "Next update in {0}", - "administration_gvc_disabled": "Game Voice Channel feature has been disabled on this server.", - "administration_gvc_enabled": "{0} is a Game Voice Channel now.", - "administration_not_in_voice": "You are not in a voice channel on this server.", - "gambling_item": "Item", - "gambling_out_of_stock": "Out of stock.", - "gambling_random_unique_item": "Random unique item.", - "gambling_shop_buy_error": "Error DMing item. You've been refunded.", - "gambling_shop_item_not_found": "No item on that index found.", - "gambling_shop_item_purchase": "Item purchase successful.", - "gambling_shop_item_rm": "Shop item removed", - "gambling_shop_item_wrong_type": "That shop entry does not support item adding.", - "gambling_shop_list_item_added": "Item successfully added.", - "gambling_shop_list_item_not_unique": "That item is already added.", - "gambling_shop_purchase": "Purchase on {0} server", - "gambling_shop_role_not_found": "Role which is being sold no longer exists.", - "gambling_shop_role_purchase": "You've successfully purchased {0} role.", - "gambling_shop_role_purchase_error": "Error assigning role. Your purchase has been refunded.", - "gambling_unique_items_left": "{0} unique items left.", - "permissions_blocked_commands": "Blocked Commands", - "permissions_blocked_modules": "Blocked Modules", - "permissions_gcmd_add": "Command {0} has been disabled on all servers.", - "permissions_gcmd_remove": "Command {0} has been enabled on all servers.", - "permissions_gmod_add": "Module {0} has been disabled on all servers.", - "permissions_gmod_remove": "Module {0} has been enabled on all servers.", - "permissions_lgp_none": "No blocked commands or modules.", - "gambling_animal_race_no_race": "This Animal Race is full!", - "utility_cant_read_or_send": "You can't read from or send messages to that channel.", - "utility_quotes_notfound": "No quotes found matching the quote ID specified.", - "administration_prefix_current": "Prefix on this server is {0}", - "administration_prefix_new": "Changed prefix on this server from {0} to {1}", - "administration_defprefix_current": "Default bot prefix is {0}", - "administration_defprefix_new": "Changed Default bot prefix from {0} to {1}", - "administration_bot_nick": "Bot's nickname changed to {0}", - "administration_user_nick": "Nickname of the user {0} changed to {1}", - "administration_timezone_guild": "Timezone for this guild is `{0}`", - "administration_timezone_not_found": "Timezone not found. Use \"timezones\" command to see the list of available timezones.", - "administration_timezones_available": "Available Timezones", - "music_song_not_found": "No song found.", - "searches_define_unknown": "Can't find the definition for that term.", - "utility_repeater_initial": "Initial repeating message will be sent in {0}h and {1}min.", - "utility_verbose_errors_enabled": "Incorrectly used commands will now show errors.", - "utility_verbose_errors_disabled": "Incorrectly used commands will no longer show errors.", - "permissions_perms_reset": "Permissions for this server are reset.", - "permissions_trigger": "Permission number #{0} {1} is preventing this action.", - "administration_migration_error": "Error while migrating, check bot's console for more information.", - "searches_hex_invalid": "Invalid color specified.", - "permissions_global_perms_reset": "Global permissions have been reset.", - "help_module": "Module: {0}", - "games_hangman_stopped": "Hangman game stopped.", - "music_autoplaying": "Auto-playing.", - "music_queue_stopped": "Player is stopped. Use {0} command to start playing.", - "music_removed_song_error": "Song on that index doesn't exist", - "music_shuffling_playlist": "Shuffling songs", - "music_songs_shuffle_enable": "Songs will shuffle from now on.", - "music_songs_shuffle_disable": "Songs will no longer shuffle.", - "music_song_skips_after": "Songs will skip after {0}", - "administration_warnings_list": "List of all warned users on the server", - "customreactions_redacted_too_long": "Redacted because it's too long.", - "nsfw_blacklisted_tag_list": "List of blacklisted tags:", - "nsfw_blacklisted_tag": "One or more tags you've used are blacklisted", - "nsfw_blacklisted_tag_add": "Nsfw tag {0} is now blacklisted.", - "nsfw_blacklisted_tag_remove": "Nsfw tag {0} is no longer blacklisted.", - "gambling_waifu_gift": "Gifted {0} to {1}", - "gambling_waifu_gift_shop": "Waifu gift shop", - "gambling_gifts": "Gifts", - "games_connect4_created": "Created a Connect4 game. Waiting for a player to join.", - "games_connect4_player_to_move": "Player to move: {0}", - "games_connect4_failed_to_start": "Connect4 game failed to start because nobody joined.", - "games_connect4_draw": "Connect4 game ended in a draw.", - "games_connect4_won": "{0} won the game of Connect4 against {1}.", - "games_nunchi_joined": "Joined nunchi game. {0} users joined so far.", - "games_nunchi_ended": "Nunchi game ended. {0} won", - "games_nunchi_ended_no_winner": "Nunchi game ended with no winner.", - "games_nunchi_started": "Nunchi game started with {0} participants.", - "games_nunchi_round_ended": "Nunchi round ended. {0} is out of the game.", - "games_nunchi_round_ended_boot": "Nunchi round ended due to timeout of some users. These users are still in the game: {0}", - "games_nunchi_round_started": "Nunchi round started with {0} users. Start counting from the number {1}.", - "games_nunchi_next_number": "Number registered. Last number was {0}.", - "games_nunchi_failed_to_start": "Nunchi failed to start because there were not enough participants.", - "games_nunchi_created": "Nunchi game created. Waiting for users to join.", - "music_sad_enabled": "Songs will be deleted from the music queue when they finish playing.", - "music_sad_disabled": "Songs will no longer be deleted from the music queue when they finish playing.", - "utility_stream_role_enabled": "When a user from {0} role starts streaming, I will give them {1} role.", - "utility_stream_role_disabled": "Stream role feature has been disabled.", - "utility_stream_role_kw_set": "Streamers now require {0} keyword in order to receive the role.", - "utility_stream_role_kw_reset": "Stream role keyword reset.", - "utility_stream_role_bl_add": "User {0} will never receive the stream role.", - "utility_stream_role_bl_add_fail": "User {0} is already blacklisted.", - "utility_stream_role_bl_rem": "User {0} is no longer blacklisted.", - "utility_stream_role_bl_rem_fail": "User {0} is not blacklisted.", - "utility_stream_role_wl_add": "User {0} will receive the stream role even if they don't have the keyword in the stream title.", - "utility_stream_role_wl_add_fail": "User {0} is already whitelisted.", - "utility_stream_role_wl_rem": "User {0} is no longer whitelisted.", - "utility_stream_role_wl_rem_fail": "User {0} is not whitelisted.", - "utility_bot_config_edit_fail": "Failed setting {0} to the value {1}", - "utility_bot_config_edit_success": "The value of {0} is set to {1}", - "customreactions_crca_disabled": "Custom reaction with id {0} will no longer trigger unless it's trigger word is at the beggining of the sentence.", - "customreactions_crca_enabled": "Custom reaction with id {0} will now trigger if it's contained anywhere in the sentence.", - "xp_server_level": "Server Level", - "xp_level": "Level", - "xp_club": "Club", - "xp_xp": "Experience", - "xp_excluded": "{0} has been excluded from the XP system on this server.", - "xp_not_excluded": "{0} is no longer excluded from the XP system on this server.", - "xp_exclusion_list": "Exclusion List", - "xp_server_is_excluded": "This server is excluded.", - "xp_server_is_not_excluded": "This server is not excluded.", - "xp_excluded_roles": "Excluded Roles", - "xp_excluded_channels": "Excluded Channels", - "xp_level_up_channel": "Congratulations {0}, You've reached level {1}!", - "xp_level_up_dm": "Congratulations {0}, You've reached level {1} on {2} server!", - "xp_level_up_global": "Congratulations {0}, You've reached global level {1}!", - "xp_role_reward_cleared": "Level {0} will no longer reward a role.", - "xp_role_reward_added": "Users who reach level {0} will receive {1} role.", - "xp_role_rewards": "Role Rewards", - "xp_level_x": "Level {0}", - "xp_no_role_rewards": "No role reward on this page.", - "xp_server_leaderboard": "Server XP Leaderboard", - "xp_global_leaderboard": "Global XP Leaderboard", - "xp_modified": "Modified server XP of the user {0} by {1}", - "xp_club_create_error": "Failed creating the club. Make sure you're above level 5 and not a member of a club already.", - "xp_club_created": "Club {0} successfully created!", - "xp_club_not_exists": "That club doesn't exist.", - "xp_club_applied": "You've applied for membership in {0} club.", - "xp_club_apply_error": "Error applying. You are either already a member of the club, or you don't meet the minimum level requirement, or you've been banned from this one.", - "xp_club_accepted": "Accepted user {0} to the club.", - "xp_club_accept_error": "User not found", - "xp_club_left": "You've left the club.", - "xp_club_not_in_club": "You are not in a club, or you're trying to leave the club you're the owner of.", - "xp_club_user_kick": "User {0} kicked from {1} club.", - "xp_club_user_kick_fail": "Error kicking. You're either not the club owner, or that user is not in your club.", - "xp_club_user_banned": "Banned user {0} from {1} club.", - "xp_club_user_ban_fail": "Failed to ban. You're either not the club owner, or that user is not in your club or applied to it.", - "xp_club_user_unbanned": "Unbanned user {0} in {1} club.", - "xp_club_user_unban_fail": "Failed to unban. You're either not the club owner, or that user is not in your club or applied to it.", - "xp_club_level_req_changed": "Changed club's level requirement to {0}", - "xp_club_level_req_change_error": "Failed changing level requirement.", - "xp_club_disbanded": "Club {0} has been disbanded", - "xp_club_disband_error": "Error. You are either not in a club, or you are not the owner of your club.", - "xp_club_icon_error": "Not a valid image url or you're not the club owner.", - "xp_club_icon_set": "New club icon set.", - "xp_club_bans_for": "Bans for {0} club", - "xp_club_apps_for": "Applicants for {0} club", - "xp_club_leaderboard": "Club leaderboard - page {0}", - "customreactions_edited_cust_react": "Custom Reaction Edited", - "administration_self_assign_are_exclusive": "You can only choose 1 role from each group.", - "administration_self_assign_are_not_exclusive": "You can choose any number of roles from any group.", - "administration_self_assign_group": "Group {0}", - "gambling_reaction_desc": "Add {0} reaction to this message to get {1} ", - "gambling_reaction_footer": "This event is active for up to {0} hours.", - "gambling_reaction_title": "Reaction event started!", - "administration_no_shards_on_page": "No shards on this page.", - "administration_shard_stats": "Shard stats", - "administration_shard_stats_txt": "Shard **#{0}** is in {1} state with {2} servers - {3} ago", - "games_poll_closed": "Poll Closed!", - "xp_club_not_exists_owner": "You are not the owner or the admin of the club.", - "xp_club_admin_add": "{0} is now a club admin.", - "xp_club_admin_remove": "{0} is no longer club admin.", - "xp_club_admin_error": "Error. You are either not the owner of the club, or that user is not in your club.", - "nsfw_started": "Started. Reposting every {0}s.", - "nsfw_stopped": "Stopped reposting.", - "searches_feed_added": "Feed added.", - "searches_feed_not_valid": "Invalid link, or you're already following that feed on this server, or you've reached maximum number of feeds allowed.", - "searches_feed_out_of_range": "Index out of range.", - "searches_feed_removed": "Feed removed.", - "searches_feed_no_feed": "You haven't subscribed to any feeds on this server.", - "administration_restart_fail": "You must setup RestartCommand in your credentials.json", - "administration_restarting": "Restarting.", - "customreactions_edit_fail": "Custom reaction with that ID does not exist.", - "searches_streaming": "Streaming", - "searches_followers": "Followers", - "gambling_rafflecur": "{0} Currency Raffle", - "gambling_rafflecur_joined": "User {0} joined the raffle", - "gambling_rafflecur_already_joined": "You have already joined this raffle or the value you used is not valid.", - "gambling_rafflecur_ended": "{0} raffle ended. {1} won {2}!", - "music_autodc_enable": "I will disconnect from the voice channel when there are no more songs to play.", - "music_autodc_disable": "I will no longer disconnect from the voice channel when there are no more songs to play.", - "gambling_timely_none": "Bot owner didn't specify a timely reward.", - "gambling_timely_already_claimed": "You've already claimed your timely reward. You can get it again in {0}.", - "gambling_timely": "You've claimed your {0}. You can claim again in {1}h", - "gambling_timely_set": "Users will be able to claim {0} every {1}h", - "gambling_timely_set_none": "Users will not be able to claim any timely currency.", - "gambling_timely_reset": "All users will be able to claim timely currency again." + "customreactions_all_stats_cleared": "All custom reaction stats cleared.", + "customreactions_deleted": "Custom Reaction deleted", + "customreactions_insuff_perms": "Insufficient permissions. Requires Bot ownership for global custom reactions, and Administrator for server custom reactions.", + "customreactions_list_all": "List of all custom reactions", + "customreactions_name": "Custom Reactions", + "customreactions_new_cust_react": "New Custom Reaction", + "customreactions_no_found": "No custom reaction found.", + "customreactions_no_found_id": "No custom reaction found with that id.", + "customreactions_response": "Response", + "customreactions_stats": "Custom Reaction Stats", + "customreactions_stats_cleared": "Stats cleared for {0} custom reaction.", + "customreactions_stats_not_found": "No stats for that trigger found, no action taken.", + "customreactions_trigger": "Trigger", + "nsfw_autohentai_stopped": "Autohentai stopped.", + "nsfw_not_found": "No results found.", + "pokemon_already_fainted": "{0} has already fainted.", + "pokemon_already_full": "{0} already has full HP.", + "pokemon_already_that_type": "Your type is already {0}", + "pokemon_attack": "used {0}{1} on {2}{3} for {4} damage.", + "pokemon_cant_attack_again": "You can't attack again without retaliation!", + "pokemon_cant_attack_yourself": "You can't attack yourself.", + "pokemon_fainted": "{0} has fainted!", + "pokemon_healed": "healed {0} with one {1}", + "pokemon_hp_remaining": "{0} has {1} HP remaining.", + "pokemon_invalid_move": "You can't use {0}. Type `{1}ml` to see a list of moves you can use.", + "pokemon_moves": "Movelist for {0} type", + "pokemon_not_effective": "It's not effective.", + "pokemon_no_currency": "You don't have enough {0}", + "pokemon_revive_other": "revived {0} with one {1}", + "pokemon_revive_yourself": "You revived yourself with one {0}", + "pokemon_settype_success": "Your type has been changed to {0} for a {1}", + "pokemon_somewhat_effective": "It's somewhat effective.", + "pokemon_super_effective": "It's super effective!", + "pokemon_too_many_moves": "You used too many moves in a row, so you can't move!", + "pokemon_type_of_user": "Type of {0} is {1}", + "pokemon_user_not_found": "User not found.", + "pokemon_you_fainted": "You fainted, so you are not able to move!", + "administration_aar_disabled": "**Auto assign role** on user join is now **disabled**.", + "administration_aar_enabled": "**Auto assign role** on user join is now **enabled**.", + "administration_attachments": "Attachments", + "administration_avatar_changed": "Avatar Changed", + "administration_bandm": "You have been banned from {0} server.\nReason: {1}", + "administration_banned_pl": "banned", + "administration_banned_user": "User Banned", + "administration_bot_name": "Bot's name changed to {0}", + "administration_bot_status": "Bot status changed to {0}", + "administration_byedel_off": "Automatic deletion of bye messages has been disabled.", + "administration_byedel_on": "Bye messages will be deleted after {0} seconds.", + "administration_byemsg_cur": "Current bye message: {0}", + "administration_byemsg_enable": "Enable bye messages by typing {0}", + "administration_byemsg_new": "New bye message set.", + "administration_bye_off": "Bye announcements disabled.", + "administration_bye_on": "Bye announcements enabled on this channel.", + "administration_ch_name_change": "Channel Name Changed", + "administration_ch_old_name": "Old Name", + "administration_ch_topic_change": "Channel Topic Changed", + "administration_cleaned_up": "Cleaned up.", + "administration_content": "Content", + "administration_cr": "Successfully created role {0}", + "administration_createtextchan": "Text channel {0} created.", + "administration_createvoich": "Voice channel {0} created.", + "administration_deafen": "Deafen successful.", + "administration_deleted_server": "Deleted server {0}", + "administration_delmsg_off": "Stopped automatic deletion of successful command invokations.", + "administration_delmsg_on": "Now automatically deleting sucessful command invokations.", + "administration_deltextchan": "Text channel {0} deleted.", + "administration_delvoich": "Voice channel {0} deleted.", + "administration_dm_from": "DM from", + "administration_donadd": "Successfully added a new donator.Total donated amount from this user: {0} 👑", + "administration_donators": "Thanks to the people listed below for making this project happen!", + "administration_fwall_start": "I will forward DMs to all owners.", + "administration_fwall_stop": "I will forward DMs only to the first owner.", + "administration_fwdm_start": "I will forward DMs from now on.", + "administration_fwdm_stop": "I will stop forwarding DMs from now on.", + "administration_greetdel_off": "Automatic deletion of greet messages has been disabled.", + "administration_greetdel_on": "Greet messages will be deleted after {0} seconds.", + "administration_greetdmmsg_cur": "Current DM greet message: {0}", + "administration_greetdmmsg_enable": "Enable DM greet messages by typing {0}", + "administration_greetdmmsg_new": "New DM greet message set.", + "administration_greetdm_off": "DM greet announcements disabled.", + "administration_greetdm_on": "DM greet announcements enabled.", + "administration_greetmsg_cur": "Current greet message: {0}", + "administration_greetmsg_enable": "Enable greet messages by typing {0}", + "administration_greetmsg_new": "New greet message set.", + "administration_greet_off": "Greet announcements disabled.", + "administration_greet_on": "Greet announcements enabled on this channel.", + "administration_hierarchy": "You can't use this command on users with a role higher or equal to yours in the role hierarchy.", + "administration_images_loaded": "Images loaded after {0} seconds!", + "administration_invalid_format": "Invalid input format.", + "administration_invalid_params": "Invalid parameters.", + "administration_joined": "{0} has joined {1}", + "administration_kickdm": "You have been kicked from {0} server.\nReason: {1}", + "administration_kicked_user": "User kicked", + "administration_lang_list": "List of languages", + "administration_lang_set": "Your server's locale is now {0} - {1}", + "administration_lang_set_bot": "Bot's default locale is now {0} - {1}", + "administration_lang_set_bot_show": "Bot's language is set to {0} - {1}", + "administration_lang_set_fail": "Failed setting locale. Revisit this command's help.", + "administration_lang_set_show": "This server's language is set to {0} - {1}", + "administration_left": "{0} has left {1}", + "administration_left_server": "Left server {0}", + "administration_log": "Logging {0} event in this channel.", + "administration_log_all": "Logging all events in this channel.", + "administration_log_disabled": "Logging disabled.", + "administration_log_events": "Log events you can subscribe to:", + "administration_log_ignore": "Logging will ignore {0}", + "administration_log_not_ignore": "Logging will not ignore {0}", + "administration_log_stop": "Stopped logging {0} event.", + "administration_menrole": "{0} has invoked a mention on the following roles", + "administration_message_from_bo": "Message from {0} `[Bot Owner]`:", + "administration_message_sent": "Message sent.", + "administration_moved": "{0} moved from {1} to {2}", + "administration_msg_del": "Message deleted in #{0}", + "administration_msg_update": "Message updated in #{0}", + "administration_muted_pl": "Muted", + "administration_muted_sn": "Muted", + "administration_mute_error": "I don't have the permission necessary for that most likely.", + "administration_mute_role_set": "New mute role set.", + "administration_need_admin": "I need **Administration** permission to do that.", + "administration_new_msg": "New message", + "administration_new_nick": "New nickname", + "administration_new_topic": "New topic", + "administration_nick_change": "Nickname changed", + "administration_no_server": "Can't find that server", + "administration_no_shard_id": "No shard with that ID found.", + "administration_old_msg": "Old message", + "administration_old_nick": "Old nickname", + "administration_old_topic": "Old topic", + "administration_perms": "Error. Most likely I don't have sufficient permissions.", + "administration_prot_active": "Active protections", + "administration_prot_disable": "{0} has been **disabled** on this server.", + "administration_prot_enable": "{0} Enabled", + "administration_prot_error": "Error. I need ManageRoles permission", + "administration_prot_none": "No protection enabled.", + "administration_raid_cnt": "User threshold must be between {0} and {1}.", + "administration_raid_stats": "If {0} or more users join within {1} seconds, I will {2} them.", + "administration_raid_time": "Time must be between {0} and {1} seconds.", + "administration_rar": "Successfully removed all roles from user {0}", + "administration_rar_err": "Failed to remove roles. I have insufficient permissions.", + "administration_rc": "Color of {0} role has been changed.", + "administration_rc_not_exist": "That role does not exist.", + "administration_rc_params": "The parameters specified are invalid.", + "administration_rc_perms": "Error occurred due to invalid color or insufficient permissions.", + "administration_remrole": "Successfully removed role {0} from user {1}", + "administration_remrole_err": "Failed to remove role. I have insufficient permissions.", + "administration_renrole": "Role renamed.", + "administration_renrole_err": "Failed to rename role. I have insufficient permissions.", + "administration_renrole_perms": "You can't edit roles higher than your highest role.", + "administration_reprm": "Removed the playing message: {0}", + "administration_role_added": "Role {0} has been added to the list in group {1}.", + "administration_role_clean": "{0} not found.Cleaned up.", + "administration_role_in_list": "Role {0} is already in the list.", + "administration_ropl_added": "Added.", + "administration_ropl_disabled": "Rotating playing status disabled.", + "administration_ropl_enabled": "Rotating playing status enabled.", + "administration_ropl_list": "Here is a list of rotating statuses:\n{0}", + "administration_ropl_not_set": "No rotating playing statuses set.", + "administration_self_assign_already": "You already have {0} role.", + "administration_self_assign_already_excl": "You already have {0} exclusive self-assigned role.", + "administration_self_assign_excl": "Self assigned roles are now exclusive!", + "administration_self_assign_list": "There are {0} self assignable roles", + "administration_self_assign_not": "That role is not self-assignable.", + "administration_self_assign_not_have": "You don't have {0} role.", + "administration_self_assign_no_excl": "Self assigned roles are now not exclusive!", + "administration_self_assign_perms": "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.`", + "administration_self_assign_rem": "{0} has been removed from the list of self-assignable roles.", + "administration_self_assign_remove": "You no longer have {0} role.", + "administration_self_assign_success": "You now have {0} role.", + "administration_setrole": "Successfully added role {0} to user {1}", + "administration_setrole_err": "Failed to add role. I have insufficient permissions.", + "administration_set_avatar": "New avatar set!", + "administration_set_channel_name": "New channel name set.", + "administration_set_game": "New game set!", + "administration_set_stream": "New stream set!", + "administration_set_topic": "New channel topic set.", + "administration_shard_reconnected": "Shard {0} reconnected.", + "administration_shard_reconnecting": "Shard {0} reconnecting.", + "administration_shutting_down": "Shutting down", + "administration_slowmode_desc": "Users can't send more than {0} messages every {1} seconds.", + "administration_slowmode_disabled": "Slow mode disabled.", + "administration_slowmode_init": "Slow mode initiated", + "administration_soft_banned_pl": "soft-banned", + "administration_spam_ignore": "{0} will ignore this channel.", + "administration_spam_not_ignore": "{0} will no longer ignore this channel.", + "administration_spam_stats": "If a user posts {0} same messages in a row, I will {1} them.\n __IgnoredChannels__: {2}", + "administration_text_chan_created": "Text channel created.", + "administration_text_chan_destroyed": "Text channel destroyed.", + "administration_undeafen": "Undeafen successful.", + "administration_unmuted_sn": "Unmuted", + "administration_username": "Username", + "administration_username_changed": "Username changed", + "administration_users": "Users", + "administration_user_banned": "User banned", + "administration_user_chat_mute": "{0} has been **muted** from chatting.", + "administration_user_chat_unmute": "{0} has been **unmuted** from chatting.", + "administration_user_joined": "User joined", + "administration_user_left": "User left", + "administration_user_muted": "{0} has been **muted** from text and voice chat.", + "administration_user_role_add": "User's role added", + "administration_user_role_rem": "User's role removed", + "administration_user_status_change": "{0} is now {1}", + "administration_user_unmuted": "{0} has been **unmuted** from text and voice chat.", + "administration_user_vjoined": "{0} has joined {1} voice channel.", + "administration_user_vleft": "{0} has left {1} voice channel.", + "administration_user_vmoved": "{0} moved from {1} to {2} voice channel.", + "administration_user_voice_mute": "{0} has been **voice muted**.", + "administration_user_voice_unmute": "{0} has been **voice unmuted**.", + "administration_voice_chan_created": "Voice channel created", + "administration_voice_chan_destroyed": "Voice channel destroyed", + "administration_vt_disabled": "Disabled voice + text feature.", + "administration_vt_enabled": "Enabled voice + text feature.", + "administration_vt_exit": "I don't have **manage roles** and/or **manage channels** permission, so I cannot run `voice+text` on {0} server.", + "administration_vt_no_admin": "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.", + "administration_vt_perms": "I require at least **manage roles** and **manage channels** permissions to enable this feature. (preferred Administration permission)", + "administration_xmuted_text": "User {0} from text chat", + "administration_xmuted_text_and_voice": "User {0} from text and voice chat", + "administration_xmuted_voice": "User {0} from voice chat", + "administration_sbdm": "You have been soft-banned from {0} server.\nReason: {1}", + "administration_user_unbanned": "User unbanned", + "administration_migration_done": "Migration done!", + "administration_presence_updates": "Presence updates", + "administration_sb_user": "User soft-banned", + "gambling_awarded": "has awarded {0} to {1}", + "gambling_better_luck": "Better luck next time ^_^", + "gambling_br_win": "Congratulations! You won {0} for rolling above {1}", + "gambling_deck_reshuffled": "Deck reshuffled.", + "gambling_flipped": "flipped {0}.", + "gambling_flip_guess": "You guessed it! You won {0}", + "gambling_flip_invalid": "Invalid number specified. You can flip 1 to {0} coins.", + "gambling_flowerreaction_desc": "Add {0} reaction to this message to get {1} ", + "gambling_flowerreaction_footer": "This event is active for up to {0} hours.", + "gambling_flowerreaction_title": "Flower reaction event started!", + "gambling_gifted": "has gifted {0} to {1}", + "gambling_has": "{0} has {1}", + "gambling_heads": "Head", + "gambling_leaderboard": "Leaderboard", + "gambling_mass_award": "Awarded {0} to {1} users from {2} role.", + "gambling_max_bet_limit": "You can't bet more than {0}", + "gambling_min_bet_limit": "You can't bet less than {0}", + "gambling_not_enough": "You don't have enough {0}", + "gambling_no_more_cards": "No more cards in the deck.", + "gambling_raffled_user": "Raffled user", + "gambling_roll": "You rolled {0}.", + "gambling_slot_bet": "Bet", + "gambling_slot_jackpot": "WOAAHHHHHH!!! Congratulations!!! x{0}", + "gambling_slot_single": "A single {0}, x{1}", + "gambling_slot_three": "Wow! Lucky! Three of a kind! x{0}", + "gambling_slot_two": "Good job! Two {0} - bet x{1}", + "gambling_slot_won": "Won", + "gambling_sneakygamestatus_desc": "Users must type a secret code to get {0}.\nLasts {1} seconds. Don't tell anyone. Shhh.", + "gambling_sneakygamestatus_end": "SneakyGame event ended. {0} users received the reward.", + "gambling_sneakygamestatus_title": "SneakyGameStatus event started", + "gambling_tails": "Tail", + "gambling_take": "successfully took {0} from {1}", + "gambling_take_fail": "was unable to take {0} from{1} because the user doesn't have that much {2}!", + "help_back_to_toc": "Back to ToC", + "help_bot_owner_only": "Bot owner only", + "help_channel_permission": "Requires {0} channel permission.", + "help_cmdlist_donate": "You can support the project on patreon: <{0}> or paypal: <{1}>", + "help_cmd_and_alias": "Commands and aliases", + "help_commandlist_regen": "Commandlist regenerated.", + "help_commands_instr": "Type `{0}h CommandName` to see the help for that specified command. e.g. `{0}h {0}8ball`", + "help_command_not_found": "I can't find that command. Please verify that the command exists before trying again.", + "help_desc": "Description", + "help_donate": "You can support the NadekoBot project on \nPatreon <{0}> or\nPaypal <{1}>\nDon't forget to leave your discord name or id in the message.\n\n**Thank you** ♥️", + "help_guide": "**List of commands**: <{0}>\n**Hosting guides and docs can be found here**: <{1}>", + "help_list_of_commands": "List of commands", + "help_list_of_modules": "List of modules", + "help_modules_footer": "Type `{0}cmds ModuleName` to get a list of commands in that module. eg `{0}cmds games`", + "help_module_not_found": "That module does not exist.", + "help_server_permission": "Requires {0} server permission.", + "help_table_of_contents": "Table of contents", + "help_usage": "Usage", + "nsfw_autohentai_started": "Autohentai started. Reposting every {0}s with one of the following tags:\n{1}", + "nsfw_tag": "Tag", + "gambling_animal_race": "Animal race", + "gambling_animal_race_failed": "Failed to start since there was not enough participants.", + "gambling_animal_race_full": "Race is full! Starting immediately.", + "gambling_animal_race_join": "{0} joined as a {1}", + "gambling_animal_race_join_bet": "{0} joined as a {1} and bet {2}!", + "gambling_animal_race_join_instr": "Type {0}jr to join the race.", + "gambling_animal_race_starting": "Starting in 20 seconds or when the room is full.", + "gambling_animal_race_starting_with_x": "Starting with {0} participants.", + "gambling_animal_race_won": "{0} as {1} Won the race!", + "gambling_animal_race_won_money": "{0} as {1} Won the race and {2}!", + "gambling_dice_invalid_number": "Invalid number specified. You can roll {0}-{1} dice at once.", + "gambling_dice_rolled": "rolled {0}", + "gambling_dice_rolled_num": "Dice rolled: {0}", + "gambling_race_failed_starting": "Failed starting the race. Another race is probably running.", + "gambling_race_not_exist": "No race exists on this server", + "gambling_second_larger_than_first": "Second number must be larger than the first one.", + "gambling_changes_of_heart": "Changes of heart", + "gambling_claimed_by": "Claimed by", + "gambling_divorces": "Divorces", + "gambling_likes": "Likes", + "gambling_price": "Price", + "gambling_waifus_none": "No waifus have been claimed yet.", + "gambling_waifus_top_waifus": "Top Waifus", + "gambling_waifu_affinity_already": "your affinity is already set to that waifu or you're trying to remove your affinity while not having one.", + "gambling_waifu_affinity_changed": "changed their affinity from {0} to {1}.\n\n*This is morally questionable.*🤔", + "gambling_waifu_affinity_cooldown": "You must wait {0} hours and {1} minutes in order to change your affinity again.", + "gambling_waifu_affinity_reset": "Your affinity is reset. You no longer have a person you like.", + "gambling_waifu_affinity_set": "wants to be {0}'s waifu. Aww <3", + "gambling_waifu_claimed": "claimed {0} as their waifu for {1}!", + "gambling_waifu_divorced_like": "You have divorced a waifu who likes you. You heartless monster.\n{0} received {1} as a compensation.", + "gambling_waifu_egomaniac": "you can't set affinity to yourself, you egomaniac.", + "gambling_waifu_fulfilled": "🎉 Their love is fulfilled! 🎉\n{0}'s new value is {1}!", + "gambling_waifu_isnt_cheap": "No waifu is that cheap. You must pay at least {0} to get a waifu, even if their actual value is lower.", + "gambling_waifu_not_enough": "You must pay {0} or more to claim that waifu!", + "gambling_waifu_not_yours": "That waifu is not yours.", + "gambling_waifu_not_yourself": "You can't claim yourself.", + "gambling_waifu_recent_divorce": "You divorced recently. You must wait {0} hours and {1} minutes to divorce again.", + "gambling_nobody": "Nobody", + "gambling_waifu_divorced_notlike": "You have divorced a waifu who doesn't like you. You received {0} back.", + "games_8ball": "8ball", + "games_acrophobia": "Acrophobia", + "games_acro_ended_no_sub": "Game ended with no submissions.", + "games_acro_no_votes_cast": "No votes cast. Game ended with no winner.", + "games_acro_nym_was": "Acronym was {0}.", + "games_acro_running": "Acrophobia game is already running in this channel.", + "games_acro_started": "Game started. Create a sentence with the following acronym: {0}.", + "games_acro_started_footer": "You have {0} seconds to make a submission.", + "games_acro_submit": "{0} submitted their sentence. ({1} total)", + "games_acro_vote": "Vote by typing a number of the submission", + "games_acro_vote_cast": "{0} cast their vote!", + "games_acro_winner": "Winner is {0} with {1} points.", + "games_acro_winner_only": "{0} is the winner for being the only user who made a submission!", + "games_question": "Question", + "games_rps_draw": "It's a draw! Both picked {0}", + "games_rps_win": "{0} won! {1} beats {2}", + "games_submissions_closed": "Submissions closed", + "gambling_animal_race_already_started": "Animal Race is already running.", + "gambling_total_average": "Total: {0} Average: {1}", + "games_category": "Category", + "games_cleverbot_disabled": "Disabled cleverbot on this server.", + "games_cleverbot_enabled": "Enabled cleverbot on this server.", + "games_curgen_disabled": "Currency generation has been disabled on this channel.", + "games_curgen_enabled": "Currency generation has been enabled on this channel.", + "games_curgen_pl": "{0} random {1} appeared!", + "games_curgen_sn": "A random {0} appeared!", + "games_failed_loading_question": "Failed loading a question.", + "games_game_started": "Game started", + "games_hangman_game_started": "Hangman game started", + "games_hangman_running": "Hangman game already running on this channel.", + "games_hangman_start_errored": "Starting hangman errored.", + "games_hangman_types": "List of \"{0}hangman\" term types:", + "games_leaderboard": "Leaderboard", + "games_not_enough": "You don't have enough {0}", + "games_no_results": "No results", + "games_picked": "picked {0}", + "games_planted": "{0} planted {1}", + "games_trivia_already_running": "Trivia game is already running on this server.", + "games_trivia_game": "Trivia Game", + "games_trivia_guess": "{0} guessed it! The answer was: {1}", + "games_trivia_none": "No trivia is running on this server.", + "games_trivia_points": "{0} has {1} points", + "games_trivia_stopping": "Stopping after this question.", + "games_trivia_times_up": "Time's up! The correct answer was {0}", + "games_trivia_win": "{0} guessed it and WON the game! The answer was: {1}", + "games_ttt_against_yourself": "You can't play against yourself.", + "games_ttt_already_running": "TicTacToe Game is already running in this channel.", + "games_ttt_a_draw": "A draw!", + "games_ttt_created": "has created a game of TicTacToe.", + "games_ttt_has_won": "{0} has won!", + "games_ttt_matched_three": "Matched three", + "games_ttt_no_moves": "No moves left!", + "games_ttt_time_expired": "Time expired!", + "games_ttt_users_move": "{0}'s move", + "games_vs": "{0} vs {1}", + "music_attempting_to_queue": "Attempting to queue {0} songs...", + "music_autoplay_disabled": "Autoplay disabled.", + "music_autoplay_enabled": "Autoplay enabled.", + "music_defvol_set": "Default volume set to {0}%", + "music_dir_queue_complete": "Directory queue complete.", + "music_fairplay": "Fairplay", + "music_finished_song": "Finished song", + "music_fp_disabled": "Fair play disabled.", + "music_fp_enabled": "Fair play enabled.", + "music_from_position": "From position", + "music_id": "Id", + "music_invalid_input": "Invalid input.", + "music_max_playtime_none": "Max playtime has no limit now.", + "music_max_playtime_set": "Max playtime set to {0} second(s).", + "music_max_queue_unlimited": "Max music queue size set to unlimited.", + "music_max_queue_x": "Max music queue size set to {0} track(s).", + "music_must_be_in_voice": "You need to be in the voice channel on this server.", + "music_name": "Name", + "music_now_playing": "Now playing", + "music_no_player": "No active music player.", + "music_no_search_results": "No search results.", + "music_paused": "Music playback paused.", + "music_player_queue": "Player queue - Page {0}/{1}", + "music_playing_song": "Playing song #{0}", + "music_playlists": "`#{0}` - **{1}** by *{2}* ({3} songs)", + "music_playlists_page": "Page {0} of saved playlists", + "music_playlist_deleted": "Playlist deleted.", + "music_playlist_delete_fail": "Failed to delete that playlist. It either doesn't exist, or you are not its author.", + "music_playlist_id_not_found": "Playlist with that ID doesn't exist.", + "music_playlist_queue_complete": "Playlist queue complete.", + "music_playlist_saved": "Playlist saved", + "music_play_limit": "{0}s limit", + "music_queue": "Queue", + "music_queued_song": "Queued song", + "music_queue_cleared": "Music queue cleared.", + "music_queue_full": "Queue is full at {0}/{0}.", + "music_removed_song": "Removed song", + "music_repeating_cur_song": "Repeating current song", + "music_repeating_playlist": "Repeating playlist", + "music_repeating_track": "Repeating track", + "music_repeating_track_stopped": "Current track repeat stopped.", + "music_resumed": "Music playback resumed.", + "music_rpl_disabled": "Repeat playlist disabled.", + "music_rpl_enabled": "Repeat playlist enabled.", + "music_set_music_channel": "I will now output playing, finished, paused and removed songs in this channel.", + "music_skipped_to": "Skipped to `{0}:{1}`", + "music_song_moved": "Song moved", + "music_time_format": "{0}h {1}m {2}s", + "music_to_position": "To position", + "music_unlimited": "unlimited", + "music_volume_input_invalid": "Volume must be between 0 and 100", + "music_volume_set": "Volume set to {0}%", + "permissions_acm_disable": "Disabled usage of ALL MODULES on channel {0}.", + "permissions_acm_enable": "Enabled usage of ALL MODULES on channel {0}.", + "permissions_allowed": "Allowed", + "permissions_arm_disable": "Disabled usage of ALL MODULES for role {0}.", + "permissions_arm_enable": "Enabled usage of ALL MODULES for role {0}.", + "permissions_asm_disable": "Disabled usage of ALL MODULES on this server.", + "permissions_asm_enable": "Enabled usage of ALL MODULES on this server.", + "permissions_aum_disable": "Disabled usage of ALL MODULES for user {0}.", + "permissions_aum_enable": "Enabled usage of ALL MODULES for user {0}.", + "permissions_blacklisted": "Blacklisted {0} with ID {1}", + "permissions_cmdcd_add": "Command {0} now has a {1}s cooldown.", + "permissions_cmdcd_cleared": "Command {0} has no cooldown now and all existing cooldowns have been cleared.", + "permissions_cmdcd_none": "No command cooldowns set.", + "permissions_command_costs": "Command costs", + "permissions_cx_disable": "Disabled usage of {0} {1} on channel {2}.", + "permissions_cx_enable": "Enabled usage of {0} {1} on channel {2}.", + "permissions_denied": "Denied", + "permissions_filter_word_add": "Added word {0} to the list of filtered words.", + "permissions_filter_word_list": "List of filtered words", + "permissions_filter_word_remove": "Removed word {0} from the list of filtered words.", + "permissions_invalid_second_param_between": "Invalid second parameter.(Must be a number between {0} and {1})", + "permissions_invite_filter_channel_off": "Invite filtering disabled on this channel.", + "permissions_invite_filter_channel_on": "Invite filtering enabled on this channel.", + "permissions_invite_filter_server_off": "Invite filtering disabled on this server.", + "permissions_invite_filter_server_on": "Invite filtering enabled on this server.", + "permissions_moved_permission": "Moved permission {0} from #{1} to #{2}", + "permissions_not_found": "Can't find permission at index #{0}", + "permissions_no_costs": "No costs set.", + "permissions_of_command": "command", + "permissions_of_module": "module", + "permissions_page": "Permissions page {0}", + "permissions_permrole": "Current permissions role is {0}.", + "permissions_permrole_changed": "Users now require {0} role in order to edit permissions.", + "permissions_perm_out_of_range": "No permission found on that index.", + "permissions_removed": "removed permission #{0} - {1}", + "permissions_rx_disable": "Disabled usage of {0} {1} for {2} role.", + "permissions_rx_enable": "Enabled usage of {0} {1} for {2} role.", + "permissions_sec": "sec.", + "permissions_sx_disable": "Disabled usage of {0} {1} on this server.", + "permissions_sx_enable": "Enabled usage of {0} {1} on this server.", + "permissions_unblacklisted": "Unblacklisted {0} with ID {1}", + "permissions_uneditable": "uneditable", + "permissions_ux_disable": "Disabled usage of {0} {1} for {2} user.", + "permissions_ux_enable": "Enabled usage of {0} {1} for {2} user.", + "permissions_verbose_false": "I will no longer show permission warnings.", + "permissions_verbose_true": "I will now show permission warnings.", + "permissions_word_filter_channel_off": "Word filtering disabled on this channel.", + "permissions_word_filter_channel_on": "Word filtering enabled on this channel.", + "permissions_word_filter_server_off": "Word filtering disabled on this server.", + "permissions_word_filter_server_on": "Word filtering enabled on this server.", + "searches_abilities": "Abilities", + "searches_anime_no_fav": "No favorite anime yet", + "searches_atl_ad_started": "Started automatic translation of messages on this channel. User messages will be auto-deleted.", + "searches_atl_removed": "your auto-translate language has been removed.", + "searches_atl_set": "Your auto-translate language has been set to {0}>{1}", + "searches_atl_started": "Started automatic translation of messages on this channel.", + "searches_atl_stopped": "Stopped automatic translation of messages on this channel.", + "searches_bad_input_format": "Bad input format, or something went wrong.", + "searches_card_not_found": "Couldn't find that card.", + "searches_catfact": "fact", + "searches_chapters": "Chapters", + "searches_comic_number": "Comic #", + "searches_compet_loses": "Competitive losses", + "searches_compet_played": "Competitive played", + "searches_compet_rank": "Competitive rank", + "searches_compet_wins": "Competitive Wins", + "searches_completed": "Completed", + "searches_condition": "Condition", + "searches_cost": "Cost", + "searches_date": "Date", + "searches_define": "Define:", + "searches_dropped": "Dropped", + "searches_episodes": "Episodes", + "searches_error_occured": "Error occurred.", + "searches_example": "Example", + "searches_failed_finding_anime": "Failed finding that animu.", + "searches_failed_finding_manga": "Failed finding that mango.", + "searches_genres": "Genres", + "searches_authors": "Authors", + "searches_hashtag_error": "Failed finding a definition for that tag.", + "searches_height_weight": "Height/Weight", + "searches_height_weight_val": "{0}m/{1}kg", + "searches_humidity": "Humidity", + "searches_image_search_for": "Image search for:", + "searches_imdb_fail": "Failed to find that movie.", + "searches_invalid_lang": "Invalid source or target language.", + "searches_jokes_not_loaded": "Jokes not loaded.", + "searches_latlong": "Lat/Long", + "searches_level": "Level", + "searches_list_of_place_tags": "List of {0}place tags", + "searches_location": "Location", + "searches_magicitems_not_loaded": "Magic Items not loaded.", + "searches_mal_profile": "{0}'s MAL profile", + "searches_mashape_api_missing": "Bot owner didn't specify MashapeApiKey. You can't use this functionality.", + "searches_min_max": "Min/Max", + "searches_no_channel_found": "No channel found.", + "searches_no_results": "No results found.", + "searches_on_hold": "On-hold", + "searches_original_url": "Original url", + "searches_osu_api_key": "An osu! API key is required.", + "searches_osu_failed": "Failed retrieving osu! signature.", + "searches_over_x": "Found over {0} images. Showing random {0}.", + "searches_ow_user_not_found": "User not found! Please check the Region and BattleTag before trying again.", + "searches_plan_to_watch": "Plan to watch", + "searches_platform": "Platform", + "searches_pokemon_ability_none": "No ability found.", + "searches_pokemon_none": "No pokemon found.", + "searches_profile_link": "Profile link:", + "searches_quality": "Quality:", + "searches_quick_playtime": "Quick playtime", + "searches_quick_wins": "Quick wins", + "searches_rating": "Rating", + "searches_score": "Score:", + "searches_search_for": "Search for:", + "searches_shorten_fail": "Failed to shorten that url.", + "searches_short_url": "Short url", + "searches_something_went_wrong": "Something went wrong.", + "searches_specify_search_params": "Please specify search parameters.", + "searches_status": "Status", + "searches_store_url": "Store url", + "searches_streamer_offline": "Streamer {0} is offline.", + "searches_streamer_online": "Streamer {0} is online with {1} viewers.", + "searches_streams_following": "You are following {0} streams on this server.", + "searches_streams_none": "You are not following any streams on this server.", + "searches_stream_no": "No such stream.", + "searches_stream_not_exist": "Stream probably doesn't exist.", + "searches_stream_removed": "Removed {0}'s stream ({1}) from notifications.", + "searches_stream_tracked": "I will notify this channel when status changes.", + "searches_sunrise": "Sunrise", + "searches_sunset": "Sunset", + "searches_temperature": "Temperature", + "searches_title": "Title:", + "searches_top_3_fav_anime": "Top 3 favorite anime:", + "searches_translation": "Translation:", + "searches_types": "Types", + "searches_ud_error": "Failed finding definition for that term.", + "searches_url": "Url", + "searches_viewers": "Viewers", + "searches_watching": "Watching", + "searches_wikia_error": "Failed finding that term on the specified wikia.", + "searches_wikia_input_error": "Please enter a target wikia, followed by search query.", + "searches_wiki_page_not_found": "Page not found.", + "searches_wind_speed": "Wind speed", + "searches_x_most_banned_champs": "The {0} most banned champions", + "searches_yodify_error": "Failed to yodify your sentence.", + "utiliity_joined": "Joined", + "utility_activity_line": "`{0}.` {1} [{2:F2}/s] - {3} total", + "utility_activity_page": "Activity page #{0}", + "utility_activity_users_total": "{0} users total.", + "utility_author": "Author", + "utility_botid": "Bot ID", + "utility_calcops": "List of functions in {0}calc command", + "utility_channelid": "{0} of this channel is {1}", + "utility_channel_topic": "Channel topic", + "utility_commands_ran": "Commands ran", + "utility_convert": "{0} {1} is equal to {2} {3}", + "utility_convertlist": "Units which can be used by the converter", + "utility_convert_not_found": "Cannot convert {0} to {1}: units not found", + "utility_convert_type_error": "Cannot convert {0} to {1}: types of unit are not equal", + "utility_created_at": "Created at", + "utility_custom_emojis": "Custom emojis", + "utility_error": "Error", + "utility_features": "Features", + "utility_id": "ID", + "utility_index_out_of_range": "Index out of range.", + "utility_inrole_list": "List of users in {0} role", + "utility_inrole_not_allowed": "You are not allowed to use this command on roles with a lot of users in them to prevent abuse.", + "utility_invalid_value": "Invalid {0} value.", + "utility_joined_discord": "Joined Discord", + "utility_joined_server": "Joined server", + "utility_listservers": "ID: {0}\nMembers: {1}\nOwner ID: {2}", + "utility_listservers_none": "No servers found on that page.", + "utility_list_of_repeaters": "List of repeater", + "utility_members": "Members", + "utility_memory": "Memory", + "utility_messages": "Messages", + "utility_message_repeater": "Message repeater", + "utility_name": "Name", + "utility_nickname": "Nickname", + "utility_nobody_playing_game": "Nobody is playing that game.", + "utility_no_active_repeaters": "No active repeaters.", + "utility_no_roles_on_page": "No roles on this page.", + "utility_no_shards_on_page": "No shards on this page.", + "utility_no_topic_set": "No topic set.", + "utility_owner": "Owner", + "utility_owner_ids": "Owner IDs", + "utility_presence": "Presence", + "utility_presence_txt": "{0} Servers\n{1} Text Channels\n{2} Voice Channels", + "utility_quotes_deleted": "Deleted all quotes with {0} keyword.", + "utility_quotes_page": "Page {0} of quotes", + "utility_quotes_page_none": "No quotes found on that page.", + "utility_quotes_remove_none": "No quotes found which you can remove.", + "utility_quote_added": "Quote Added", + "utility_quote_deleted": "Quote #{0} deleted.", + "utility_region": "Region", + "utility_registered_on": "Registered on", + "utility_remind": "I will remind {0} to {1} in {2} `({3:d.M.yyyy.} at {4:HH:mm})`", + "utility_remind_invalid_format": "Not a valid time format. Check the commandlist.", + "utility_remind_template": "New remind template set.", + "utility_repeater": "Repeating {0} every {1} day(s), {2} hour(s) and {3} minute(s).", + "utility_repeaters_list": "List of repeaters", + "utility_repeaters_none": "No repeaters running on this server.", + "utility_repeater_stopped": "#{0} stopped.", + "utility_repeat_invoke_none": "No repeating messages found on this server.", + "utility_result": "Result", + "utility_roles": "Roles", + "utility_roles_all_page": "Page #{0} of all roles on this server:", + "utility_roles_page": "Page #{0} of roles for {1}", + "utility_rrc_no_colors": "No colors are in the correct format. Use `#00ff00` for example.", + "utility_rrc_start": "Started rotating {0} role's color.", + "utility_rrc_stop": "Stopped rotating colors for the {0} role", + "utility_serverid": "{0} of this server is {1}", + "utility_server_info": "Server info", + "utility_shard": "Shard", + "utility_shard_stats": "Shard stats", + "utility_shard_stats_txt": "Shard **#{0}** is in {1} state with {2} servers - {3} ago", + "utility_showemojis": "**Name:** {0} **Link:** {1}", + "utility_showemojis_none": "No special emojis found.", + "utility_stats_songs": "Playing {0} songs, {1} queued.", + "utility_text_channels": "Text channels", + "utility_togtub_room_link": "Here is your room link:", + "utility_uptime": "Uptime", + "utility_userid": "{0} of the user {1} is {2}", + "utility_users": "Users", + "utility_voice_channels": "Voice channels", + "gambling_animal_race_already_in": "You've already joined this race!", + "games_current_poll_results": "Current poll results", + "games_no_votes_cast": "No votes cast.", + "games_poll_already_running": "Poll is already running on this server.", + "games_poll_created": "📃 {0} has created a poll", + "games_poll_result": "`{0}.` {1} with {2} votes.", + "games_poll_voted": "{0} voted.", + "games_poll_vote_private": "Private Message me with the corresponding number of the answer.", + "games_poll_vote_public": "Send a Message here with the corresponding number of the answer.", + "games_thanks_for_voting": "Thank you for voting, {0}", + "games_x_votes_cast": "{0} total votes cast.", + "games_pick_pl": "Pick them up by typing `{0}pick`", + "games_pick_sn": "Pick it up by typing `{0}pick`", + "gambling_no_users_found": "No user found.", + "gambling_page": "page {0}", + "administration_must_be_in_voice": "You must be in a voice channel on this server.", + "administration_no_vcroles": "There are no voice channel roles.", + "administration_user_muted_time": "{0} has been **muted** from text and voice chat for {1} minutes.", + "administration_vcrole_added": "Users who join {0} voice channel will get {1} role.", + "administration_vcrole_removed": "Users who join {0} voice channel will no longer get a role.", + "administration_vc_role_list": "Voice channel roles", + "customreactions_crad_disabled": "Message triggering the custom reaction with id {0} won't get automatically deleted.", + "customreactions_crad_enabled": "Message triggering the custom reaction with id {0} will get automatically deleted.", + "customreactions_crdm_disabled": "Response message for the custom reaction with id {0} won't be sent as a DM.", + "customreactions_crdm_enabled": "Response message for the custom reaction with id {0} will be sent as a DM.", + "utility_aliases_none": "No alias found", + "utility_alias_added": "Typing {0} will now be an alias of {1}.", + "utility_alias_list": "List of aliases", + "utility_alias_removed": "Trigger {0} no longer has an alias.", + "utility_alias_remove_fail": "Trigger {0} didn't have an alias.", + "searches_compet_playtime": "Competitive playtime", + "administration_channel": "Channel", + "administration_command_text": "Command Text", + "administration_kicked_pl": "Kicked", + "administration_moderator": "Moderator", + "administration_page": "page {0}", + "administration_reason": "Reason", + "administration_scadd": "New startup command added.", + "administration_scrm": "Startup command successfully removed.", + "administration_scrm_fail": "Startup command not found.", + "administration_server": "Server", + "administration_startcmdlist_none": "No startup commands on this page.", + "administration_startcmds_cleared": "Cleared all startup commands.", + "administration_unbanned_user": "User {0} has been unbanned.", + "administration_user_not_found": "User not found.", + "administration_user_warned": "User {0} has been warned.", + "administration_user_warned_and_punished": "User {0} has been warned and {1} punishment has been applied.", + "administration_warned_on": "Warned on {0} server", + "administration_warned_on_by": "On {0} at {1} by {2}", + "administration_warnings_cleared": "All warnings have been cleared for {0}.", + "administration_warnings_none": "No warning on this page.", + "administration_warnlog_for": "Warnlog for {0}", + "administration_warnpl_none": "No punishments set.", + "administration_warn_cleared_by": "cleared by {0}", + "administration_warn_punish_list": "Warning punishment list", + "administration_warn_punish_rem": "Having {0} warnings will no longer trigger a punishment.", + "administration_warn_punish_set": "I will apply {0} punishment to users with {1} warnings.", + "administration_slowmodewl_role_start": "Slowmode will now ignore {0} role.", + "administration_slowmodewl_role_stop": "Slowmode will no longer ignore {0} role.", + "administration_slowmodewl_user_start": "Slowmode will now ignore user {0}.", + "administration_slowmodewl_user_stop": "Slowmode will no longer ignore user {0}.", + "utility_clpa_fail": "Failed claiming rewards due to one of the following reasons:", + "utility_clpa_fail_already": "Maybe you've already received your reward for this month. You can receive rewards only once a month unless you increase your pledge.", + "utility_clpa_fail_already_title": "Already rewarded", + "utility_clpa_fail_conn": "Your discord account might not be connected to Patreon. If you are unsure what that means, or don't know how to connect it - you have to go to [Patreon account settings page](https://patreon.com/settings/account) and click 'Connect to discord' button.", + "utility_clpa_fail_conn_title": "Discord account not connected", + "utility_clpa_fail_sup": "In order to be eligible for the reward, you must support the project on patreon. You can use {0} command to get the link.", + "utility_clpa_fail_sup_title": "Not supporting", + "utility_clpa_fail_wait": "You have to wait a few hours after making your pledge, if you didn't, try again later.", + "utility_clpa_fail_wait_title": "Wait some time", + "utility_clpa_success": "You've received {0} Thanks for supporting the project!", + "utility_clpa_too_early": "Rewards can be claimed on or after 5th of each month.", + "searches_time": "Time in {0} is {1} - {2}", + "administration_rh": "Set the display of guild role {0} to {1}.", + "gambling_name": "Name", + "gambling_shop": "Shop", + "gambling_shop_item_add": "Shop item added", + "gambling_shop_none": "No shop items found on this page.", + "gambling_shop_role": "You will get {0} role.", + "gambling_type": "Type", + "utility_clpa_next_update": "Next update in {0}", + "administration_gvc_disabled": "Game Voice Channel feature has been disabled on this server.", + "administration_gvc_enabled": "{0} is a Game Voice Channel now.", + "administration_not_in_voice": "You are not in a voice channel on this server.", + "gambling_item": "Item", + "gambling_out_of_stock": "Out of stock.", + "gambling_random_unique_item": "Random unique item.", + "gambling_shop_buy_error": "Error DMing item. You've been refunded.", + "gambling_shop_item_not_found": "No item on that index found.", + "gambling_shop_item_purchase": "Item purchase successful.", + "gambling_shop_item_rm": "Shop item removed", + "gambling_shop_item_wrong_type": "That shop entry does not support item adding.", + "gambling_shop_list_item_added": "Item successfully added.", + "gambling_shop_list_item_not_unique": "That item is already added.", + "gambling_shop_purchase": "Purchase on {0} server", + "gambling_shop_role_not_found": "Role which is being sold no longer exists.", + "gambling_shop_role_purchase": "You've successfully purchased {0} role.", + "gambling_shop_role_purchase_error": "Error assigning role. Your purchase has been refunded.", + "gambling_unique_items_left": "{0} unique items left.", + "permissions_blocked_commands": "Blocked Commands", + "permissions_blocked_modules": "Blocked Modules", + "permissions_gcmd_add": "Command {0} has been disabled on all servers.", + "permissions_gcmd_remove": "Command {0} has been enabled on all servers.", + "permissions_gmod_add": "Module {0} has been disabled on all servers.", + "permissions_gmod_remove": "Module {0} has been enabled on all servers.", + "permissions_lgp_none": "No blocked commands or modules.", + "gambling_animal_race_no_race": "This Animal Race is full!", + "utility_cant_read_or_send": "You can't read from or send messages to that channel.", + "utility_quotes_notfound": "No quotes found matching the quote ID specified.", + "administration_prefix_current": "Prefix on this server is {0}", + "administration_prefix_new": "Changed prefix on this server from {0} to {1}", + "administration_defprefix_current": "Default bot prefix is {0}", + "administration_defprefix_new": "Changed Default bot prefix from {0} to {1}", + "administration_bot_nick": "Bot's nickname changed to {0}", + "administration_user_nick": "Nickname of the user {0} changed to {1}", + "administration_timezone_guild": "Timezone for this guild is `{0}`", + "administration_timezone_not_found": "Timezone not found. Use \"timezones\" command to see the list of available timezones.", + "administration_timezones_available": "Available Timezones", + "music_song_not_found": "No song found.", + "searches_define_unknown": "Can't find the definition for that term.", + "utility_repeater_initial": "Initial repeating message will be sent in {0}h and {1}min.", + "utility_verbose_errors_enabled": "Incorrectly used commands will now show errors.", + "utility_verbose_errors_disabled": "Incorrectly used commands will no longer show errors.", + "permissions_perms_reset": "Permissions for this server are reset.", + "permissions_trigger": "Permission number #{0} {1} is preventing this action.", + "administration_migration_error": "Error while migrating, check bot's console for more information.", + "searches_hex_invalid": "Invalid color specified.", + "permissions_global_perms_reset": "Global permissions have been reset.", + "help_module": "Module: {0}", + "games_hangman_stopped": "Hangman game stopped.", + "music_autoplaying": "Auto-playing.", + "music_queue_stopped": "Player is stopped. Use {0} command to start playing.", + "music_removed_song_error": "Song on that index doesn't exist", + "music_shuffling_playlist": "Shuffling songs", + "music_songs_shuffle_enable": "Songs will shuffle from now on.", + "music_songs_shuffle_disable": "Songs will no longer shuffle.", + "music_song_skips_after": "Songs will skip after {0}", + "administration_warnings_list": "List of all warned users on the server", + "customreactions_redacted_too_long": "Redacted because it's too long.", + "nsfw_blacklisted_tag_list": "List of blacklisted tags:", + "nsfw_blacklisted_tag": "One or more tags you've used are blacklisted", + "nsfw_blacklisted_tag_add": "Nsfw tag {0} is now blacklisted.", + "nsfw_blacklisted_tag_remove": "Nsfw tag {0} is no longer blacklisted.", + "gambling_waifu_gift": "Gifted {0} to {1}", + "gambling_waifu_gift_shop": "Waifu gift shop", + "gambling_gifts": "Gifts", + "games_connect4_created": "Created a Connect4 game. Waiting for a player to join.", + "games_connect4_player_to_move": "Player to move: {0}", + "games_connect4_failed_to_start": "Connect4 game failed to start because nobody joined.", + "games_connect4_draw": "Connect4 game ended in a draw.", + "games_connect4_won": "{0} won the game of Connect4 against {1}.", + "games_nunchi_joined": "Joined nunchi game. {0} users joined so far.", + "games_nunchi_ended": "Nunchi game ended. {0} won", + "games_nunchi_ended_no_winner": "Nunchi game ended with no winner.", + "games_nunchi_started": "Nunchi game started with {0} participants.", + "games_nunchi_round_ended": "Nunchi round ended. {0} is out of the game.", + "games_nunchi_round_ended_boot": "Nunchi round ended due to timeout of some users. These users are still in the game: {0}", + "games_nunchi_round_started": "Nunchi round started with {0} users. Start counting from the number {1}.", + "games_nunchi_next_number": "Number registered. Last number was {0}.", + "games_nunchi_failed_to_start": "Nunchi failed to start because there were not enough participants.", + "games_nunchi_created": "Nunchi game created. Waiting for users to join.", + "music_sad_enabled": "Songs will be deleted from the music queue when they finish playing.", + "music_sad_disabled": "Songs will no longer be deleted from the music queue when they finish playing.", + "utility_stream_role_enabled": "When a user from {0} role starts streaming, I will give them {1} role.", + "utility_stream_role_disabled": "Stream role feature has been disabled.", + "utility_stream_role_kw_set": "Streamers now require {0} keyword in order to receive the role.", + "utility_stream_role_kw_reset": "Stream role keyword reset.", + "utility_stream_role_bl_add": "User {0} will never receive the stream role.", + "utility_stream_role_bl_add_fail": "User {0} is already blacklisted.", + "utility_stream_role_bl_rem": "User {0} is no longer blacklisted.", + "utility_stream_role_bl_rem_fail": "User {0} is not blacklisted.", + "utility_stream_role_wl_add": "User {0} will receive the stream role even if they don't have the keyword in the stream title.", + "utility_stream_role_wl_add_fail": "User {0} is already whitelisted.", + "utility_stream_role_wl_rem": "User {0} is no longer whitelisted.", + "utility_stream_role_wl_rem_fail": "User {0} is not whitelisted.", + "utility_bot_config_edit_fail": "Failed setting {0} to the value {1}", + "utility_bot_config_edit_success": "The value of {0} is set to {1}", + "customreactions_crca_disabled": "Custom reaction with id {0} will no longer trigger unless it's trigger word is at the beggining of the sentence.", + "customreactions_crca_enabled": "Custom reaction with id {0} will now trigger if it's contained anywhere in the sentence.", + "xp_server_level": "Server Level", + "xp_level": "Level", + "xp_club": "Club", + "xp_xp": "Experience", + "xp_excluded": "{0} has been excluded from the XP system on this server.", + "xp_not_excluded": "{0} is no longer excluded from the XP system on this server.", + "xp_exclusion_list": "Exclusion List", + "xp_server_is_excluded": "This server is excluded.", + "xp_server_is_not_excluded": "This server is not excluded.", + "xp_excluded_roles": "Excluded Roles", + "xp_excluded_channels": "Excluded Channels", + "xp_level_up_channel": "Congratulations {0}, You've reached level {1}!", + "xp_level_up_dm": "Congratulations {0}, You've reached level {1} on {2} server!", + "xp_level_up_global": "Congratulations {0}, You've reached global level {1}!", + "xp_role_reward_cleared": "Level {0} will no longer reward a role.", + "xp_role_reward_added": "Users who reach level {0} will receive {1} role.", + "xp_role_rewards": "Role Rewards", + "xp_level_x": "Level {0}", + "xp_no_role_rewards": "No role reward on this page.", + "xp_server_leaderboard": "Server XP Leaderboard", + "xp_global_leaderboard": "Global XP Leaderboard", + "xp_modified": "Modified server XP of the user {0} by {1}", + "xp_club_create_error": "Failed creating the club. Make sure you're above level 5 and not a member of a club already.", + "xp_club_created": "Club {0} successfully created!", + "xp_club_not_exists": "That club doesn't exist.", + "xp_club_applied": "You've applied for membership in {0} club.", + "xp_club_apply_error": "Error applying. You are either already a member of the club, or you don't meet the minimum level requirement, or you've been banned from this one.", + "xp_club_accepted": "Accepted user {0} to the club.", + "xp_club_accept_error": "User not found", + "xp_club_left": "You've left the club.", + "xp_club_not_in_club": "You are not in a club, or you're trying to leave the club you're the owner of.", + "xp_club_user_kick": "User {0} kicked from {1} club.", + "xp_club_user_kick_fail": "Error kicking. You're either not the club owner, or that user is not in your club.", + "xp_club_user_banned": "Banned user {0} from {1} club.", + "xp_club_user_ban_fail": "Failed to ban. You're either not the club owner, or that user is not in your club or applied to it.", + "xp_club_user_unbanned": "Unbanned user {0} in {1} club.", + "xp_club_user_unban_fail": "Failed to unban. You're either not the club owner, or that user is not in your club or applied to it.", + "xp_club_level_req_changed": "Changed club's level requirement to {0}", + "xp_club_level_req_change_error": "Failed changing level requirement.", + "xp_club_disbanded": "Club {0} has been disbanded", + "xp_club_disband_error": "Error. You are either not in a club, or you are not the owner of your club.", + "xp_club_icon_error": "Not a valid image url or you're not the club owner.", + "xp_club_icon_set": "New club icon set.", + "xp_club_bans_for": "Bans for {0} club", + "xp_club_apps_for": "Applicants for {0} club", + "xp_club_leaderboard": "Club leaderboard - page {0}", + "customreactions_edited_cust_react": "Custom Reaction Edited", + "administration_self_assign_are_exclusive": "You can only choose 1 role from each group.", + "administration_self_assign_are_not_exclusive": "You can choose any number of roles from any group.", + "administration_self_assign_group": "Group {0}", + "gambling_reaction_desc": "Add {0} reaction to this message to get {1} ", + "gambling_reaction_footer": "This event is active for up to {0} hours.", + "gambling_reaction_title": "Reaction event started!", + "administration_no_shards_on_page": "No shards on this page.", + "administration_shard_stats": "Shard stats", + "administration_shard_stats_txt": "Shard **#{0}** is in {1} state with {2} servers - {3} ago", + "games_poll_closed": "Poll Closed!", + "xp_club_not_exists_owner": "You are not the owner or the admin of the club.", + "xp_club_admin_add": "{0} is now a club admin.", + "xp_club_admin_remove": "{0} is no longer club admin.", + "xp_club_admin_error": "Error. You are either not the owner of the club, or that user is not in your club.", + "nsfw_started": "Started. Reposting every {0}s.", + "nsfw_stopped": "Stopped reposting.", + "searches_feed_added": "Feed added.", + "searches_feed_not_valid": "Invalid link, or you're already following that feed on this server, or you've reached maximum number of feeds allowed.", + "searches_feed_out_of_range": "Index out of range.", + "searches_feed_removed": "Feed removed.", + "searches_feed_no_feed": "You haven't subscribed to any feeds on this server.", + "administration_restart_fail": "You must setup RestartCommand in your credentials.json", + "administration_restarting": "Restarting.", + "customreactions_edit_fail": "Custom reaction with that ID does not exist.", + "searches_streaming": "Streaming", + "searches_followers": "Followers", + "gambling_rafflecur": "{0} Currency Raffle", + "gambling_rafflecur_joined": "User {0} joined the raffle", + "gambling_rafflecur_already_joined": "You have already joined this raffle or the value you used is not valid.", + "gambling_rafflecur_ended": "{0} raffle ended. {1} won {2}!", + "music_autodc_enable": "I will disconnect from the voice channel when there are no more songs to play.", + "music_autodc_disable": "I will no longer disconnect from the voice channel when there are no more songs to play.", + "gambling_timely_none": "Bot owner didn't specify a timely reward.", + "gambling_timely_already_claimed": "You've already claimed your timely reward. You can get it again in {0}.", + "gambling_timely": "You've claimed your {0}. You can claim again in {1}h", + "gambling_timely_set": "Users will be able to claim {0} every {1}h", + "gambling_timely_set_none": "Users will not be able to claim any timely currency.", + "gambling_timely_reset": "All users will be able to claim timely currency again." } \ No newline at end of file diff --git a/src/NadekoBot/data/command_strings.json b/src/NadekoBot/data/command_strings.json index bc50b659..3e244beb 100644 --- a/src/NadekoBot/data/command_strings.json +++ b/src/NadekoBot/data/command_strings.json @@ -2314,6 +2314,13 @@ "{0}claim 50 @Himesama" ] }, + "waifutransfer": { + "cmd": "waifutransfer", + "desc": "Transfer the ownership of one of your waifus to another user. You must pay 10% of your waifu's value.", + "usage": [ + "{0}waifutransfer @ExWaifu @NewOwner" + ] + }, "waifugift": { "Cmd": "waifugift gift gifts", "Desc": "Gift an item to someone. This will increase their waifu value by 50% of the gifted item's value if they don't have affinity set towards you, or 100% if they do. Provide no arguments to see a list of items that you can gift.", @@ -3076,5 +3083,12 @@ "usage": [ "{0}timelyreset" ] + }, + "novel": { + "cmd": "novel", + "desc": "Searches for a novel on `http://novelupdates.com/`. You have to provide an exact name.", + "usage": [ + "{0}novel the nine cauldrons" + ] } } From ed1272271525da5add392af95c8a32b0e57cfc12 Mon Sep 17 00:00:00 2001 From: Master Kwoth Date: Fri, 3 Nov 2017 07:27:09 +0100 Subject: [PATCH 3/3] Added .waifutransfer command --- NadekoBot.Core/Modules/Gambling/Services/WaifuService.cs | 4 +++- NadekoBot.Core/Modules/Gambling/WaifuClaimCommands.cs | 5 ++++- src/NadekoBot/_strings/ResponseStrings.en-US.json | 2 ++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/NadekoBot.Core/Modules/Gambling/Services/WaifuService.cs b/NadekoBot.Core/Modules/Gambling/Services/WaifuService.cs index 7e1ccb82..f9274c52 100644 --- a/NadekoBot.Core/Modules/Gambling/Services/WaifuService.cs +++ b/NadekoBot.Core/Modules/Gambling/Services/WaifuService.cs @@ -22,13 +22,15 @@ namespace NadekoBot.Modules.Gambling.Services public async Task WaifuTransfer(IUser owner, ulong waifuId, IUser newOwner) { + if (owner.Id == newOwner.Id || waifuId == newOwner.Id) + return false; using (var uow = _db.UnitOfWork) { var waifu = uow.Waifus.ByWaifuUserId(waifuId); var ownerUser = uow.DiscordUsers.GetOrCreate(owner); // owner has to be the owner of the waifu - if (waifu.ClaimerId != ownerUser.Id) + if (waifu == null || waifu.ClaimerId != ownerUser.Id) return false; if (!await _cs.RemoveAsync(owner.Id, diff --git a/NadekoBot.Core/Modules/Gambling/WaifuClaimCommands.cs b/NadekoBot.Core/Modules/Gambling/WaifuClaimCommands.cs index f33ac99e..ef59635e 100644 --- a/NadekoBot.Core/Modules/Gambling/WaifuClaimCommands.cs +++ b/NadekoBot.Core/Modules/Gambling/WaifuClaimCommands.cs @@ -199,7 +199,10 @@ namespace NadekoBot.Modules.Gambling return; } - await ReplyConfirmLocalized("waifu_transfer_success").ConfigureAwait(false); + await ReplyConfirmLocalized("waifu_transfer_success", + Format.Bold(waifu.ToString()), + Format.Bold(Context.User.ToString()), + Format.Bold(newOwner.ToString())).ConfigureAwait(false); } public enum DivorceResult diff --git a/src/NadekoBot/_strings/ResponseStrings.en-US.json b/src/NadekoBot/_strings/ResponseStrings.en-US.json index 02e9270c..c1740228 100644 --- a/src/NadekoBot/_strings/ResponseStrings.en-US.json +++ b/src/NadekoBot/_strings/ResponseStrings.en-US.json @@ -311,6 +311,8 @@ "gambling_waifu_not_yours": "That waifu is not yours.", "gambling_waifu_not_yourself": "You can't claim yourself.", "gambling_waifu_recent_divorce": "You divorced recently. You must wait {0} hours and {1} minutes to divorce again.", + "gambling_waifu_transfer_fail": "You're either not the owner of that waifu, or you can't afford it. Alternatively your input is invalid.", + "gambling_waifu_transfer_success": "Claim on {0} has been transfered from {1} to {2}", "gambling_nobody": "Nobody", "gambling_waifu_divorced_notlike": "You have divorced a waifu who doesn't like you. You received {0} back.", "games_8ball": "8ball",