Merge branch 'dev' of https://github.com/Kwoth/NadekoBot into dev
This commit is contained in:
commit
b6bca56f0a
@ -815,7 +815,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
});
|
});
|
||||||
|
|
||||||
cgb.CreateCommand(Prefix + "donators")
|
cgb.CreateCommand(Prefix + "donators")
|
||||||
.Description("List of lovely people who donated to keep this project alive.")
|
.Description("List of lovely people who donated to keep this project alive. | `{Prefix}donators`")
|
||||||
.Do(async e =>
|
.Do(async e =>
|
||||||
{
|
{
|
||||||
await Task.Run(async () =>
|
await Task.Run(async () =>
|
||||||
|
@ -112,7 +112,7 @@ namespace NadekoBot.Modules.Administration.Commands
|
|||||||
cgb.CreateCommand(Module.Prefix + "iam")
|
cgb.CreateCommand(Module.Prefix + "iam")
|
||||||
.Description("Adds a role to you that you choose. " +
|
.Description("Adds a role to you that you choose. " +
|
||||||
"Role must be on a list of self-assignable roles." +
|
"Role must be on a list of self-assignable roles." +
|
||||||
$" | {Prefix}iam Gamer")
|
$" | `{Prefix}iam Gamer`")
|
||||||
.Parameter("role", ParameterType.Unparsed)
|
.Parameter("role", ParameterType.Unparsed)
|
||||||
.Do(async e =>
|
.Do(async e =>
|
||||||
{
|
{
|
||||||
@ -168,7 +168,7 @@ namespace NadekoBot.Modules.Administration.Commands
|
|||||||
.Alias(Module.Prefix + "iamn")
|
.Alias(Module.Prefix + "iamn")
|
||||||
.Description("Removes a role to you that you choose. " +
|
.Description("Removes a role to you that you choose. " +
|
||||||
"Role must be on a list of self-assignable roles." +
|
"Role must be on a list of self-assignable roles." +
|
||||||
$" | {Prefix}iamn Gamer")
|
$" | `{Prefix}iamn Gamer`")
|
||||||
.Parameter("role", ParameterType.Unparsed)
|
.Parameter("role", ParameterType.Unparsed)
|
||||||
.Do(async e =>
|
.Do(async e =>
|
||||||
{
|
{
|
||||||
|
@ -148,7 +148,7 @@ namespace NadekoBot.Modules.ClashOfClans
|
|||||||
|
|
||||||
cgb.CreateCommand(Prefix + "createwar")
|
cgb.CreateCommand(Prefix + "createwar")
|
||||||
.Alias(Prefix + "cw")
|
.Alias(Prefix + "cw")
|
||||||
.Description($"Creates a new war by specifying a size (>10 and multiple of 5) and enemy clan name. |{Prefix}cw 15 The Enemy Clan")
|
.Description($"Creates a new war by specifying a size (>10 and multiple of 5) and enemy clan name. | `{Prefix}cw 15 The Enemy Clan`")
|
||||||
.Parameter("size")
|
.Parameter("size")
|
||||||
.Parameter("enemy_clan", ParameterType.Unparsed)
|
.Parameter("enemy_clan", ParameterType.Unparsed)
|
||||||
.Do(async e =>
|
.Do(async e =>
|
||||||
@ -186,7 +186,7 @@ namespace NadekoBot.Modules.ClashOfClans
|
|||||||
|
|
||||||
cgb.CreateCommand(Prefix + "startwar")
|
cgb.CreateCommand(Prefix + "startwar")
|
||||||
.Alias(Prefix + "sw")
|
.Alias(Prefix + "sw")
|
||||||
.Description("Starts a war with a given number.")
|
.Description("Starts a war with a given number. | `{Prefix}sw 15`")
|
||||||
.Parameter("number", ParameterType.Required)
|
.Parameter("number", ParameterType.Required)
|
||||||
.Do(async e =>
|
.Do(async e =>
|
||||||
{
|
{
|
||||||
@ -211,7 +211,7 @@ namespace NadekoBot.Modules.ClashOfClans
|
|||||||
|
|
||||||
cgb.CreateCommand(Prefix + "listwar")
|
cgb.CreateCommand(Prefix + "listwar")
|
||||||
.Alias(Prefix + "lw")
|
.Alias(Prefix + "lw")
|
||||||
.Description($"Shows the active war claims by a number. Shows all wars in a short way if no number is specified. | {Prefix}lw [war_number] or {Prefix}lw")
|
.Description($"Shows the active war claims by a number. Shows all wars in a short way if no number is specified. | `{Prefix}lw [war_number] or {Prefix}lw`")
|
||||||
.Parameter("number", ParameterType.Optional)
|
.Parameter("number", ParameterType.Optional)
|
||||||
.Do(async e =>
|
.Do(async e =>
|
||||||
{
|
{
|
||||||
@ -253,7 +253,7 @@ namespace NadekoBot.Modules.ClashOfClans
|
|||||||
cgb.CreateCommand(Prefix + "claim")
|
cgb.CreateCommand(Prefix + "claim")
|
||||||
.Alias(Prefix + "call")
|
.Alias(Prefix + "call")
|
||||||
.Alias(Prefix + "c")
|
.Alias(Prefix + "c")
|
||||||
.Description($"Claims a certain base from a certain war. You can supply a name in the third optional argument to claim in someone else's place. | {Prefix}call [war_number] [base_number] [optional_other_name]")
|
.Description($"Claims a certain base from a certain war. You can supply a name in the third optional argument to claim in someone else's place. | `{Prefix}call [war_number] [base_number] [optional_other_name]`")
|
||||||
.Parameter("number")
|
.Parameter("number")
|
||||||
.Parameter("baseNumber")
|
.Parameter("baseNumber")
|
||||||
.Parameter("other_name", ParameterType.Unparsed)
|
.Parameter("other_name", ParameterType.Unparsed)
|
||||||
@ -292,21 +292,21 @@ namespace NadekoBot.Modules.ClashOfClans
|
|||||||
.Alias(Prefix + "cf")
|
.Alias(Prefix + "cf")
|
||||||
.Alias(Prefix + "cf3")
|
.Alias(Prefix + "cf3")
|
||||||
.Alias(Prefix + "claimfinish3")
|
.Alias(Prefix + "claimfinish3")
|
||||||
.Description($"Finish your claim with 3 stars if you destroyed a base. Optional second argument finishes for someone else. | {Prefix}cf [war_number] [optional_other_name]")
|
.Description($"Finish your claim with 3 stars if you destroyed a base. Optional second argument finishes for someone else. | `{Prefix}cf [war_number] [optional_other_name]`")
|
||||||
.Parameter("number", ParameterType.Required)
|
.Parameter("number", ParameterType.Required)
|
||||||
.Parameter("other_name", ParameterType.Unparsed)
|
.Parameter("other_name", ParameterType.Unparsed)
|
||||||
.Do(e => FinishClaim(e));
|
.Do(e => FinishClaim(e));
|
||||||
|
|
||||||
cgb.CreateCommand(Prefix + "claimfinish2")
|
cgb.CreateCommand(Prefix + "claimfinish2")
|
||||||
.Alias(Prefix + "cf2")
|
.Alias(Prefix + "cf2")
|
||||||
.Description($"Finish your claim with 2 stars if you destroyed a base. Optional second argument finishes for someone else. | {Prefix}cf [war_number] [optional_other_name]")
|
.Description($"Finish your claim with 2 stars if you destroyed a base. Optional second argument finishes for someone else. | `{Prefix}cf [war_number] [optional_other_name]`")
|
||||||
.Parameter("number", ParameterType.Required)
|
.Parameter("number", ParameterType.Required)
|
||||||
.Parameter("other_name", ParameterType.Unparsed)
|
.Parameter("other_name", ParameterType.Unparsed)
|
||||||
.Do(e => FinishClaim(e, 2));
|
.Do(e => FinishClaim(e, 2));
|
||||||
|
|
||||||
cgb.CreateCommand(Prefix + "claimfinish1")
|
cgb.CreateCommand(Prefix + "claimfinish1")
|
||||||
.Alias(Prefix + "cf1")
|
.Alias(Prefix + "cf1")
|
||||||
.Description($"Finish your claim with 1 stars if you destroyed a base. Optional second argument finishes for someone else. | {Prefix}cf [war_number] [optional_other_name]")
|
.Description($"Finish your claim with 1 stars if you destroyed a base. Optional second argument finishes for someone else. | `{Prefix}cf [war_number] [optional_other_name]`")
|
||||||
.Parameter("number", ParameterType.Required)
|
.Parameter("number", ParameterType.Required)
|
||||||
.Parameter("other_name", ParameterType.Unparsed)
|
.Parameter("other_name", ParameterType.Unparsed)
|
||||||
.Do(e => FinishClaim(e, 1));
|
.Do(e => FinishClaim(e, 1));
|
||||||
@ -314,7 +314,7 @@ namespace NadekoBot.Modules.ClashOfClans
|
|||||||
cgb.CreateCommand(Prefix + "unclaim")
|
cgb.CreateCommand(Prefix + "unclaim")
|
||||||
.Alias(Prefix + "uncall")
|
.Alias(Prefix + "uncall")
|
||||||
.Alias(Prefix + "uc")
|
.Alias(Prefix + "uc")
|
||||||
.Description($"Removes your claim from a certain war. Optional second argument denotes a person in whose place to unclaim | {Prefix}uc [war_number] [optional_other_name]")
|
.Description($"Removes your claim from a certain war. Optional second argument denotes a person in whose place to unclaim | `{Prefix}uc [war_number] [optional_other_name]`")
|
||||||
.Parameter("number", ParameterType.Required)
|
.Parameter("number", ParameterType.Required)
|
||||||
.Parameter("other_name", ParameterType.Unparsed)
|
.Parameter("other_name", ParameterType.Unparsed)
|
||||||
.Do(async e =>
|
.Do(async e =>
|
||||||
@ -344,7 +344,7 @@ namespace NadekoBot.Modules.ClashOfClans
|
|||||||
|
|
||||||
cgb.CreateCommand(Prefix + "endwar")
|
cgb.CreateCommand(Prefix + "endwar")
|
||||||
.Alias(Prefix + "ew")
|
.Alias(Prefix + "ew")
|
||||||
.Description($"Ends the war with a given index. |{Prefix}ew [war_number]")
|
.Description($"Ends the war with a given index. | `{Prefix}ew [war_number]`")
|
||||||
.Parameter("number")
|
.Parameter("number")
|
||||||
.Do(async e =>
|
.Do(async e =>
|
||||||
{
|
{
|
||||||
|
@ -23,7 +23,7 @@ namespace NadekoBot.Modules.Conversations.Commands
|
|||||||
internal override void Init(CommandGroupBuilder cgb)
|
internal override void Init(CommandGroupBuilder cgb)
|
||||||
{
|
{
|
||||||
cgb.CreateCommand("rip")
|
cgb.CreateCommand("rip")
|
||||||
.Description("Shows a grave image of someone with a start year | @NadekoBot rip @Someone 2000")
|
.Description("Shows a grave image of someone with a start year | `@NadekoBot rip @Someone 2000`")
|
||||||
.Parameter("user", ParameterType.Required)
|
.Parameter("user", ParameterType.Required)
|
||||||
.Parameter("year", ParameterType.Optional)
|
.Parameter("year", ParameterType.Optional)
|
||||||
.Do(async e =>
|
.Do(async e =>
|
||||||
|
@ -50,7 +50,7 @@ namespace NadekoBot.Modules.CustomReactions
|
|||||||
var c = cgb.CreateCommand(commandName);
|
var c = cgb.CreateCommand(commandName);
|
||||||
if (commandName.Contains(NadekoBot.BotMention))
|
if (commandName.Contains(NadekoBot.BotMention))
|
||||||
c.Alias(commandName.Replace("<@", "<@!"));
|
c.Alias(commandName.Replace("<@", "<@!"));
|
||||||
c.Description($"Custom reaction. |{command.Key}")
|
c.Description($"Custom reaction. | `{command.Key}`")
|
||||||
.Parameter("args", ParameterType.Unparsed)
|
.Parameter("args", ParameterType.Unparsed)
|
||||||
.Do(async e =>
|
.Do(async e =>
|
||||||
{
|
{
|
||||||
|
@ -187,7 +187,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
|
|
||||||
cgb.CreateCommand(Prefix + "leaderboard")
|
cgb.CreateCommand(Prefix + "leaderboard")
|
||||||
.Alias(Prefix + "lb")
|
.Alias(Prefix + "lb")
|
||||||
.Description($"Displays bot currency leaderboard | {Prefix}lb")
|
.Description($"Displays bot currency leaderboard | `{Prefix}lb`")
|
||||||
.Do(async e =>
|
.Do(async e =>
|
||||||
{
|
{
|
||||||
var richestTemp = DbHandler.Instance.GetTopRichest();
|
var richestTemp = DbHandler.Instance.GetTopRichest();
|
||||||
|
@ -756,7 +756,7 @@ namespace NadekoBot.Modules.Music
|
|||||||
|
|
||||||
cgb.CreateCommand(Prefix + "getlink")
|
cgb.CreateCommand(Prefix + "getlink")
|
||||||
.Alias(Prefix + "gl")
|
.Alias(Prefix + "gl")
|
||||||
.Description("Shows a link to the song in the queue by index, or the currently playing song by default.")
|
.Description("Shows a link to the song in the queue by index, or the currently playing song by default. | `{Prefix}gl`")
|
||||||
.Parameter("index", ParameterType.Optional)
|
.Parameter("index", ParameterType.Optional)
|
||||||
.Do(async e =>
|
.Do(async e =>
|
||||||
{
|
{
|
||||||
@ -791,7 +791,7 @@ namespace NadekoBot.Modules.Music
|
|||||||
|
|
||||||
cgb.CreateCommand(Prefix + "autoplay")
|
cgb.CreateCommand(Prefix + "autoplay")
|
||||||
.Alias(Prefix + "ap")
|
.Alias(Prefix + "ap")
|
||||||
.Description("Toggles autoplay - When the song is finished, automatically queue a related youtube song. (Works only for youtube songs and when queue is empty)")
|
.Description("Toggles autoplay - When the song is finished, automatically queue a related youtube song. (Works only for youtube songs and when queue is empty) | `{Prefix}ap`")
|
||||||
.Do(async e =>
|
.Do(async e =>
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ namespace NadekoBot.Modules.Permissions.Commands
|
|||||||
.Alias(Module.Prefix + "cfi")
|
.Alias(Module.Prefix + "cfi")
|
||||||
.Description("Enables or disables automatic deleting of invites on the channel." +
|
.Description("Enables or disables automatic deleting of invites on the channel." +
|
||||||
"If no channel supplied, it will default to current one. Use ALL to apply to all existing channels at once." +
|
"If no channel supplied, it will default to current one. Use ALL to apply to all existing channels at once." +
|
||||||
$" | {Prefix}cfi enable #general-chat")
|
$" | `{Prefix}cfi enable #general-chat`")
|
||||||
.Parameter("bool")
|
.Parameter("bool")
|
||||||
.Parameter("channel", ParameterType.Optional)
|
.Parameter("channel", ParameterType.Optional)
|
||||||
.Do(async e =>
|
.Do(async e =>
|
||||||
@ -95,7 +95,7 @@ namespace NadekoBot.Modules.Permissions.Commands
|
|||||||
|
|
||||||
cgb.CreateCommand(Module.Prefix + "srvrfilterinv")
|
cgb.CreateCommand(Module.Prefix + "srvrfilterinv")
|
||||||
.Alias(Module.Prefix + "sfi")
|
.Alias(Module.Prefix + "sfi")
|
||||||
.Description($"Enables or disables automatic deleting of invites on the server. | {Prefix}sfi disable")
|
.Description($"Enables or disables automatic deleting of invites on the server. | `{Prefix}sfi disable`")
|
||||||
.Parameter("bool")
|
.Parameter("bool")
|
||||||
.Do(async e =>
|
.Do(async e =>
|
||||||
{
|
{
|
||||||
|
@ -53,7 +53,7 @@ namespace NadekoBot.Modules.Permissions.Commands
|
|||||||
.Alias(Module.Prefix + "cfw")
|
.Alias(Module.Prefix + "cfw")
|
||||||
.Description("Enables or disables automatic deleting of messages containing banned words on the channel." +
|
.Description("Enables or disables automatic deleting of messages containing banned words on the channel." +
|
||||||
"If no channel supplied, it will default to current one. Use ALL to apply to all existing channels at once." +
|
"If no channel supplied, it will default to current one. Use ALL to apply to all existing channels at once." +
|
||||||
$" | {Prefix}cfw enable #general-chat")
|
$" | `{Prefix}cfw enable #general-chat`")
|
||||||
.Parameter("bool")
|
.Parameter("bool")
|
||||||
.Parameter("channel", ParameterType.Optional)
|
.Parameter("channel", ParameterType.Optional)
|
||||||
.Do(async e =>
|
.Do(async e =>
|
||||||
@ -89,7 +89,7 @@ namespace NadekoBot.Modules.Permissions.Commands
|
|||||||
cgb.CreateCommand(Module.Prefix + "addfilterword")
|
cgb.CreateCommand(Module.Prefix + "addfilterword")
|
||||||
.Alias(Module.Prefix + "afw")
|
.Alias(Module.Prefix + "afw")
|
||||||
.Description("Adds a new word to the list of filtered words" +
|
.Description("Adds a new word to the list of filtered words" +
|
||||||
$" | {Prefix}afw poop")
|
$" | `{Prefix}afw poop`")
|
||||||
.Parameter("word", ParameterType.Unparsed)
|
.Parameter("word", ParameterType.Unparsed)
|
||||||
.Do(async e =>
|
.Do(async e =>
|
||||||
{
|
{
|
||||||
@ -111,7 +111,7 @@ namespace NadekoBot.Modules.Permissions.Commands
|
|||||||
cgb.CreateCommand(Module.Prefix + "rmvfilterword")
|
cgb.CreateCommand(Module.Prefix + "rmvfilterword")
|
||||||
.Alias(Module.Prefix + "rfw")
|
.Alias(Module.Prefix + "rfw")
|
||||||
.Description("Removes the word from the list of filtered words" +
|
.Description("Removes the word from the list of filtered words" +
|
||||||
$" | {Prefix}rw poop")
|
$" | `{Prefix}rw poop`")
|
||||||
.Parameter("word", ParameterType.Unparsed)
|
.Parameter("word", ParameterType.Unparsed)
|
||||||
.Do(async e =>
|
.Do(async e =>
|
||||||
{
|
{
|
||||||
@ -133,7 +133,7 @@ namespace NadekoBot.Modules.Permissions.Commands
|
|||||||
cgb.CreateCommand(Module.Prefix + "lstfilterwords")
|
cgb.CreateCommand(Module.Prefix + "lstfilterwords")
|
||||||
.Alias(Module.Prefix + "lfw")
|
.Alias(Module.Prefix + "lfw")
|
||||||
.Description("Shows a list of filtered words" +
|
.Description("Shows a list of filtered words" +
|
||||||
$" | {Prefix}lfw")
|
$" | `{Prefix}lfw`")
|
||||||
.Do(async e =>
|
.Do(async e =>
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -152,7 +152,7 @@ namespace NadekoBot.Modules.Permissions.Commands
|
|||||||
|
|
||||||
cgb.CreateCommand(Module.Prefix + "srvrfilterwords")
|
cgb.CreateCommand(Module.Prefix + "srvrfilterwords")
|
||||||
.Alias(Module.Prefix + "sfw")
|
.Alias(Module.Prefix + "sfw")
|
||||||
.Description($"Enables or disables automatic deleting of messages containing forbidden words on the server. | {Prefix}sfw disable")
|
.Description($"Enables or disables automatic deleting of messages containing forbidden words on the server. | `{Prefix}sfw disable`")
|
||||||
.Parameter("bool")
|
.Parameter("bool")
|
||||||
.Do(async e =>
|
.Do(async e =>
|
||||||
{
|
{
|
||||||
|
@ -813,7 +813,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
|
|
||||||
cgb.CreateCommand(Prefix + "allcmdcooldowns")
|
cgb.CreateCommand(Prefix + "allcmdcooldowns")
|
||||||
.Alias(Prefix + "acmdcds")
|
.Alias(Prefix + "acmdcds")
|
||||||
.Description("Shows a list of all commands and their respective cooldowns.")
|
.Description("Shows a list of all commands and their respective cooldowns. | `{Prefix}acmdcds`")
|
||||||
.Do(async e =>
|
.Do(async e =>
|
||||||
{
|
{
|
||||||
ServerPermissions perms;
|
ServerPermissions perms;
|
||||||
|
@ -149,7 +149,7 @@ $@"🌍 **Weather for** 【{obj["target"]}】
|
|||||||
|
|
||||||
cgb.CreateCommand(Prefix + "randomcat")
|
cgb.CreateCommand(Prefix + "randomcat")
|
||||||
.Alias(Prefix + "meow")
|
.Alias(Prefix + "meow")
|
||||||
.Description("Shows a random cat image.")
|
.Description("Shows a random cat image. | `{Prefix}meow`")
|
||||||
.Do(async e =>
|
.Do(async e =>
|
||||||
{
|
{
|
||||||
await e.Channel.SendMessage(JObject.Parse(
|
await e.Channel.SendMessage(JObject.Parse(
|
||||||
@ -159,7 +159,7 @@ $@"🌍 **Weather for** 【{obj["target"]}】
|
|||||||
|
|
||||||
cgb.CreateCommand(Prefix + "randomdog")
|
cgb.CreateCommand(Prefix + "randomdog")
|
||||||
.Alias(Prefix + "woof")
|
.Alias(Prefix + "woof")
|
||||||
.Description("Shows a random dog image.")
|
.Description("Shows a random dog image. | `{Prefix}woof`")
|
||||||
.Do(async e =>
|
.Do(async e =>
|
||||||
{
|
{
|
||||||
await e.Channel.SendMessage("http://random.dog/" + await SearchHelper.GetResponseStringAsync("http://random.dog/woof").ConfigureAwait(false)).ConfigureAwait(false);
|
await e.Channel.SendMessage("http://random.dog/" + await SearchHelper.GetResponseStringAsync("http://random.dog/woof").ConfigureAwait(false)).ConfigureAwait(false);
|
||||||
|
@ -106,7 +106,7 @@ namespace NadekoBot.Modules.Trello
|
|||||||
|
|
||||||
cgb.CreateCommand(Prefix + "lists")
|
cgb.CreateCommand(Prefix + "lists")
|
||||||
.Alias(Prefix + "list")
|
.Alias(Prefix + "list")
|
||||||
.Description($"Lists all lists yo ;) | {Prefix}list")
|
.Description($"Lists all lists, yo ;) | `{Prefix}list`")
|
||||||
.Do(async e =>
|
.Do(async e =>
|
||||||
{
|
{
|
||||||
if (!NadekoBot.IsOwner(e.User.Id)) return;
|
if (!NadekoBot.IsOwner(e.User.Id)) return;
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
![img](https://ci.appveyor.com/api/projects/status/gmu6b3ltc80hr3k9?svg=true)
|
![img](https://ci.appveyor.com/api/projects/status/gmu6b3ltc80hr3k9?svg=true)
|
||||||
[![Discord](https://discordapp.com/api/servers/117523346618318850/widget.png)](https://discord.gg/0ehQwTK2RBjAxzEY)
|
[![Discord](https://discordapp.com/api/servers/117523346618318850/widget.png)](https://discord.gg/0ehQwTK2RBjAxzEY)
|
||||||
|
[![Documentation Status](https://readthedocs.org/projects/nadekobot/badge/?version=latest)](http://nadekobot.readthedocs.io/en/latest/?badge=latest)
|
||||||
# NadekoBot
|
# NadekoBot
|
||||||
|
|
||||||
## [Click here to invite nadeko to your discord server](https://discordapp.com/oauth2/authorize?client_id=170254782546575360&scope=bot&permissions=66186303)
|
## [Click here to invite Nadeko to your Discord server](https://discordapp.com/oauth2/authorize?client_id=170254782546575360&scope=bot&permissions=66186303)
|
||||||
## [Click here for a list of commands](https://github.com/Kwoth/NadekoBot/blob/master/commandlist.md)
|
## [Click here for a list of commands](https://github.com/Kwoth/NadekoBot/blob/master/commandlist.md)
|
||||||
## INSTRUCTIONS, FAQ ---> [Wiki](https://github.com/Kwoth/NadekoBot/wiki)
|
## INSTRUCTIONS, FAQ ---> [Wiki](https://github.com/Kwoth/NadekoBot/wiki)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user