Browse Source

fix: spam RSS

Martin Passard 6 years ago
parent
commit
112ba0c9cb

+ 2 - 0
ressources/config/default.properties

@@ -58,3 +58,5 @@ RSS_new_article_check=3600
 #Mastodon
 Mastodon_access_token=""
 Mastodon_instance=toot.aquilenet.fr
+Mastodon_enable=true
+

+ 5 - 5
src/main/java/bot/irc/main/Main.java

@@ -49,11 +49,11 @@ public class Main {
 			RSSChecker rcheck = new RSSChecker(Config.getProperty("RSS_address"), BOTS);
 			RSS_DATA_REMAINDER = rcheck.getRemainder();
 			
-			
-			MASTODON = new MastodonBot();
-			BOTS.add(MASTODON);
-			MASTODON.start();
-			
+			if(Config.getPropertyAsBoolean("mastodon_enable")) {
+				MASTODON = new MastodonBot();
+				BOTS.add(MASTODON);
+				MASTODON.start();
+			}
 			
 			// Connect to the IRC server.
 			IRCBOT.connect(SERVER,PORT);

+ 1 - 0
src/main/java/bot/irc/rss/RSSChecker.java

@@ -201,6 +201,7 @@ public class RSSChecker implements Runnable {
 			RssData data = new RssData(nl.item(i));
 			remainder.push(data);
 		}
+		remainder.setReady(true);
 	}
 
 	public String getRssaddr() {

+ 21 - 2
src/main/java/bot/irc/rss/RssDataRemainder.java

@@ -15,6 +15,7 @@ public class RssDataRemainder extends Observable implements AffichableSurIRC{
 
 	public RssData[] data;
 	public static final int DEFAULT_SIZE=10;
+	private boolean ready = false;
 
 	public RssDataRemainder(int default_size) {
 		data = new RssData[default_size];
@@ -83,8 +84,10 @@ public class RssDataRemainder extends Observable implements AffichableSurIRC{
 	public void push(RssData newdata) {
 		movetoright();
 		this.data[0]=newdata;
-		this.setChanged();
-		this.notifyObservers(newdata);
+		if(ready) {
+			this.setChanged();
+			this.notifyObservers(newdata);
+		}
 	}
 	
 	/**
@@ -117,4 +120,20 @@ public class RssDataRemainder extends Observable implements AffichableSurIRC{
 		return res;
 	}
 
+	/**
+	 * @return the ready
+	 */
+	public boolean isReady() {
+		return ready;
+	}
+
+	/**
+	 * @param ready the ready to set
+	 */
+	public void setReady(boolean ready) {
+		this.ready = ready;
+	}
+	
+	
+
 }

+ 20 - 7
src/main/java/bot/irc/socials/MastodonBot.java

@@ -1,6 +1,7 @@
 package bot.irc.socials;
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Observable;
 import java.util.Observer;
@@ -14,6 +15,8 @@ import com.sys1yagi.mastodon4j.MastodonClient;
 import com.sys1yagi.mastodon4j.Parameter;
 import com.sys1yagi.mastodon4j.api.Handler;
 import com.sys1yagi.mastodon4j.api.Shutdownable;
+import com.sys1yagi.mastodon4j.api.entity.Account;
+import com.sys1yagi.mastodon4j.api.entity.Mention;
 import com.sys1yagi.mastodon4j.api.entity.Notification;
 import com.sys1yagi.mastodon4j.api.entity.Status;
 import com.sys1yagi.mastodon4j.api.exception.Mastodon4jRequestException;
@@ -33,7 +36,7 @@ import okio.BufferedSink;
 
 
 public class MastodonBot implements Bot, Runnable,Observer {
-	MastodonClient client;
+	private MastodonClient client;
 	private String accessToken=Config.getProperty("Mastodon_access_token");
 	private String BotName = "Mastodon";
 	private Streaming streaming;
@@ -59,7 +62,7 @@ public class MastodonBot implements Bot, Runnable,Observer {
 			System.out.println(arg0.getType()+" | "+arg0.getStatus().getContent()+" | "+arg0.getStatus().getVisibility());
 			if(arg0.getType().equals(Notification.Type.Mention.getValue()) && arg0.getStatus().getVisibility().equals("direct")) {
 				System.out.println(arg0.getAccount().getUserName() + " | "+ arg0.getAccount().getAcct());
-				sendMessage(arg0.getAccount().getAcct(), ""+arg0.getStatus().getId(), "testRep");
+				sendMessage(arg0.getAccount().getId()+"", ""+arg0.getStatus().getId(), "testRep");
 			}
 		}
 	};
@@ -176,11 +179,21 @@ public class MastodonBot implements Bot, Runnable,Observer {
 			@Override
 			public void writeTo(BufferedSink sink) throws IOException {
 				JSONObject jo = new JSONObject();
-				jo.put("status", sender+" "+message);
-				jo.put("in_reply_to_id", channel);
-				jo.put("visibility", "direct");
-				sink.writeUtf8(jo.toString());
-				sink.flush();
+				Response accSenderResponse = client.get("/api/v1/accounts/"+sender, null);
+				if(accSenderResponse.isSuccessful()){
+					twitter4j.JSONObject accSenderResponseObject = new twitter4j.JSONObject(accSenderResponse.body().string()); 
+					List<Mention> mlist = new ArrayList<>(1);
+					Mention m = new Mention(accSenderResponseObject.getString("url"), accSenderResponseObject.getString("username"),  accSenderResponseObject.getString("acct"), accSenderResponseObject.getLong("id"));
+					mlist.add(m);
+					jo.put("status", sender+" "+message);
+					jo.put("in_reply_to_id", channel);
+					jo.put("visibility", "direct");
+					JSONArray mentionsArray = new JSONArray();
+					jo.put("mentions", mlist);
+					System.out.println("reply: "+jo.toString());
+					sink.writeUtf8(jo.toString());
+					sink.flush();
+				}
 				
 			}