Merge remote-tracking branch 'origin/greg-dev' into hax-dev
This commit is contained in:
commit
4c926f8610
29 changed files with 200 additions and 73 deletions
|
|
@ -15,6 +15,7 @@ Hadder Discord is a multi-purpose Discord bot with 100% uptime.
|
||||||
[](https://top.gg/bot/637002314162372639)
|
[](https://top.gg/bot/637002314162372639)
|
||||||
[](https://botlist.space/bot/637002314162372639?utm_source=bls&utm_medium=widget&utm_campaign=637002314162372639)
|
[](https://botlist.space/bot/637002314162372639?utm_source=bls&utm_medium=widget&utm_campaign=637002314162372639)
|
||||||
[](https://discordbotlist.com/bots/637002314162372639)
|
[](https://discordbotlist.com/bots/637002314162372639)
|
||||||
|
[](https://arcane-botcenter.xyz/bot/637002314162372639)
|
||||||
|
|
||||||
## Hadder Team
|
## Hadder Team
|
||||||
### Developer
|
### Developer
|
||||||
|
|
|
||||||
14
pom.xml
14
pom.xml
|
|
@ -5,7 +5,7 @@
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>Hadder</groupId>
|
<groupId>Hadder</groupId>
|
||||||
<artifactId>Hadder</artifactId>
|
<artifactId>Hadder</artifactId>
|
||||||
<version>1.1.3</version>
|
<version>1.3.3</version>
|
||||||
<name>Hadder</name>
|
<name>Hadder</name>
|
||||||
<inceptionYear>2019</inceptionYear>
|
<inceptionYear>2019</inceptionYear>
|
||||||
<description>Hadder is a multi-purpose Discord bot.</description>
|
<description>Hadder is a multi-purpose Discord bot.</description>
|
||||||
|
|
@ -66,7 +66,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.dv8tion</groupId>
|
<groupId>net.dv8tion</groupId>
|
||||||
<artifactId>JDA</artifactId>
|
<artifactId>JDA</artifactId>
|
||||||
<version>4.1.1_113</version>
|
<version>4.1.1_149</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.json</groupId>
|
<groupId>org.json</groupId>
|
||||||
|
|
@ -76,7 +76,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.rethinkdb</groupId>
|
<groupId>com.rethinkdb</groupId>
|
||||||
<artifactId>rethinkdb-driver</artifactId>
|
<artifactId>rethinkdb-driver</artifactId>
|
||||||
<version>2.4.0</version>
|
<version>2.4.2</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.slf4j</groupId>
|
<groupId>org.slf4j</groupId>
|
||||||
|
|
@ -86,22 +86,22 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>club.minnced</groupId>
|
<groupId>club.minnced</groupId>
|
||||||
<artifactId>discord-webhooks</artifactId>
|
<artifactId>discord-webhooks</artifactId>
|
||||||
<version>0.2.0</version>
|
<version>0.3.1</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.kohsuke</groupId>
|
<groupId>org.kohsuke</groupId>
|
||||||
<artifactId>github-api</artifactId>
|
<artifactId>github-api</artifactId>
|
||||||
<version>1.108</version>
|
<version>1.111</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.sedmelluq</groupId>
|
<groupId>com.sedmelluq</groupId>
|
||||||
<artifactId>lavaplayer</artifactId>
|
<artifactId>lavaplayer</artifactId>
|
||||||
<version>1.3.34</version>
|
<version>1.3.48</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-annotations</artifactId>
|
<artifactId>jackson-annotations</artifactId>
|
||||||
<version>2.10.3</version>
|
<version>2.11.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,7 @@ import com.bbn.hadder.core.*;
|
||||||
import com.bbn.hadder.listener.*;
|
import com.bbn.hadder.listener.*;
|
||||||
import net.dv8tion.jda.api.OnlineStatus;
|
import net.dv8tion.jda.api.OnlineStatus;
|
||||||
import net.dv8tion.jda.api.entities.Activity;
|
import net.dv8tion.jda.api.entities.Activity;
|
||||||
|
import net.dv8tion.jda.api.requests.GatewayIntent;
|
||||||
import net.dv8tion.jda.api.sharding.DefaultShardManagerBuilder;
|
import net.dv8tion.jda.api.sharding.DefaultShardManagerBuilder;
|
||||||
import net.dv8tion.jda.api.sharding.ShardManager;
|
import net.dv8tion.jda.api.sharding.ShardManager;
|
||||||
import net.dv8tion.jda.api.utils.ChunkingFilter;
|
import net.dv8tion.jda.api.utils.ChunkingFilter;
|
||||||
|
|
@ -51,11 +52,11 @@ public class Hadder {
|
||||||
Rethink rethink = new Rethink(config);
|
Rethink rethink = new Rethink(config);
|
||||||
rethink.connect();
|
rethink.connect();
|
||||||
|
|
||||||
DefaultShardManagerBuilder builder = new DefaultShardManagerBuilder();
|
DefaultShardManagerBuilder builder = DefaultShardManagerBuilder.create(GatewayIntent.getIntents(GatewayIntent.ALL_INTENTS));
|
||||||
|
|
||||||
builder.setAutoReconnect(true);
|
builder.setAutoReconnect(true);
|
||||||
builder.setShardsTotal(1);
|
builder.setShardsTotal(1);
|
||||||
builder.setChunkingFilter(ChunkingFilter.ALL);
|
builder.setChunkingFilter(ChunkingFilter.NONE);
|
||||||
builder.setBulkDeleteSplittingEnabled(true);
|
builder.setBulkDeleteSplittingEnabled(true);
|
||||||
builder.setActivity(Activity.listening("to h.help"));
|
builder.setActivity(Activity.listening("to h.help"));
|
||||||
builder.setStatus(OnlineStatus.DO_NOT_DISTURB);
|
builder.setStatus(OnlineStatus.DO_NOT_DISTURB);
|
||||||
|
|
@ -127,7 +128,8 @@ public class Hadder {
|
||||||
new ServerStatsCommand(),
|
new ServerStatsCommand(),
|
||||||
new ProfileCommand(),
|
new ProfileCommand(),
|
||||||
new CodeCommand(),
|
new CodeCommand(),
|
||||||
new MoveAllCommand()), config, helpCommand);
|
new MoveAllCommand(),
|
||||||
|
new CoronaCommand()), config, helpCommand);
|
||||||
|
|
||||||
builder.addEventListeners(
|
builder.addEventListeners(
|
||||||
new MentionListener(rethink),
|
new MentionListener(rethink),
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ import com.rethinkdb.gen.exc.ReqlNonExistenceError;
|
||||||
import com.rethinkdb.gen.exc.ReqlOpFailedError;
|
import com.rethinkdb.gen.exc.ReqlOpFailedError;
|
||||||
import com.rethinkdb.net.Connection;
|
import com.rethinkdb.net.Connection;
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
|
|
@ -72,13 +73,18 @@ public class Rethink {
|
||||||
else return null;
|
else return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object getByID(String table, String wherevalue, String column) {
|
public Object getByID(String table, String where, String column) {
|
||||||
return r.table(table).get(wherevalue).getField(column).run(conn);
|
return r.table(table).get(where).getField(column).run(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
public JSONObject getObjectByID(String table, String id) {
|
public JSONObject getObjectByID(String table, String id) {
|
||||||
String response = r.table(table).get(id).toJson().run(conn);
|
String response = r.table(table).get(id).toJson().run(conn);
|
||||||
return new JSONObject(response);
|
try {
|
||||||
|
return new JSONObject(response);
|
||||||
|
} catch (JSONException e) {
|
||||||
|
System.out.println(response);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void insert(String table, Object object) {
|
public void insert(String table, Object object) {
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ public class CodeCommand implements Command {
|
||||||
public void executed(String[] args, CommandEvent e) {
|
public void executed(String[] args, CommandEvent e) {
|
||||||
if (args.length > 0) {
|
if (args.length > 0) {
|
||||||
OkHttpClient client = new OkHttpClient();
|
OkHttpClient client = new OkHttpClient();
|
||||||
Request request = new Request.Builder().url("https://canary.discordapp.com/api/v6/invite/" + args[0]).addHeader("Authorization", "Bot " + e.getConfig().getBotToken()).build();
|
Request request = new Request.Builder().url("https://canary.discordapp.com/api/v6/invite/" + args[0] + "?with_counts=true").addHeader("Authorization", "Bot " + e.getConfig().getBotToken()).build();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Response response = client.newCall(request).execute();
|
Response response = client.newCall(request).execute();
|
||||||
|
|
@ -45,6 +45,9 @@ public class CodeCommand implements Command {
|
||||||
.addField("Verification Level", String.valueOf(json.getJSONObject("guild").getInt("verification_level")), true)
|
.addField("Verification Level", String.valueOf(json.getJSONObject("guild").getInt("verification_level")), true)
|
||||||
.addField("Guild ID", json.getJSONObject("guild").getString("id"), true)
|
.addField("Guild ID", json.getJSONObject("guild").getString("id"), true)
|
||||||
.addBlankField(true)
|
.addBlankField(true)
|
||||||
|
.addField("Members", String.valueOf(json.get("approximate_member_count")), true)
|
||||||
|
.addBlankField(true)
|
||||||
|
.addBlankField(true)
|
||||||
.setThumbnail("https://cdn.discordapp.com/icons/" + json.getJSONObject("guild").getString("id") + "/" + json.getJSONObject("guild").getString("icon") + ".png")
|
.setThumbnail("https://cdn.discordapp.com/icons/" + json.getJSONObject("guild").getString("id") + "/" + json.getJSONObject("guild").getString("icon") + ".png")
|
||||||
.build()).queue();
|
.build()).queue();
|
||||||
} catch (JSONException ex) {
|
} catch (JSONException ex) {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,76 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 GregTCLTK and Schlauer-Hax
|
||||||
|
*
|
||||||
|
* Licensed under the GNU Affero General Public License, Version 3.0;
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* https://www.gnu.org/licenses/agpl-3.0.en.html
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.bbn.hadder.commands.misc;
|
||||||
|
|
||||||
|
import com.bbn.hadder.commands.Command;
|
||||||
|
import com.bbn.hadder.commands.CommandEvent;
|
||||||
|
import com.bbn.hadder.utils.MessageEditor;
|
||||||
|
import okhttp3.OkHttpClient;
|
||||||
|
import okhttp3.Request;
|
||||||
|
import okhttp3.Response;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
public class CoronaCommand implements Command {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void executed(String[] args, CommandEvent e) {
|
||||||
|
OkHttpClient client = new OkHttpClient();
|
||||||
|
Request request = new Request.Builder().url("https://corona.lmao.ninja/v2/all").build();
|
||||||
|
|
||||||
|
try {
|
||||||
|
Response response = client.newCall(request).execute();
|
||||||
|
JSONObject json = new JSONObject(response.body().string());
|
||||||
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
|
stringBuilder
|
||||||
|
.append("`Confirmed cases:` **").append(json.get("cases")).append("**\n")
|
||||||
|
.append("`Deaths:` **").append(json.get("deaths")).append("** \n")
|
||||||
|
.append("`Recovered:` **").append(json.get("recovered")).append("** \n")
|
||||||
|
.append("`Active cases:` **").append(json.get("active")).append("**");
|
||||||
|
e.getTextChannel().sendMessage(e.getMessageEditor()
|
||||||
|
.getMessage(MessageEditor.MessageType.INFO)
|
||||||
|
.setDescription(stringBuilder)
|
||||||
|
.build()).queue();
|
||||||
|
} catch (IOException ex) {
|
||||||
|
e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.ERROR)
|
||||||
|
.setTitle("API Error")
|
||||||
|
.setDescription("Try again later!")
|
||||||
|
.build()).queue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] labels() {
|
||||||
|
return new String[]{"corona"};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String description() {
|
||||||
|
return "commands.misc.corona.help.description";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String usage() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String example() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,52 +1,76 @@
|
||||||
/*
|
/*
|
||||||
* @author Hax / Hax6775 / Schlauer_Hax
|
* Copyright 2019-2020 GregTCLTK and Schlauer-Hax
|
||||||
|
*
|
||||||
|
* Licensed under the GNU Affero General Public License, Version 3.0;
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* https://www.gnu.org/licenses/agpl-3.0.en.html
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.bbn.hadder.commands.misc;
|
package com.bbn.hadder.commands.misc;
|
||||||
|
|
||||||
import com.bbn.hadder.commands.Command;
|
import com.bbn.hadder.commands.Command;
|
||||||
import com.bbn.hadder.commands.CommandEvent;
|
import com.bbn.hadder.commands.CommandEvent;
|
||||||
import com.bbn.hadder.core.Perm;
|
import com.bbn.hadder.core.Perm;
|
||||||
import com.bbn.hadder.core.Perms;
|
import com.bbn.hadder.core.Perms;
|
||||||
import net.dv8tion.jda.api.EmbedBuilder;
|
import com.bbn.hadder.utils.MessageEditor;
|
||||||
import net.dv8tion.jda.api.Permission;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import net.dv8tion.jda.api.entities.Member;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
|
@Perms(Perm.VOICE_MOVE_OTHERS)
|
||||||
public class MoveAllCommand implements Command {
|
public class MoveAllCommand implements Command {
|
||||||
|
|
||||||
@Perms(Perm.VOICE_MOVE_OTHERS)
|
|
||||||
@Override
|
@Override
|
||||||
public void executed(String[] args, CommandEvent e) {
|
public void executed(String[] args, CommandEvent e) {
|
||||||
if (args.length == 2) {
|
if (args.length == 2) {
|
||||||
int count = Objects.requireNonNull(e.getGuild().getVoiceChannelById(args[0])).getMembers().size();
|
if (StringUtils.isNumeric(args[0]) && args[0].length() == 18) {
|
||||||
Objects.requireNonNull(e.getGuild().getVoiceChannelById(args[0])).getMembers().forEach(
|
if (StringUtils.isNumeric(args[1]) && args[1].length() == 18) {
|
||||||
member -> {
|
if (!args[0].equals(args[1])) {
|
||||||
e.getGuild().moveVoiceMember(member, e.getGuild().getVoiceChannelById(args[1])).queue();
|
int count = e.getGuild().getVoiceChannelById(args[0]).getMembers().size();
|
||||||
|
e.getGuild().getVoiceChannelById(args[0]).getMembers().forEach(
|
||||||
|
member -> e.getGuild().moveVoiceMember(member, e.getGuild().getVoiceChannelById(args[1])).queue()
|
||||||
|
);
|
||||||
|
e.getChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.INFO,
|
||||||
|
"commands.misc.moveall.success.title", "",
|
||||||
|
"commands.misc.moveall.success.description", String.valueOf(count))
|
||||||
|
.build()).queue();
|
||||||
|
} else {
|
||||||
|
e.getChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.ERROR,
|
||||||
|
"commands.misc.moveall.error.equals.title",
|
||||||
|
"commands.misc.moveall.error.equals.description")
|
||||||
|
.build()).queue();
|
||||||
}
|
}
|
||||||
);
|
} else {
|
||||||
e.getChannel().sendMessage(new EmbedBuilder().setTitle("Successfully Moved!").setDescription("I moved " +
|
e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.ERROR,
|
||||||
count + " Members. Have fun!").build()).queue();
|
"commands.misc.moveall.error.target.int.title",
|
||||||
} else {
|
"commands.misc.moveall.error.target.int.description").build()).queue();
|
||||||
e.getHelpCommand().sendHelp(this, e);
|
}
|
||||||
}
|
} else {
|
||||||
|
e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.ERROR,
|
||||||
|
"commands.misc.moveall.error.source.int.title",
|
||||||
|
"commands.misc.moveall.error.source.int.description").build()).queue();
|
||||||
|
}
|
||||||
|
} else e.getHelpCommand().sendHelp(this, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String[] labels() {
|
public String[] labels() {
|
||||||
return new String[]{"moveall", "move-all"};
|
return new String[]{"moveall", "move-all", "ma"};
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String description() {
|
public String description() {
|
||||||
return "Moves All users in channel1 to channel2";
|
return "commands.misc.moveall.help.description";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String usage() {
|
public String usage() {
|
||||||
return "[channel1] [channel2]";
|
return "[source-channel] [target-channel]";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -86,16 +86,13 @@ public class RegionChangeCommand implements Command {
|
||||||
case "us-south":
|
case "us-south":
|
||||||
setRegion(Region.US_SOUTH, "US South", e);
|
setRegion(Region.US_SOUTH, "US South", e);
|
||||||
break;
|
break;
|
||||||
case "south-korea":
|
|
||||||
setRegion(Region.SOUTH_KOREA, "South Korea", e);
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
e.getTextChannel().sendMessage(
|
e.getTextChannel().sendMessage(
|
||||||
e.getMessageEditor().getMessage(
|
e.getMessageEditor().getMessage(
|
||||||
MessageEditor.MessageType.INFO,
|
MessageEditor.MessageType.INFO,
|
||||||
"commands.moderation.regionchange.regions.title",
|
"commands.moderation.regionchange.regions.title",
|
||||||
"")
|
"")
|
||||||
.setDescription("**LOCKED:**\n`amsterdam` `frankfurt` `eu-west` `eu-central` `london` `south korea`\n\n**UNLOCKED:**\n`europe` `brazil` `hongkong` `india` `japan` `singapore` `south-africa` `sydney` `us-central` `us-east` `us-west` `us-south`")
|
.setDescription("**LOCKED:**\n`amsterdam` `frankfurt` `eu-west` `eu-central` `london`\n\n**UNLOCKED:**\n`europe` `brazil` `hongkong` `india` `japan` `singapore` `south-africa` `sydney` `us-central` `us-east` `us-west` `us-south`")
|
||||||
.build()).queue();
|
.build()).queue();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -34,8 +34,8 @@ public class PauseCommand implements Command {
|
||||||
.build()).queue();
|
.build()).queue();
|
||||||
} else {
|
} else {
|
||||||
e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.ERROR,
|
e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.ERROR,
|
||||||
"commands.music.pause.error.paused.title",
|
"commands.music.pause.error.paused.title", "",
|
||||||
"commands.music.pause.error.paused.description")
|
"commands.music.pause.error.paused.description", e.getRethinkServer().getPrefix())
|
||||||
.build()).queue();
|
.build()).queue();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ public class AnalCommand implements Command {
|
||||||
@Override
|
@Override
|
||||||
public void executed(String[] args, CommandEvent e) {
|
public void executed(String[] args, CommandEvent e) {
|
||||||
if (e.getTextChannel().isNSFW()) {
|
if (e.getTextChannel().isNSFW()) {
|
||||||
String url = Http.getNSFW("https://api.nekos.dev/api/v3/images/nsfw/gif/anal/");
|
String url = Http.getNSFW("https://api.nekos.dev/api/v3/images/nsfw/gif/anal");
|
||||||
e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.INFO)
|
e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.INFO)
|
||||||
.setAuthor(e.getMessageEditor().getTerm("commands.nsfw.gif.error.title"), url)
|
.setAuthor(e.getMessageEditor().getTerm("commands.nsfw.gif.error.title"), url)
|
||||||
.setImage(url)
|
.setImage(url)
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ public class BoobsCommand implements Command {
|
||||||
public void executed(String[] args, CommandEvent e) {
|
public void executed(String[] args, CommandEvent e) {
|
||||||
if (e.getTextChannel().isNSFW()) {
|
if (e.getTextChannel().isNSFW()) {
|
||||||
|
|
||||||
String url = Http.getNSFW("https://api.nekos.dev/api/v3/images/nsfw/gif/tits/");
|
String url = Http.getNSFW("https://api.nekos.dev/api/v3/images/nsfw/gif/tits");
|
||||||
|
|
||||||
e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.INFO)
|
e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.INFO)
|
||||||
.setAuthor(e.getMessageEditor().getTerm("commands.nsfw.gif.error.title"), url)
|
.setAuthor(e.getMessageEditor().getTerm("commands.nsfw.gif.error.title"), url)
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ public class CumCommand implements Command {
|
||||||
public void executed(String[] args, CommandEvent e) {
|
public void executed(String[] args, CommandEvent e) {
|
||||||
if (e.getTextChannel().isNSFW()) {
|
if (e.getTextChannel().isNSFW()) {
|
||||||
|
|
||||||
String url = Http.getNSFW("https://api.nekos.dev/api/v3/images/nsfw/gif/cum/");
|
String url = Http.getNSFW("https://api.nekos.dev/api/v3/images/nsfw/gif/cum");
|
||||||
|
|
||||||
e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.INFO)
|
e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.INFO)
|
||||||
.setAuthor(e.getMessageEditor().getTerm("commands.nsfw.gif.error.title"), url)
|
.setAuthor(e.getMessageEditor().getTerm("commands.nsfw.gif.error.title"), url)
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ public class FeetCommand implements Command {
|
||||||
public void executed(String[] args, CommandEvent e) {
|
public void executed(String[] args, CommandEvent e) {
|
||||||
if (e.getTextChannel().isNSFW()) {
|
if (e.getTextChannel().isNSFW()) {
|
||||||
|
|
||||||
String url = Http.getNSFW("https://api.nekos.dev/api/v3/images/nsfw/gif/feet/");
|
String url = Http.getNSFW("https://api.nekos.dev/api/v3/images/nsfw/gif/feet");
|
||||||
|
|
||||||
e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.INFO)
|
e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.INFO)
|
||||||
.setAuthor(e.getMessageEditor().getTerm("commands.nsfw.gif.error.title"), url)
|
.setAuthor(e.getMessageEditor().getTerm("commands.nsfw.gif.error.title"), url)
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ public class FingeringCommand implements Command {
|
||||||
public void executed(String[] args, CommandEvent e) {
|
public void executed(String[] args, CommandEvent e) {
|
||||||
if (e.getTextChannel().isNSFW()) {
|
if (e.getTextChannel().isNSFW()) {
|
||||||
|
|
||||||
String url = Http.getNSFW("https://api.nekos.dev/api/v3/images/nsfw/gif/pussy_wank/");
|
String url = Http.getNSFW("https://api.nekos.dev/api/v3/images/nsfw/gif/pussy_wank");
|
||||||
|
|
||||||
e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.INFO)
|
e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.INFO)
|
||||||
.setAuthor(e.getMessageEditor().getTerm("commands.nsfw.gif.error.title"), url)
|
.setAuthor(e.getMessageEditor().getTerm("commands.nsfw.gif.error.title"), url)
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ public class LickingCommand implements Command {
|
||||||
public void executed(String[] args, CommandEvent e) {
|
public void executed(String[] args, CommandEvent e) {
|
||||||
if (e.getTextChannel().isNSFW()) {
|
if (e.getTextChannel().isNSFW()) {
|
||||||
|
|
||||||
String url = Http.getNSFW("https://api.nekos.dev/api/v3/images/nsfw/gif/kuni/");
|
String url = Http.getNSFW("https://api.nekos.dev/api/v3/images/nsfw/gif/kuni");
|
||||||
|
|
||||||
e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.INFO)
|
e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.INFO)
|
||||||
.setAuthor(e.getMessageEditor().getTerm("commands.nsfw.gif.error.title"), url)
|
.setAuthor(e.getMessageEditor().getTerm("commands.nsfw.gif.error.title"), url)
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ public class PornCommand implements Command {
|
||||||
public void executed(String[] args, CommandEvent e) {
|
public void executed(String[] args, CommandEvent e) {
|
||||||
if (e.getTextChannel().isNSFW()) {
|
if (e.getTextChannel().isNSFW()) {
|
||||||
|
|
||||||
String url = Http.getNSFW("https://api.nekos.dev/api/v3/images/nsfw/gif/classic/");
|
String url = Http.getNSFW("https://api.nekos.dev/api/v3/images/nsfw/gif/classic");
|
||||||
|
|
||||||
e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.INFO)
|
e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.INFO)
|
||||||
.setAuthor(e.getMessageEditor().getTerm("commands.nsfw.gif.error.title"), url)
|
.setAuthor(e.getMessageEditor().getTerm("commands.nsfw.gif.error.title"), url)
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ public class PussyCommand implements Command {
|
||||||
public void executed(String[] args, CommandEvent e) {
|
public void executed(String[] args, CommandEvent e) {
|
||||||
if (e.getTextChannel().isNSFW()) {
|
if (e.getTextChannel().isNSFW()) {
|
||||||
|
|
||||||
String url = Http.getNSFW("https://nekos.life/api/v2/img/pussy/");
|
String url = Http.getNSFW("https://nekos.life/api/v2/img/pussy");
|
||||||
|
|
||||||
e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.INFO)
|
e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.INFO)
|
||||||
.setAuthor(e.getMessageEditor().getTerm("commands.nsfw.gif.error.title"), url)
|
.setAuthor(e.getMessageEditor().getTerm("commands.nsfw.gif.error.title"), url)
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ public class RandomPornCommand implements Command {
|
||||||
public void executed(String[] args, CommandEvent e) {
|
public void executed(String[] args, CommandEvent e) {
|
||||||
if (e.getTextChannel().isNSFW()) {
|
if (e.getTextChannel().isNSFW()) {
|
||||||
|
|
||||||
String url = Http.getNSFW("https://api.nekos.dev/api/v3/images/nsfw/gif/all_tags/");
|
String url = Http.getNSFW("https://api.nekos.dev/api/v3/images/nsfw/gif/all_tags");
|
||||||
|
|
||||||
e.getTextChannel()
|
e.getTextChannel()
|
||||||
.sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.INFO)
|
.sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.INFO)
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ public class SoloCommand implements Command {
|
||||||
public void executed(String[] args, CommandEvent e) {
|
public void executed(String[] args, CommandEvent e) {
|
||||||
if (e.getTextChannel().isNSFW()) {
|
if (e.getTextChannel().isNSFW()) {
|
||||||
|
|
||||||
String url = Http.getNSFW("https://api.nekos.dev/api/v3/images/nsfw/gif/girls_solo/");
|
String url = Http.getNSFW("https://api.nekos.dev/api/v3/images/nsfw/gif/girls_solo");
|
||||||
|
|
||||||
e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.INFO)
|
e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.INFO)
|
||||||
.setAuthor(e.getMessageEditor().getTerm("commands.nsfw.gif.error.title"), url)
|
.setAuthor(e.getMessageEditor().getTerm("commands.nsfw.gif.error.title"), url)
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ public class SpankCommand implements Command {
|
||||||
public void executed(String[] args, CommandEvent e) {
|
public void executed(String[] args, CommandEvent e) {
|
||||||
if (e.getTextChannel().isNSFW()) {
|
if (e.getTextChannel().isNSFW()) {
|
||||||
|
|
||||||
String url = Http.getNSFW("https://api.nekos.dev/api/v3/images/nsfw/gif/spank/");
|
String url = Http.getNSFW("https://api.nekos.dev/api/v3/images/nsfw/gif/spank");
|
||||||
|
|
||||||
e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.INFO)
|
e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.INFO)
|
||||||
.setAuthor(e.getMessageEditor().getTerm("commands.nsfw.gif.error.title"), url)
|
.setAuthor(e.getMessageEditor().getTerm("commands.nsfw.gif.error.title"), url)
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ public class TransCommand implements Command {
|
||||||
public void executed(String[] args, CommandEvent e) {
|
public void executed(String[] args, CommandEvent e) {
|
||||||
if (e.getTextChannel().isNSFW()) {
|
if (e.getTextChannel().isNSFW()) {
|
||||||
|
|
||||||
String url = Http.getNSFW("https://nekos.life/api/v2/img/trap/");
|
String url = Http.getNSFW("https://nekos.life/api/v2/img/trap");
|
||||||
|
|
||||||
e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.INFO)
|
e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.INFO)
|
||||||
.setAuthor(e.getMessageEditor().getTerm("commands.nsfw.gif.error.title"), url)
|
.setAuthor(e.getMessageEditor().getTerm("commands.nsfw.gif.error.title"), url)
|
||||||
|
|
|
||||||
|
|
@ -33,14 +33,13 @@ public class BotList {
|
||||||
private static String MythicalBotList = "https://mythicalbots.xyz/api/bot/637002314162372639";
|
private static String MythicalBotList = "https://mythicalbots.xyz/api/bot/637002314162372639";
|
||||||
private static String BotsForDiscord = "https://botsfordiscord.com/api/bot/637002314162372639";
|
private static String BotsForDiscord = "https://botsfordiscord.com/api/bot/637002314162372639";
|
||||||
private static String DiscordBotList = "https://discordbotlist.com/api/bots/637002314162372639/stats";
|
private static String DiscordBotList = "https://discordbotlist.com/api/bots/637002314162372639/stats";
|
||||||
private static String DiscordBoats = "https://discord.boats/api/bot/637002314162372639";
|
private static String DiscordBoats = "https://discord.boats/api/v2/bot/637002314162372639";
|
||||||
private static String YetAnotherBotList = "https://yabl.xyz/api/bot/637002314162372639/stats";
|
private static String YetAnotherBotList = "https://yabl.xyz/api/bot/637002314162372639/stats";
|
||||||
private static String DiscordExtremeList = "https://api.discordextremelist.xyz/v1/bot/637002314162372639";
|
private static String DiscordExtremeList = "https://api.discordextremelist.xyz/v1/bot/637002314162372639";
|
||||||
private static String DiscordBots = "https://top.gg/api/bots/637002314162372639/stats";
|
private static String DiscordBots = "https://top.gg/api/bots/637002314162372639/stats";
|
||||||
private static String BotListSpace = "https://api.botlist.space/v1/bots/637002314162372639";
|
private static String BotListSpace = "https://api.botlist.space/v1/bots/637002314162372639";
|
||||||
private static String DiscordBots2 = "https://discord.bots.gg/api/v1/bots/637002314162372639/stats";
|
private static String DiscordBots2 = "https://discord.bots.gg/api/v1/bots/637002314162372639/stats";
|
||||||
private static String CloudList = "https://www.cloudlist.xyz/api/stats/637002314162372639";
|
private static String ArcaneBotCenter = "https://arcane-center.xyz/api/637002314162372639/stats";
|
||||||
private static String ArcaneBotCenter = "https://arcane-botcenter.xyz/api/637002314162372639/stats";
|
|
||||||
|
|
||||||
private Config config;
|
private Config config;
|
||||||
|
|
||||||
|
|
@ -197,21 +196,6 @@ public class BotList {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
// CloudList
|
|
||||||
|
|
||||||
Request cloudlist = new Request.Builder()
|
|
||||||
.url(CloudList)
|
|
||||||
.post(body)
|
|
||||||
.addHeader("Authorization", config.getCloudListToken())
|
|
||||||
.build();
|
|
||||||
|
|
||||||
try {
|
|
||||||
new OkHttpClient().newCall(cloudlist).execute().close();
|
|
||||||
System.out.println("Successfully posted count to the CloudList!");
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Arcane Bot Center
|
// Arcane Bot Center
|
||||||
|
|
||||||
Request arcane = new Request.Builder()
|
Request arcane = new Request.Builder()
|
||||||
|
|
|
||||||
|
|
@ -98,6 +98,10 @@ commands.misc.code.success.description = Diese Nachricht enthält einige Informa
|
||||||
commands.misc.code.error.title = Code nicht gefunden
|
commands.misc.code.error.title = Code nicht gefunden
|
||||||
commands.misc.code.error.description = Ich kann den angegebenen Einladungscode nicht finden.
|
commands.misc.code.error.description = Ich kann den angegebenen Einladungscode nicht finden.
|
||||||
commands.misc.code.help.description = Shows information about a invite code.
|
commands.misc.code.help.description = Shows information about a invite code.
|
||||||
|
commands.misc.moveall.success.title = Successfully moved
|
||||||
|
commands.misc.moveall.success.description = I successfully moved %extra% members. Have fun\!
|
||||||
|
commands.misc.moveall.help.description = Moves all users in the source channel to the target channel.
|
||||||
|
commands.misc.corona.help.description = Show the newest stats about COVID-19
|
||||||
|
|
||||||
commands.moderation.ban.success.title = Erfolgreich gebannt
|
commands.moderation.ban.success.title = Erfolgreich gebannt
|
||||||
commands.moderation.ban.success.description = Ich habe %extra% erfolgreich gebannt
|
commands.moderation.ban.success.description = Ich habe %extra% erfolgreich gebannt
|
||||||
|
|
|
||||||
|
|
@ -98,6 +98,16 @@ commands.misc.code.success.description = This message contains some information
|
||||||
commands.misc.code.error.title = Code not found
|
commands.misc.code.error.title = Code not found
|
||||||
commands.misc.code.error.description = I can't find the specified invite code.
|
commands.misc.code.error.description = I can't find the specified invite code.
|
||||||
commands.misc.code.help.description = Shows information about a invite code.
|
commands.misc.code.help.description = Shows information about a invite code.
|
||||||
|
commands.misc.moveall.success.title = Successfully moved
|
||||||
|
commands.misc.moveall.success.description = I successfully moved %extra% members. Have fun\!
|
||||||
|
commands.misc.moveall.error.equals.title = Not twice
|
||||||
|
commands.misc.moveall.error.equals.description = The first voice channel equals the second. You have to specify two different voice channels.
|
||||||
|
commands.misc.moveall.error.source.int.title = Invalid ID
|
||||||
|
commands.misc.moveall.error.source.int.description = You didn't specified a ID as the source channel.
|
||||||
|
commands.misc.moveall.error.target.int.title = Invalid ID
|
||||||
|
commands.misc.moveall.error.target.int.description = You didn't specified a ID as the target channel.
|
||||||
|
commands.misc.moveall.help.description = Moves all users in the source channel to the target channel.
|
||||||
|
commands.misc.corona.help.description = Show the newest stats about COVID-19
|
||||||
|
|
||||||
commands.moderation.ban.success.title = Successfully banned
|
commands.moderation.ban.success.title = Successfully banned
|
||||||
commands.moderation.ban.success.description = I successfully baned %extra%
|
commands.moderation.ban.success.description = I successfully baned %extra%
|
||||||
|
|
@ -266,7 +276,7 @@ commands.music.volume.help.description = Change the volume of the music.
|
||||||
commands.music.pause.success.title = Successfully paused
|
commands.music.pause.success.title = Successfully paused
|
||||||
commands.music.pause.success.description = I successfully paused the played song.
|
commands.music.pause.success.description = I successfully paused the played song.
|
||||||
commands.music.pause.error.paused.title = Already paused
|
commands.music.pause.error.paused.title = Already paused
|
||||||
commands.music.pause.error.paused.description = The song is already paused.
|
commands.music.pause.error.paused.description = The song is already paused. You can continue playing it with %extra%play
|
||||||
commands.music.pause.error.connected.title = No channel
|
commands.music.pause.error.connected.title = No channel
|
||||||
commands.music.pause.error.connected.description = You have to be in the same voice channel as the bot to pause the song.
|
commands.music.pause.error.connected.description = You have to be in the same voice channel as the bot to pause the song.
|
||||||
commands.music.pause.help.description = Pause the playing song.
|
commands.music.pause.help.description = Pause the playing song.
|
||||||
|
|
|
||||||
|
|
@ -98,6 +98,10 @@ commands.misc.code.success.description = This message contains some information
|
||||||
commands.misc.code.error.title = Code not found
|
commands.misc.code.error.title = Code not found
|
||||||
commands.misc.code.error.description = I can't find the specified invite code.
|
commands.misc.code.error.description = I can't find the specified invite code.
|
||||||
commands.misc.code.help.description = Shows information about a invite code.
|
commands.misc.code.help.description = Shows information about a invite code.
|
||||||
|
commands.misc.moveall.success.title = Successfully moved
|
||||||
|
commands.misc.moveall.success.description = I successfully moved %extra% members. Have fun\!
|
||||||
|
commands.misc.moveall.help.description = Moves all users in the source channel to the target channel.
|
||||||
|
commands.misc.corona.help.description = Show the newest stats about COVID-19
|
||||||
|
|
||||||
commands.moderation.ban.success.title = Successfully banned
|
commands.moderation.ban.success.title = Successfully banned
|
||||||
commands.moderation.ban.success.description = I successfully baned %extra%
|
commands.moderation.ban.success.description = I successfully baned %extra%
|
||||||
|
|
|
||||||
|
|
@ -98,6 +98,10 @@ commands.misc.code.success.description = This message contains some information
|
||||||
commands.misc.code.error.title = Code not found
|
commands.misc.code.error.title = Code not found
|
||||||
commands.misc.code.error.description = I can't find the specified invite code.
|
commands.misc.code.error.description = I can't find the specified invite code.
|
||||||
commands.misc.code.help.description = Shows information about a invite code.
|
commands.misc.code.help.description = Shows information about a invite code.
|
||||||
|
commands.misc.moveall.success.title = Successfully moved
|
||||||
|
commands.misc.moveall.success.description = I successfully moved %extra% members. Have fun\!
|
||||||
|
commands.misc.moveall.help.description = Moves all users in the source channel to the target channel.
|
||||||
|
commands.misc.corona.help.description = Show the newest stats about COVID-19
|
||||||
|
|
||||||
commands.moderation.ban.success.title = Successfully banned
|
commands.moderation.ban.success.title = Successfully banned
|
||||||
commands.moderation.ban.success.description = I successfully baned %extra%
|
commands.moderation.ban.success.description = I successfully baned %extra%
|
||||||
|
|
|
||||||
|
|
@ -98,6 +98,10 @@ commands.misc.code.success.description = This message contains some information
|
||||||
commands.misc.code.error.title = Code not found
|
commands.misc.code.error.title = Code not found
|
||||||
commands.misc.code.error.description = I can't find the specified invite code.
|
commands.misc.code.error.description = I can't find the specified invite code.
|
||||||
commands.misc.code.help.description = Shows information about a invite code.
|
commands.misc.code.help.description = Shows information about a invite code.
|
||||||
|
commands.misc.moveall.success.title = Successfully moved
|
||||||
|
commands.misc.moveall.success.description = I successfully moved %extra% members. Have fun\!
|
||||||
|
commands.misc.moveall.help.description = Moves all users in the source channel to the target channel.
|
||||||
|
commands.misc.corona.help.description = Show the newest stats about COVID-19
|
||||||
|
|
||||||
commands.moderation.ban.success.title = Successfully banned
|
commands.moderation.ban.success.title = Successfully banned
|
||||||
commands.moderation.ban.success.description = I successfully baned %extra%
|
commands.moderation.ban.success.description = I successfully baned %extra%
|
||||||
|
|
|
||||||
|
|
@ -98,6 +98,10 @@ commands.misc.code.success.description = This message contains some information
|
||||||
commands.misc.code.error.title = Code not found
|
commands.misc.code.error.title = Code not found
|
||||||
commands.misc.code.error.description = I can't find the specified invite code.
|
commands.misc.code.error.description = I can't find the specified invite code.
|
||||||
commands.misc.code.help.description = Shows information about a invite code.
|
commands.misc.code.help.description = Shows information about a invite code.
|
||||||
|
commands.misc.moveall.success.title = Successfully moved
|
||||||
|
commands.misc.moveall.success.description = I successfully moved %extra% members. Have fun\!
|
||||||
|
commands.misc.moveall.help.description = Moves all users in the source channel to the target channel.
|
||||||
|
commands.misc.corona.help.description = Show the newest stats about COVID-19
|
||||||
|
|
||||||
commands.moderation.ban.success.title = Successfully banned
|
commands.moderation.ban.success.title = Successfully banned
|
||||||
commands.moderation.ban.success.description = I successfully baned %extra%
|
commands.moderation.ban.success.description = I successfully baned %extra%
|
||||||
|
|
|
||||||
|
|
@ -98,6 +98,10 @@ commands.misc.code.success.description = This message contains some information
|
||||||
commands.misc.code.error.title = Code not found
|
commands.misc.code.error.title = Code not found
|
||||||
commands.misc.code.error.description = I can't find the specified invite code.
|
commands.misc.code.error.description = I can't find the specified invite code.
|
||||||
commands.misc.code.help.description = Shows information about a invite code.
|
commands.misc.code.help.description = Shows information about a invite code.
|
||||||
|
commands.misc.moveall.success.title = Successfully moved
|
||||||
|
commands.misc.moveall.success.description = I successfully moved %extra% members. Have fun\!
|
||||||
|
commands.misc.moveall.help.description = Moves all users in the source channel to the target channel.
|
||||||
|
commands.misc.corona.help.description = Show the newest stats about COVID-19
|
||||||
|
|
||||||
commands.moderation.ban.success.title = Successfully banned
|
commands.moderation.ban.success.title = Successfully banned
|
||||||
commands.moderation.ban.success.description = I successfully baned %extra%
|
commands.moderation.ban.success.description = I successfully baned %extra%
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue