diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..149cb3c --- /dev/null +++ b/.classpath @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2941331 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +bin/ +target/ \ No newline at end of file diff --git a/.project b/.project new file mode 100644 index 0000000..4651bff --- /dev/null +++ b/.project @@ -0,0 +1,23 @@ + + + AnimeRPC + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.m2e.core.maven2Nature + org.eclipse.jdt.core.javanature + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..ab43c2c --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding//src/me/despawningbone/selfbot/DiscordBot.java=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..db24ee7 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,15 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..15175f3 --- /dev/null +++ b/pom.xml @@ -0,0 +1,61 @@ + + 4.0.0 + AnimeRPC + AnimeRPC + 0.0.1-SNAPSHOT + + src + + + maven-compiler-plugin + 3.5.1 + + 1.8 + 1.8 + + + + org.apache.maven.plugins + maven-shade-plugin + 2.4.3 + + + + + + package + + shade + + + + + + + + + club.minnced + java-discord-rpc + 2.0.2 + + + + net.java.dev.jna + jna + 5.6.0 + + + + net.java.dev.jna + jna-platform + 5.6.0 + + + + + jcenter + jcenter-bintray + http://jcenter.bintray.com + + + \ No newline at end of file diff --git a/src/me/despawningbone/selfbot/DiscordBot.java b/src/me/despawningbone/selfbot/DiscordBot.java new file mode 100644 index 0000000..e156923 --- /dev/null +++ b/src/me/despawningbone/selfbot/DiscordBot.java @@ -0,0 +1,126 @@ +package me.despawningbone.selfbot; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +import com.sun.jna.Native; +import com.sun.jna.Platform; +import com.sun.jna.platform.win32.WinDef.HWND; + +import club.minnced.discord.rpc.DiscordEventHandlers; +import club.minnced.discord.rpc.DiscordRPC; +import club.minnced.discord.rpc.DiscordRichPresence; + +import com.sun.jna.platform.win32.User32; + +public class DiscordBot { + + public static String prevTitle = ""; + public static DiscordRichPresence prevPresence = new DiscordRichPresence(); + public static boolean cleared = false; + + public static void main(String[] args) { + + DiscordRPC lib = DiscordRPC.INSTANCE; + String applicationId = "542685911607934986"; + String steamId = ""; + DiscordEventHandlers handlers = new DiscordEventHandlers(); + handlers.ready = (user) -> System.out.println("Ready!"); + lib.Discord_Initialize(applicationId, handlers, true, steamId); + new Thread(() -> { + while(true) { + lib.Discord_RunCallbacks(); + String temp = ""; + if(Platform.isWindows()) { + char[] buffer = new char[2048]; + HWND hwnd = User32.INSTANCE.GetForegroundWindow(); + User32.INSTANCE.GetWindowText(hwnd, buffer, 1024); + temp = Native.toString(buffer); + } else if(Platform.isMac()) { + final String[] script = {"osascript", "-e", "tell application \"System Events\"", "-e", "tell (first process whose frontmost is true) to return name of window 1", "-e", "end tell"}; + try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec(script).getInputStream()))) { + String buffer = null; + while ((buffer = bufferedReader.readLine()) != null) { + temp = buffer; + System.out.println(temp); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + try { + Thread.sleep(2000); + } catch (InterruptedException e) {e.printStackTrace();} + if(temp.contains("- Watch Anime") || temp.contains("Online Sub - AnimeKisa")) { + if(temp.contains("AnimeKisa")) { + String title = temp.substring(6).split(" Online Sub - AnimeKisa")[0]; + if(!prevTitle.equals(title)) { + System.out.println(title); + String[] split = title.split("Episode"); + String epi = "Episode" + split[1]; //animekisa puts everything with episode + String name = split[0]; + DiscordRichPresence presence = new DiscordRichPresence(); + presence.details = name; + if(!epi.isEmpty()) presence.state = epi; + presence.largeImageKey = "animekisa"; + presence.largeImageText = "animekisa"; + //presence.startTimestamp = System.currentTimeMillis() / 1000; // epoch second + System.out.println(presence.details); + System.out.println(presence.state); + //presence.details = ""; + lib.Discord_UpdatePresence(presence); + prevTitle = title; + prevPresence = presence; + cleared = false; + } + } else { + String title = temp.split("- Watch Anime")[0]; + if(!prevTitle.equals(title)) { + System.out.println(title); + String[] split = title.split("Episode"); + String epi = ""; + String name = split[0]; + if(!temp.contains("- Watch Anime Movie Online English Subbed")) { + if(split.length < 2) continue; //theres no reason for it to not have episodes if its not movie + epi = "Episode" + split[1]; + } else { + epi = "Anime Movie"; + } + DiscordRichPresence presence = new DiscordRichPresence(); + presence.details = name; + if(!epi.isEmpty()) presence.state = epi; + presence.largeImageKey = "otakustream"; + presence.largeImageText = "OtakuStream"; + //presence.startTimestamp = System.currentTimeMillis() / 1000; // epoch second + System.out.println(presence.details); + System.out.println(presence.state); + //presence.details = ""; + lib.Discord_UpdatePresence(presence); + prevTitle = title; + prevPresence = presence; + cleared = false; + } + } + + } else { + if(!cleared && !temp.contains(" - Discord") && !temp.contains("工作切換") && !temp.contains("Picture-in-Picture")) { + lib.Discord_ClearPresence(); + cleared = true; + prevTitle = ""; + } + /*if(prevPresence.details != null && !prevPresence.details.equals("Idle")) { + DiscordRichPresence presence = new DiscordRichPresence(); + presence.details = "Idle"; + presence.largeImageKey = "otakustream"; + presence.largeImageText = "OtakuStream"; + lib.Discord_UpdatePresence(presence); + prevPresence = presence; + }*/ + } + } + }, "RPC-Callback-Handler").start(); + + + } +}