diff --git a/resources/conf/hebdobot-sample.conf b/resources/conf/hebdobot-sample.conf index 3b057eb..07cb9a1 100644 --- a/resources/conf/hebdobot-sample.conf +++ b/resources/conf/hebdobot-sample.conf @@ -36,6 +36,7 @@ irc.channel=#april-test notify.at15.cron=0 45 11 ? * * notify.at15.irc=Revue hebdomadaire dans 15 minutes notify.at15.twitter=Revue hebdomadaire !april dans 15 minutes sur irc://irc.freenode.org/april ou http://apr1.org/8l +notify.at5.image=/srv/foo/photo-pizza.jpg #notify.at30.cron=0 30 11 ? * * #notify.at30.irc=Revue hebdomadaire dans 30 minutes diff --git a/src/org/april/hebdobot/cli/HebdobotConfigFile.java b/src/org/april/hebdobot/cli/HebdobotConfigFile.java index bc75886..b245b88 100644 --- a/src/org/april/hebdobot/cli/HebdobotConfigFile.java +++ b/src/org/april/hebdobot/cli/HebdobotConfigFile.java @@ -93,7 +93,18 @@ public class HebdobotConfigFile extends Properties String notifyIrcMessage = getNotifyIrcMessage(notifyName); String notifyTwitterMessage = getNotifyTwitterMessage(notifyName); - CronValue cronValue = new CronValue(notifyName, notifyCron, notifyIrcMessage, notifyTwitterMessage); + String notifyImageFileName = getNotifyImage(notifyName); + File notifyImageFile; + if (notifyImageFileName == null) + { + notifyImageFile = null; + } + else + { + notifyImageFile = new File(notifyImageFileName); + } + + CronValue cronValue = new CronValue(notifyName, notifyCron, notifyIrcMessage, notifyTwitterMessage, notifyImageFile); result.add(cronValue); } @@ -211,6 +222,23 @@ public class HebdobotConfigFile extends Properties return result; } + /** + * Gets the notify image file. + * + * @param notifyName + * the notify name + * @return the notify image file + */ + public String getNotifyImage(final String notifyName) + { + String result; + + result = getProperty("notify." + notifyName + ".image"); + + // + return result; + } + /** * Gets the notify irc message. * diff --git a/src/org/april/hebdobot/cron/CronListener.java b/src/org/april/hebdobot/cron/CronListener.java index 8ccbc00..86d240c 100644 --- a/src/org/april/hebdobot/cron/CronListener.java +++ b/src/org/april/hebdobot/cron/CronListener.java @@ -103,7 +103,7 @@ public class CronListener implements TriggerListener } else { - this.bot.notifyTwitter(this.cron.getTwitterMessage()); + this.bot.notifyTwitter(this.cron.getTwitterMessage(), this.cron.getImageFile()); } } diff --git a/src/org/april/hebdobot/cron/CronValue.java b/src/org/april/hebdobot/cron/CronValue.java index 2522fe0..a66f199 100644 --- a/src/org/april/hebdobot/cron/CronValue.java +++ b/src/org/april/hebdobot/cron/CronValue.java @@ -18,6 +18,8 @@ */ package org.april.hebdobot.cron; +import java.io.File; + /** * The Class CronValue. */ @@ -27,6 +29,7 @@ public class CronValue private String cron; private String ircMessage; private String twitterMessage; + private File imageFile; /** * Instantiates a new cron value. @@ -40,12 +43,13 @@ public class CronValue * @param twitterMessage * the twitter message */ - public CronValue(final String name, final String cron, final String ircMessage, final String twitterMessage) + public CronValue(final String name, final String cron, final String ircMessage, final String twitterMessage, final File imageFile) { this.name = name; this.cron = cron; this.ircMessage = ircMessage; this.twitterMessage = twitterMessage; + this.imageFile = imageFile; } public String getCron() @@ -53,6 +57,11 @@ public class CronValue return this.cron; } + public File getImageFile() + { + return this.imageFile; + } + public String getIrcMessage() { return this.ircMessage; @@ -73,6 +82,11 @@ public class CronValue this.cron = value; } + public void setImageFile(final File imageFile) + { + this.imageFile = imageFile; + } + public void setIrcMessage(final String ircMessage) { this.ircMessage = ircMessage; diff --git a/src/org/april/hebdobot/model/Hebdobot.java b/src/org/april/hebdobot/model/Hebdobot.java index 2c3817c..ded9108 100644 --- a/src/org/april/hebdobot/model/Hebdobot.java +++ b/src/org/april/hebdobot/model/Hebdobot.java @@ -226,6 +226,19 @@ public class Hebdobot extends PircBot * the message */ public void notifyTwitter(final String message) + { + notifyTwitter(message, null); + } + + /** + * Notify twitter. + * + * @param message + * the message + * @param imageFile + * the image file + */ + public void notifyTwitter(final String message, final File imageFile) { if ((this.twitterSettings.isValid()) && (StringUtils.isNotBlank(message))) { @@ -233,7 +246,8 @@ public class Hebdobot extends PircBot { TwitterClient twitter = new TwitterClient(this.twitterSettings.getConsumerKey(), this.twitterSettings.getConsumerSecret(), this.twitterSettings.getAccessToken(), this.twitterSettings.getAccessTokenSecret()); - twitter.tweet(message); + + twitter.tweet(message, imageFile); } catch (TwitterException exception) { @@ -605,6 +619,8 @@ public class Hebdobot extends PircBot { logger.info("!stats caught."); + notifyTwitter("yooooooooooooo", null); + // Display statistics. This feature has to not break // Hebdobot. try diff --git a/src/org/april/hebdobot/model/stats/ReviewStatsReporter.java b/src/org/april/hebdobot/model/stats/ReviewStatsReporter.java index 682b72c..5c6785b 100644 --- a/src/org/april/hebdobot/model/stats/ReviewStatsReporter.java +++ b/src/org/april/hebdobot/model/stats/ReviewStatsReporter.java @@ -106,14 +106,12 @@ public class ReviewStatsReporter IntegerStat stat = board.get(currentDuration); int total = board.getCountSum(); - /* logger.debug("1 {}", stat.getValue()); logger.debug("2 {}", board.getPositionOf(stat.getValue())); logger.debug("3 {}", board.getMinValue()); logger.debug("4 {}", board.getAverage()); logger.debug("5 {}", board.getMaxValue()); logger.debug("6 {}", stat.getCount()); - */ result = String.format( "Statistiques sur la durée de la revue (%d mn) : position %d (min=%d mn,moy=%.1f mn,max=%d mn), fréquence %d/%d (%.0f %%)", diff --git a/src/org/april/hebdobot/twitter/TwitterClient.java b/src/org/april/hebdobot/twitter/TwitterClient.java index 95201d7..696159a 100644 --- a/src/org/april/hebdobot/twitter/TwitterClient.java +++ b/src/org/april/hebdobot/twitter/TwitterClient.java @@ -25,10 +25,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import twitter4j.Status; +import twitter4j.StatusUpdate; import twitter4j.Twitter; import twitter4j.TwitterException; import twitter4j.TwitterFactory; -import twitter4j.UploadedMedia; import twitter4j.conf.ConfigurationBuilder; /** @@ -94,31 +94,24 @@ public class TwitterClient { Status result; - if (StringUtils.isBlank(message)) - { - logger.info("Empty message => tweet aborted."); - result = null; - } - else - { - ConfigurationBuilder config = new ConfigurationBuilder(); - config.setDebugEnabled(true); - config.setOAuthConsumerKey(this.consumerKey); - config.setOAuthConsumerSecret(this.consumerSecret); - config.setOAuthAccessToken(this.accessToken); - config.setOAuthAccessTokenSecret(this.accessTokenSecret); - - Twitter twitter = new TwitterFactory(config.build()).getInstance(); - - result = twitter.updateStatus(message); - logger.info("Tweet result [" + result.getText() + "]."); - } + result = tweet(message, null); // return result; } - public Status tweet(final String message, final File image) throws TwitterException + /** + * Tweet. + * + * @param message + * the message + * @param image + * the image + * @return the status + * @throws TwitterException + * the twitter exception + */ + public Status tweet(final String message, final File imageFile) throws TwitterException { Status result; @@ -137,18 +130,15 @@ public class TwitterClient config.setOAuthAccessTokenSecret(this.accessTokenSecret); Twitter twitter = new TwitterFactory(config.build()).getInstance(); - - result = twitter.updateStatus("Test 1"); - UploadedMedia um = twitter.uploadMedia(new File("/home/cpm/C/Hebdobot/TestConf/revue-hebdomadaire.png")); - result = twitter.updateStatus("Test 2"); - result = twitter.updateStatus("Test 3"); + StatusUpdate status = new StatusUpdate(message); + if ((imageFile != null) && (imageFile.exists())) + { + status.setMedia(imageFile); + } + result = twitter.updateStatus(status); logger.info("Tweet result [" + result.getText() + "]."); } - // if ((imageFile != null) && (imageFile.exists())) - // { - // twitter - // } // return result;