simple stoat integration
This commit is contained in:
parent
828d5fbd31
commit
5f3adb6251
@ -11,3 +11,6 @@ app.string_count=14000
|
|||||||
app.thread_count=4
|
app.thread_count=4
|
||||||
app.interval_days_minus=4
|
app.interval_days_minus=4
|
||||||
app.random_length=2.5
|
app.random_length=2.5
|
||||||
|
app.stoat_bot_token=
|
||||||
|
app.stoat_channel_id=
|
||||||
|
app.stoat_api_url=
|
||||||
|
|||||||
180
ArtificialAutism/src/main/java/DataLayer/ThreadClientStoat.java
Normal file
180
ArtificialAutism/src/main/java/DataLayer/ThreadClientStoat.java
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
package DataLayer;
|
||||||
|
|
||||||
|
import FunctionLayer.Datahandler;
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.JsonArray;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import edu.stanford.nlp.pipeline.StanfordCoreNLP;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
public class ThreadClientStoat {
|
||||||
|
|
||||||
|
private String lastProcessedMessageId = null;
|
||||||
|
|
||||||
|
public ThreadClientStoat(Datahandler datahandler, StanfordCoreNLP stanfordCoreNLP, StanfordCoreNLP stanfordCoreNLPSentiment) {
|
||||||
|
Properties prop = new Properties();
|
||||||
|
String fileName = "app.config";
|
||||||
|
try (FileInputStream fis = new FileInputStream(fileName)) {
|
||||||
|
prop.load(fis);
|
||||||
|
} catch (FileNotFoundException ex) {
|
||||||
|
} catch (IOException ex) {
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
String botToken = prop.getProperty("app.stoat_bot_token");
|
||||||
|
String channelId_general_autism = prop.getProperty("app.stoat_channel_id");
|
||||||
|
String API_URL = prop.getProperty("app.stoat_api_url");
|
||||||
|
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
try {
|
||||||
|
Thread.sleep(5000);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
//we dont need to constantly request new messages so adding some artifical delay to see if anything new is here.
|
||||||
|
JsonObject JsonObjmessages = GetLastMessagesFromStoad(botToken, channelId_general_autism, API_URL);
|
||||||
|
if (JsonObjmessages == null || JsonObjmessages.isEmpty())
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String sentence = GetMessageToProcess(JsonObjmessages);
|
||||||
|
if (!sentence.isEmpty())
|
||||||
|
{
|
||||||
|
String ResponseMsg = datahandler.getResponseMsg(sentence, "", stanfordCoreNLP, stanfordCoreNLPSentiment,
|
||||||
|
false);
|
||||||
|
System.out.println(" ResponseMsg stoat: " + ResponseMsg);
|
||||||
|
|
||||||
|
sendMessage(botToken, channelId_general_autism, API_URL, ResponseMsg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String GetMessageToProcess(JsonObject JsonObjmessages) {
|
||||||
|
JsonArray messages = JsonObjmessages.getAsJsonArray("messages");
|
||||||
|
JsonArray users = JsonObjmessages.getAsJsonArray("users");
|
||||||
|
|
||||||
|
for (int index = 0; index < messages.size(); index++) {
|
||||||
|
JsonObject message = messages.get(index).getAsJsonObject();
|
||||||
|
lastProcessedMessageId = message.get("_id").getAsString();
|
||||||
|
String authorId = message.get("author").getAsString();
|
||||||
|
|
||||||
|
JsonObject author = findUserById(users, authorId);
|
||||||
|
if (author != null) {
|
||||||
|
// Check if bot field exists and is true
|
||||||
|
if (author.has("bot")) {
|
||||||
|
continue; // Skip bot messages
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return message.get("content").getAsString();
|
||||||
|
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
private JsonObject findUserById(JsonArray users, String userId) {
|
||||||
|
for (int i = 0; i < users.size(); i++) {
|
||||||
|
JsonObject user = users.get(i).getAsJsonObject();
|
||||||
|
if (user.get("_id").getAsString().equals(userId)) {
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public JsonObject GetLastMessagesFromStoad(String botToken, String channelId_general_autism, String API_URL) {
|
||||||
|
try {
|
||||||
|
String urlString = API_URL + "/channels/" + channelId_general_autism + "/messages?limit=1&include_users=true";
|
||||||
|
if (lastProcessedMessageId != null)
|
||||||
|
{
|
||||||
|
urlString = API_URL + "/channels/" + channelId_general_autism + "/messages?limit=5&include_users=true&sort=Oldest&after=" + lastProcessedMessageId;
|
||||||
|
}
|
||||||
|
URL url = new URL(urlString);
|
||||||
|
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
|
||||||
|
|
||||||
|
// Set up the request
|
||||||
|
conn.setRequestMethod("GET");
|
||||||
|
conn.setRequestProperty("x-bot-token", botToken);
|
||||||
|
conn.setRequestProperty("Content-Type", "application/json");
|
||||||
|
|
||||||
|
// Get the response
|
||||||
|
int responseCode = conn.getResponseCode();
|
||||||
|
if (responseCode == HttpURLConnection.HTTP_OK) {
|
||||||
|
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
|
||||||
|
String inputLine;
|
||||||
|
StringBuilder response = new StringBuilder();
|
||||||
|
|
||||||
|
while ((inputLine = in.readLine()) != null) {
|
||||||
|
response.append(inputLine);
|
||||||
|
}
|
||||||
|
in.close();
|
||||||
|
|
||||||
|
if (response.toString().isEmpty())
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
Gson gson = new Gson();
|
||||||
|
return gson.fromJson(response.toString(), JsonObject.class);
|
||||||
|
} else {
|
||||||
|
System.err.println("GET request failed. Response Code: " + responseCode);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendMessage(String botToken, String channelId_general_autism, String API_URL, String responseMessage) {
|
||||||
|
try {
|
||||||
|
String urlString = API_URL + "/channels/" + channelId_general_autism + "/messages";
|
||||||
|
URL url = new URL(urlString);
|
||||||
|
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
|
||||||
|
|
||||||
|
// Set up POST request
|
||||||
|
conn.setRequestMethod("POST");
|
||||||
|
conn.setRequestProperty("x-bot-token", botToken);
|
||||||
|
conn.setRequestProperty("Content-Type", "application/json");
|
||||||
|
conn.setDoOutput(true);
|
||||||
|
|
||||||
|
// Create JSON body
|
||||||
|
JsonObject jsonBody = new JsonObject();
|
||||||
|
jsonBody.addProperty("content", responseMessage);
|
||||||
|
Gson gson = new Gson();
|
||||||
|
String jsonString = gson.toJson(jsonBody);
|
||||||
|
|
||||||
|
// Send the request
|
||||||
|
try (OutputStream os = conn.getOutputStream()) {
|
||||||
|
byte[] input = jsonString.getBytes("utf-8");
|
||||||
|
os.write(input, 0, input.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get response
|
||||||
|
int responseCode = conn.getResponseCode();
|
||||||
|
if (responseCode == HttpURLConnection.HTTP_OK || responseCode == 201) {
|
||||||
|
//System.out.println("Message sent successfully to Stoat");
|
||||||
|
} else {
|
||||||
|
System.err.println("Failed to send message. Response Code: " + responseCode);
|
||||||
|
|
||||||
|
// Read error response
|
||||||
|
BufferedReader errorReader = new BufferedReader(
|
||||||
|
new InputStreamReader(conn.getErrorStream())
|
||||||
|
);
|
||||||
|
String errorLine;
|
||||||
|
StringBuilder errorResponse = new StringBuilder();
|
||||||
|
while ((errorLine = errorReader.readLine()) != null) {
|
||||||
|
errorResponse.append(errorLine);
|
||||||
|
}
|
||||||
|
errorReader.close();
|
||||||
|
System.err.println("Error response: " + errorResponse.toString());
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -144,7 +144,7 @@ public class Datahandler {
|
|||||||
props.setProperty("parse.model", shiftReduceParserPath);
|
props.setProperty("parse.model", shiftReduceParserPath);
|
||||||
props.setProperty("parse.maxlen", "90");
|
props.setProperty("parse.maxlen", "90");
|
||||||
props.setProperty("parse.binaryTrees", "true");
|
props.setProperty("parse.binaryTrees", "true");
|
||||||
props.setProperty("threads", "1");
|
props.setProperty("threads", "2");
|
||||||
props.setProperty("pos.maxlen", "90");
|
props.setProperty("pos.maxlen", "90");
|
||||||
props.setProperty("tokenize.maxlen", "90");
|
props.setProperty("tokenize.maxlen", "90");
|
||||||
props.setProperty("ssplit.maxlen", "90");
|
props.setProperty("ssplit.maxlen", "90");
|
||||||
@ -171,7 +171,7 @@ public class Datahandler {
|
|||||||
propsSentiment.setProperty("parse.model", lexParserEnglishPCFG);
|
propsSentiment.setProperty("parse.model", lexParserEnglishPCFG);
|
||||||
propsSentiment.setProperty("sentiment.model", sentimentModel);
|
propsSentiment.setProperty("sentiment.model", sentimentModel);
|
||||||
propsSentiment.setProperty("parse.maxlen", "90");
|
propsSentiment.setProperty("parse.maxlen", "90");
|
||||||
propsSentiment.setProperty("threads", "1");
|
propsSentiment.setProperty("threads", "2");
|
||||||
propsSentiment.setProperty("pos.maxlen", "90");
|
propsSentiment.setProperty("pos.maxlen", "90");
|
||||||
propsSentiment.setProperty("tokenize.maxlen", "90");
|
propsSentiment.setProperty("tokenize.maxlen", "90");
|
||||||
propsSentiment.setProperty("ssplit.maxlen", "90");
|
propsSentiment.setProperty("ssplit.maxlen", "90");
|
||||||
|
|||||||
@ -86,7 +86,7 @@ public class PipelineJMWESingleton {
|
|||||||
propsJMWE = new Properties();
|
propsJMWE = new Properties();
|
||||||
propsJMWE.setProperty("annotators", "tokenize,ssplit,pos,lemma");
|
propsJMWE.setProperty("annotators", "tokenize,ssplit,pos,lemma");
|
||||||
propsJMWE.setProperty("tokenize.options", "untokenizable=firstKeep");
|
propsJMWE.setProperty("tokenize.options", "untokenizable=firstKeep");
|
||||||
propsJMWE.setProperty("threads", "1");
|
propsJMWE.setProperty("threads", "2");
|
||||||
propsJMWE.setProperty("pos.maxlen", "90");
|
propsJMWE.setProperty("pos.maxlen", "90");
|
||||||
propsJMWE.setProperty("tokenize.maxlen", "90");
|
propsJMWE.setProperty("tokenize.maxlen", "90");
|
||||||
propsJMWE.setProperty("ssplit.maxlen", "90");
|
propsJMWE.setProperty("ssplit.maxlen", "90");
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package PresentationLayer;
|
|||||||
|
|
||||||
import DataLayer.RunnerClient;
|
import DataLayer.RunnerClient;
|
||||||
import DataLayer.ThreadClient;
|
import DataLayer.ThreadClient;
|
||||||
|
import DataLayer.ThreadClientStoat;
|
||||||
import DataLayer.settings;
|
import DataLayer.settings;
|
||||||
import FunctionLayer.Datahandler;
|
import FunctionLayer.Datahandler;
|
||||||
import FunctionLayer.PipelineJMWESingleton;
|
import FunctionLayer.PipelineJMWESingleton;
|
||||||
@ -58,14 +59,17 @@ public class DiscordHandler extends ListenerAdapter {
|
|||||||
}
|
}
|
||||||
String token = prop.getProperty("app.discordtoken");
|
String token = prop.getProperty("app.discordtoken");
|
||||||
|
|
||||||
try {
|
|
||||||
JDABuilder.createLight(token, GatewayIntent.GUILD_MESSAGES, GatewayIntent.DIRECT_MESSAGES)
|
JDABuilder.createLight(token, GatewayIntent.GUILD_MESSAGES, GatewayIntent.MESSAGE_CONTENT, GatewayIntent.DIRECT_MESSAGES)
|
||||||
.addEventListeners(new DiscordHandler())
|
.addEventListeners(new DiscordHandler())
|
||||||
.setActivity(Activity.playing("Being the autism bot"))
|
.setActivity(Activity.playing("Being the autism bot"))
|
||||||
.build();
|
.build();
|
||||||
} catch (LoginException e) {
|
|
||||||
throw new RuntimeException(e);
|
Thread udpThread = new Thread(() -> {
|
||||||
}
|
new ThreadClientStoat(datahandler, stanfordCoreNLP, stanfordCoreNLPSentiment);
|
||||||
|
}, "UDP-Socket-Thread");
|
||||||
|
udpThread.start();
|
||||||
|
|
||||||
new ThreadClient(datahandler, stanfordCoreNLP, stanfordCoreNLPSentiment);
|
new ThreadClient(datahandler, stanfordCoreNLP, stanfordCoreNLPSentiment);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -74,7 +78,8 @@ public class DiscordHandler extends ListenerAdapter {
|
|||||||
public void onMessageReceived(MessageReceivedEvent event) {
|
public void onMessageReceived(MessageReceivedEvent event) {
|
||||||
String content = event.getMessage().getContentRaw();
|
String content = event.getMessage().getContentRaw();
|
||||||
String username = event.getMessage().getAuthor().getName();
|
String username = event.getMessage().getAuthor().getName();
|
||||||
List<Member> mentionedMembers = event.getMessage().getMentionedMembers();
|
List<Member> mentionedMembers = event.getMessage().getMentions().getMembers();
|
||||||
|
//List<Member> mentionedMembers = event.getMessage().getMentionedMembers();
|
||||||
if (mentionedMembers != null) {
|
if (mentionedMembers != null) {
|
||||||
for (Member member : mentionedMembers) {
|
for (Member member : mentionedMembers) {
|
||||||
content = content.replace(member.getId(), "");
|
content = content.replace(member.getId(), "");
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user