Invite Link Detector

This commit is contained in:
GregTCLTK 2019-12-02 08:28:20 +01:00
parent fd2258a6fb
commit 40e4215d60
No known key found for this signature in database
GPG key ID: A91BADE5C070FF67
5 changed files with 221 additions and 20 deletions

View file

@ -78,6 +78,7 @@ public class Hadder {
new LeaveCommand(),
new GuildLeaveCommand(),
new MemeCommand(),
new InviteDetectCommand(),
new LinkCommand()), config, helpCommand);
builder.addEventListeners(
@ -87,6 +88,7 @@ public class Hadder {
new GuildListener(rethink, config),
new ReadyListener(rethink, config),
new LinkListener(rethink),
new InviteLinkListener(rethink),
new RulesListener(rethink));
try {

View file

@ -32,7 +32,7 @@ public class Rethink {
.connect();
System.out.println("DB CONNECTED");
} catch (Exception e) {
System.out.println(e.toString());
e.printStackTrace();
System.out.println("DB CONNECTION FAILED");
}
}
@ -59,7 +59,7 @@ public class Rethink {
}
private String update(String table, String wherevalue, String what, String whatvalue) {
String out="";
String out = "";
try {
Cursor cursor = r.table(table).get(wherevalue).update(r.hashMap(what, whatvalue)).run(conn);
out=cursor.toString();
@ -95,16 +95,16 @@ public class Rethink {
}
public String setUserPrefix(String prefix, String userid) {
return this.update("user", userid, "prefix", prefix);
public void setUserPrefix(String prefix, String userid) {
this.update("user", userid, "prefix", prefix);
}
public String getUserPrefix(String id) {
return (String) this.get("user", "id", id, "prefix");
}
public String setGuildPrefix(String prefix, String guildid) {
return this.update("server", guildid, "prefix", prefix);
public void setGuildPrefix(String prefix, String guildid) {
this.update("server", guildid, "prefix", prefix);
}
public String getGuildPrefix(String id) {
@ -115,12 +115,12 @@ public class Rethink {
return new JSONArray((String) this.get("server", "id", id, "links"));
}
public String addLinkedGuild(String guildid, String linkid) {
public void addLinkedGuild(String guildid, String linkid) {
JSONArray links = getLinks(guildid);
for (int i = 0; links.length()>i; i++) {
if (links.getString(i).equals(linkid)) return null;
if (links.getString(i).equals(linkid)) return;
}
return this.update("server", guildid, "links", this.getLinks(guildid).put(linkid).toString());
this.update("server", guildid, "links", this.getLinks(guildid).put(linkid).toString());
}
public String removeLinkedGuild(String guildid, String linkid) {
@ -134,26 +134,25 @@ public class Rethink {
return this.update("server", guildid, "links", linkedguildslist.toString());
}
public String setLinkChannel(String guildid, String channelid) {
return this.update("server", guildid, "linkchannel", channelid);
public void setLinkChannel(String guildid, String channelid) {
this.update("server", guildid, "linkchannel", channelid);
}
public String getLinkChannel(String guildid) {
return (String) this.get("server", "id", guildid, "linkchannel");
}
public String insertGuild(String id) {
return this.insert("server", r.hashMap("id", id).with("prefix", "h.").with("links", "[]").with("linkchannel", "").with("message_id", "").with("role_id", ""));
public void insertGuild(String id) {
this.insert("server", r.hashMap("id", id).with("prefix", "h.").with("links", "[]").with("linkchannel", "").with("message_id", "").with("role_id", "").with("invite_detect", false));
}
public String insertUser(String id) {
return this.insert("user", r.hashMap("id", id).with("prefix", "h."));
public void insertUser(String id) {
this.insert("user", r.hashMap("id", id).with("prefix", "h."));
}
public String updateRules(String guild_id, String message_id, String role_id) {
public void updateRules(String guild_id, String message_id, String role_id) {
this.update("server", guild_id, "message_id", message_id);
this.update("server", guild_id, "role_id", role_id);
return null;
}
public String getRulesMID(String guild_id) {
@ -164,4 +163,16 @@ public class Rethink {
return (String) this.get("server", "id", guild_id, "role_id");
}
public void setInviteDetection(String guild_id, boolean b) {
try {
r.table("server").get(guild_id).update(r.hashMap("invite_detect", b)).run(conn);
} catch (ClassCastException e) {
e.printStackTrace();
}
}
public Boolean getInviteDetection(String guild_id) {
return (Boolean) this.get("server", "id", guild_id, "invite_detect");
}
}

View file

@ -0,0 +1,71 @@
package com.bbn.hadder.commands.moderation;
/*
* @author Skidder / GregTCLTK
*/
import com.bbn.hadder.commands.Command;
import com.bbn.hadder.commands.CommandEvent;
import com.bbn.hadder.utils.MessageEditor;
import net.dv8tion.jda.api.Permission;
public class InviteDetectCommand implements Command {
@Override
public void executed(String[] args, CommandEvent event) {
if (args.length == 1) {
if (event.getMember().hasPermission(Permission.MANAGE_SERVER)) {
switch (args[0].toLowerCase()) {
case "on":
if (!event.getRethink().getInviteDetection(event.getGuild().getId())) {
event.getRethink().setInviteDetection(event.getGuild().getId(), true);
event.getTextChannel().sendMessage(new MessageEditor().setDefaultSettings(MessageEditor.MessageType.INFO)
.setTitle("Successfully activated")
.setDescription("I successfully activated the invite link detection for this guild.")
.build()).queue();
} else {
event.getTextChannel().sendMessage(new MessageEditor().setDefaultSettings(MessageEditor.MessageType.WARNING)
.setTitle("Already activated")
.setDescription("The invite link detection is already activated on this guild.")
.build()).queue();
}
break;
case "off":
if (event.getRethink().getInviteDetection(event.getGuild().getId())) {
event.getRethink().setInviteDetection(event.getGuild().getId(), false);
event.getTextChannel().sendMessage(new MessageEditor().setDefaultSettings(MessageEditor.MessageType.INFO)
.setTitle("Successfully deactivated")
.setDescription("I successfully deactivated the invite link detection for this guild.")
.build()).queue();
} else {
event.getTextChannel().sendMessage(new MessageEditor().setDefaultSettings(MessageEditor.MessageType.WARNING)
.setTitle("Already deactivated")
.setDescription("The invite link detection is already deactivated on this guild.")
.build()).queue();
}
break;
}
} else {
event.getTextChannel().sendMessage(new MessageEditor().setDefaultSettings(MessageEditor.MessageType.NO_PERMISSION).build()).queue();
}
} else {
event.getHelpCommand().sendHelp(this, event.getRethink(), event.getAuthor(), event.getTextChannel());
}
}
@Override
public String[] labels() {
return new String[]{"invitedetect", "detectinvite"};
}
@Override
public String description() {
return "Activate or deactivate the Discord invite link detection.";
}
@Override
public String usage() {
return "<on/off>";
}
}

View file

@ -0,0 +1,118 @@
package com.bbn.hadder.listener;
/*
* @author Skidder / GregTCLTK
*/
import com.bbn.hadder.Rethink;
import com.bbn.hadder.utils.MessageEditor;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.ChannelType;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.events.message.MessageUpdateEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import org.json.JSONObject;
import javax.annotation.Nonnull;
public class InviteLinkListener extends ListenerAdapter {
private Rethink rethink;
public InviteLinkListener(Rethink rethink) {
this.rethink = rethink;
}
@Override
public void onMessageReceived(@Nonnull MessageReceivedEvent event) {
if (event.isFromType(ChannelType.TEXT)) {
if (event.getMessage().getContentRaw().contains("discord.gg/")) {
if (!event.getMember().hasPermission(Permission.ADMINISTRATOR)) {
if (rethink.getInviteDetection(event.getGuild().getId())) {
String split = event.getMessage().getContentRaw().split("discord.gg/", 10)[1];
String invite = split.split(" ")[0];
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url("https://canary.discordapp.com/api/v6/invites/" + invite).build();
try {
Response response = client.newCall(request).execute();
JSONObject json = new JSONObject(response.body().string());
if (!json.toString().contains("\"message\":")) {
event.getMessage().delete().reason("Invite Link detected").queue();
}
} catch (Exception e) {
e.printStackTrace();
}
}
} else {
event.getTextChannel().sendMessage(new MessageEditor().setDefaultSettings(MessageEditor.MessageType.NO_PERMISSION).build()).queue();
}
} else if (event.getMessage().getContentRaw().contains("discordapp.com/invite")) {
if (!event.getMember().hasPermission(Permission.ADMINISTRATOR)) {
if (rethink.getInviteDetection(event.getGuild().getId())) {
String split = event.getMessage().getContentRaw().split("discordapp.com/invite/", 10)[1];
String invite = split.split(" ")[0];
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url("https://canary.discordapp.com/api/v6/invites/" + invite).build();
try {
Response response = client.newCall(request).execute();
JSONObject json = new JSONObject(response.body().string());
if (!json.toString().contains("\"message\":")) {
event.getMessage().delete().reason("Invite Link detected").queue();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
}
@Override
public void onMessageUpdate(@Nonnull MessageUpdateEvent event) {
if (event.isFromType(ChannelType.TEXT)) {
if (event.getMessage().getContentRaw().contains("discord.gg/")) {
if (event.getMember().hasPermission(Permission.MANAGE_SERVER)) {
if (rethink.getInviteDetection(event.getGuild().getId())) {
String split = event.getMessage().getContentRaw().split("discord.gg/", 10)[1];
String invite = split.split(" ")[0];
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url("https://canary.discordapp.com/api/v6/invites/" + invite).build();
try {
Response response = client.newCall(request).execute();
JSONObject json = new JSONObject(response.body().string());
if (!json.toString().contains("\"message\":")) {
event.getMessage().delete().reason("Invite Link detected").queue();
}
} catch (Exception e) {
e.printStackTrace();
}
}
} else {
event.getTextChannel().sendMessage(new MessageEditor().setDefaultSettings(MessageEditor.MessageType.NO_PERMISSION).build()).queue();
}
} else if (event.getMessage().getContentRaw().contains("discordapp.com/invite")) {
if (event.getMember().hasPermission(Permission.MANAGE_SERVER)) {
if (rethink.getInviteDetection(event.getGuild().getId())) {
String split = event.getMessage().getContentRaw().split("discordapp.com/invite/", 10)[1];
String invite = split.split(" ")[0];
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url("https://canary.discordapp.com/api/v6/invites/" + invite).build();
try {
Response response = client.newCall(request).execute();
JSONObject json = new JSONObject(response.body().string());
if (!json.toString().contains("\"message\":")) {
event.getMessage().delete().reason("Invite Link detected").queue();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
}
}

View file

@ -4,6 +4,7 @@ import com.bbn.hadder.Rethink;
import com.bbn.hadder.core.LinkUtils;
import com.bbn.hadder.utils.MessageEditor;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.ChannelType;
import net.dv8tion.jda.api.entities.MessageEmbed;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.events.message.react.MessageReactionAddEvent;
@ -70,11 +71,9 @@ public class LinkListener extends ListenerAdapter {
@Override
public void onMessageReceived(@Nonnull MessageReceivedEvent event) {
if (!event.isWebhookMessage()) {
if (event.getChannel().getId().equals(rethink.getLinkChannel(event.getGuild().getId()))) {
if (!event.isWebhookMessage() && event.getChannel().getId().equals(rethink.getLinkChannel(event.getGuild().getId())) && event.isFromType(ChannelType.TEXT)) {
new LinkUtils().sendAll(rethink.getLinks(event.getGuild().getId()), event.getJDA(), event.getMessage(), event.getAuthor(), new ArrayList<>() {
}, rethink, false);
}
}
}
}