Updated to new SwingWorker.
More Java 8 optimizations.
This commit is contained in:
parent
9e601d45ef
commit
5c8951a0a8
18 changed files with 497 additions and 622 deletions
9
.idea/modules/mobibot.iml
generated
9
.idea/modules/mobibot.iml
generated
|
@ -1,27 +1,26 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module external.linked.project.id="mobibot" external.linked.project.path="$MODULE_DIR$/../.." external.root.project.path="$MODULE_DIR$/../.." external.system.id="GRADLE" external.system.module.group="" external.system.module.version="0.6.1-beta+008" type="JAVA_MODULE" version="4">
|
||||
<module external.linked.project.id="mobibot" external.linked.project.path="$MODULE_DIR$/../.." external.root.project.path="$MODULE_DIR$/../.." external.system.id="GRADLE" external.system.module.group="" external.system.module.version="0.7.0-beta+006" type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="false">
|
||||
<output url="file://$MODULE_DIR$/../../build/classes/main" />
|
||||
<output-test url="file://$MODULE_DIR$/../../build/classes/test" />
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$/../..">
|
||||
<sourceFolder url="file://$MODULE_DIR$/../../src/generated/java" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/../../src/main/java" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/../../src/test/java" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/../../src/annotationProcessor/resources" type="java-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/../../src/main/resources" type="java-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/../../src/test/resources" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/../../src/generated/java" isTestSource="false" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/../../.gradle" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/../../build" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" name="Gradle: log4j:log4j:1.2.17" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Gradle: net.thauvin.erik:semver:0.9.6-beta" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Gradle: commons-lang:commons-lang:2.4" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Gradle: commons-collections:commons-collections:3.2.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Gradle: org.apache.velocity:velocity:1.7" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Gradle: net.thauvin.erik:semver:0.9.5-beta" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.slf4j:slf4j-api:1.7.16" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.jdom:jdom2:2.0.6" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.rometools:rome-utils:1.6.1" level="project" />
|
||||
<orderEntry type="library" name="Gradle: net.sf.delicious-java:delicious:1.14" level="project" />
|
||||
|
@ -39,5 +38,7 @@
|
|||
<orderEntry type="library" name="Gradle: commons-logging:commons-logging:1.2" level="project" />
|
||||
<orderEntry type="library" name="Gradle: commons-codec:commons-codec:1.10" level="project" />
|
||||
<orderEntry type="library" name="Gradle: pircbot:pircbot:1.5.0" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.slf4j:slf4j-log4j12:1.7.21" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.slf4j:slf4j-api:1.7.21" level="project" />
|
||||
</component>
|
||||
</module>
|
|
@ -74,12 +74,12 @@ dependencies {
|
|||
compile 'org.twitter4j:twitter4j-core:4.0.4'
|
||||
compile 'net.sf.delicious-java:delicious:1.14'
|
||||
|
||||
compileOnly 'net.thauvin.erik:semver:0.9.5-beta'
|
||||
compileOnly 'net.thauvin.erik:semver:0.9.6-beta'
|
||||
}
|
||||
|
||||
annotationProcessor {
|
||||
project.version = getVersion(isRelease)
|
||||
library 'net.thauvin.erik:semver:0.9.5-beta'
|
||||
library 'net.thauvin.erik:semver:0.9.6-beta'
|
||||
processor 'net.thauvin.erik.semver.VersionProcessor'
|
||||
}
|
||||
|
||||
|
|
30
mobibot.ipr
30
mobibot.ipr
|
@ -70,6 +70,9 @@
|
|||
<option name="fileTypeOverride" value="3" />
|
||||
<option name="addBlankAfter" value="false" />
|
||||
</LanguageOptions>
|
||||
<LanguageOptions name="__TEMPLATE__">
|
||||
<option name="addBlankAfter" value="false" />
|
||||
</LanguageOptions>
|
||||
</component>
|
||||
<component name="DependencyValidationManager">
|
||||
<scope name="Source" pattern="file[mobibot]:src/generated/java//*||file[mobibot]:src/main/java//*" />
|
||||
|
@ -183,6 +186,12 @@
|
|||
</MavenGeneralSettings>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectCodeStyleSettingsManager">
|
||||
<option name="PER_PROJECT_SETTINGS">
|
||||
<value />
|
||||
</option>
|
||||
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Erik's Code Style" />
|
||||
</component>
|
||||
<component name="ProjectInspectionProfilesVisibleTreeState">
|
||||
<entry key="Project Default">
|
||||
<profile-state>
|
||||
|
@ -440,13 +449,13 @@
|
|||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/net.sourceforge.jweather/jweather/0.3.0/385ecc27f62f9d7c31de57cee468a8df58cb415e/jweather-0.3.0-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Gradle: net.thauvin.erik:semver:0.9.5-beta">
|
||||
<library name="Gradle: net.thauvin.erik:semver:0.9.6-beta">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/net/thauvin/erik/semver/0.9.5-beta/semver-0.9.5-beta.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/net/thauvin/erik/semver/0.9.6-beta/semver-0.9.6-beta.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/net/thauvin/erik/semver/0.9.5-beta/semver-0.9.5-beta-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/net/thauvin/erik/semver/0.9.6-beta/semver-0.9.6-beta-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Gradle: org.apache.velocity:velocity:1.7">
|
||||
|
@ -494,13 +503,22 @@
|
|||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.ostermiller/utils/1.07.00/586774ee4b8409b6835621bae2186d9b54d1c36a/utils-1.07.00-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Gradle: org.slf4j:slf4j-api:1.7.16">
|
||||
<library name="Gradle: org.slf4j:slf4j-api:1.7.21">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-api/1.7.16/3a6274f658487d5bfff9af3862beff6da1e7fd52/slf4j-api-1.7.16.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-api/1.7.21/139535a69a4239db087de9bab0bee568bf8e0b70/slf4j-api-1.7.21.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-api/1.7.16/974c5dd98f38036bd98b3a8f7bf00ee0d91adbdd/slf4j-api-1.7.16-sources.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-api/1.7.21/f285ac123f201fb4b028bac556928d7cf527ef48/slf4j-api-1.7.21-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Gradle: org.slf4j:slf4j-log4j12:1.7.21">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-log4j12/1.7.21/7238b064d1aba20da2ac03217d700d91e02460fa/slf4j-log4j12-1.7.21.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-log4j12/1.7.21/16b1333786ea93d16bff6fb0f5e3b82716d1b008/slf4j-log4j12-1.7.21-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Gradle: org.twitter4j:twitter4j-core:4.0.4">
|
||||
|
|
|
@ -3,6 +3,8 @@ server=irc.freenode.net
|
|||
#port=6667
|
||||
login=mobibot
|
||||
nick=mobibot
|
||||
|
||||
# NickServ password
|
||||
ident=changepwd
|
||||
#ident-nick=nickserv
|
||||
#ident-msg=IDENTIFY changepwd
|
||||
|
|
|
@ -13,8 +13,8 @@ import java.util.Date;
|
|||
* Annotation Processor</a>
|
||||
*/
|
||||
public final class ReleaseInfo {
|
||||
private final static String buildmeta = "005";
|
||||
private final static Date date = new Date(1467669995645L);
|
||||
private final static String buildmeta = "006";
|
||||
private final static Date date = new Date(1468655027549L);
|
||||
private final static int major = 0;
|
||||
private final static int minor = 7;
|
||||
private final static int patch = 0;
|
||||
|
@ -71,7 +71,7 @@ public final class ReleaseInfo {
|
|||
return Integer.toString(getMajor()) + '.'
|
||||
+ Integer.toString(getMinor()) + '.'
|
||||
+ Integer.toString(getPatch())
|
||||
+ getPreRelease() + getBuildMetadata();
|
||||
+ getPreRelease(true) + getBuildMetadata(true);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -101,14 +101,46 @@ public final class ReleaseInfo {
|
|||
return patch;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the pre-release version.
|
||||
*
|
||||
* @param isHyphen Prepend a hyphen, if <code>true</code>.
|
||||
* @return The pre-release version, if any.
|
||||
*/
|
||||
public static String getPreRelease(final boolean isHyphen) {
|
||||
if (prerelease.length() > 0) {
|
||||
if (isHyphen) {
|
||||
return '-' + prerelease;
|
||||
} else {
|
||||
return prerelease;
|
||||
}
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the pre-release version.
|
||||
*
|
||||
* @return The pre-release version, if any.
|
||||
*/
|
||||
public static String getPreRelease() {
|
||||
if (prerelease.length() > 0) {
|
||||
return '-' + prerelease;
|
||||
return getPreRelease(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the build metadata.
|
||||
*
|
||||
* @param isPlus Prepend a plus sign, if <code>true</code>.
|
||||
* @return The build metadata, if any.
|
||||
*/
|
||||
public static String getBuildMetadata(final boolean isPlus) {
|
||||
if (buildmeta.length() > 0) {
|
||||
if (isPlus) {
|
||||
return '+' + buildmeta;
|
||||
} else {
|
||||
return buildmeta;
|
||||
}
|
||||
}
|
||||
|
||||
return "";
|
||||
|
@ -120,10 +152,6 @@ public final class ReleaseInfo {
|
|||
* @return The build metadata, if any.
|
||||
*/
|
||||
public static String getBuildMetadata() {
|
||||
if (buildmeta.length() > 0) {
|
||||
return '+' + buildmeta;
|
||||
}
|
||||
|
||||
return "";
|
||||
return getBuildMetadata(false);
|
||||
}
|
||||
}
|
|
@ -33,6 +33,8 @@ package net.thauvin.erik.mobibot;
|
|||
|
||||
import del.icio.us.Delicious;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
/**
|
||||
* The class to handle posts to del.icio.us.
|
||||
*
|
||||
|
@ -66,9 +68,11 @@ class DeliciousPoster
|
|||
*/
|
||||
public final void addPost(final EntryLink entry)
|
||||
{
|
||||
final SwingWorker worker = new SwingWorker()
|
||||
final SwingWorker<Boolean, Void> worker = new SwingWorker<Boolean, Void>()
|
||||
{
|
||||
public Object construct()
|
||||
@Override
|
||||
protected Boolean doInBackground()
|
||||
throws Exception
|
||||
{
|
||||
return delicious.addPost(entry.getLink(),
|
||||
entry.getTitle(),
|
||||
|
@ -78,7 +82,7 @@ class DeliciousPoster
|
|||
}
|
||||
};
|
||||
|
||||
worker.start();
|
||||
worker.execute();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -102,15 +106,17 @@ class DeliciousPoster
|
|||
{
|
||||
final String link = entry.getLink();
|
||||
|
||||
final SwingWorker worker = new SwingWorker()
|
||||
final SwingWorker<Boolean, Void> worker = new SwingWorker<Boolean, Void>()
|
||||
{
|
||||
public Object construct()
|
||||
@Override
|
||||
protected Boolean doInBackground()
|
||||
throws Exception
|
||||
{
|
||||
return delicious.deletePost(link);
|
||||
}
|
||||
};
|
||||
|
||||
worker.start();
|
||||
worker.execute();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -121,9 +127,11 @@ class DeliciousPoster
|
|||
*/
|
||||
public final void updatePost(final String oldUrl, final EntryLink entry)
|
||||
{
|
||||
final SwingWorker worker = new SwingWorker()
|
||||
final SwingWorker<Boolean, Void> worker = new SwingWorker<Boolean, Void>()
|
||||
{
|
||||
public Object construct()
|
||||
@Override
|
||||
protected Boolean doInBackground()
|
||||
throws Exception
|
||||
{
|
||||
if (!oldUrl.equals(entry.getLink()))
|
||||
{
|
||||
|
@ -148,6 +156,6 @@ class DeliciousPoster
|
|||
}
|
||||
};
|
||||
|
||||
worker.start();
|
||||
worker.execute();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -87,21 +87,18 @@ final class EntriesMgr
|
|||
* @param file The file containing the backlogs.
|
||||
* @param history The history list.
|
||||
*
|
||||
* @throws FileNotFoundException If the file was not found.
|
||||
* @throws IOException If the file was not found or could not be read.
|
||||
* @throws FeedException If an error occurred while reading the feed.
|
||||
*/
|
||||
public static void loadBacklogs(final String file, final List<String> history)
|
||||
throws FileNotFoundException, FeedException
|
||||
throws IOException, FeedException
|
||||
{
|
||||
history.clear();
|
||||
|
||||
final SyndFeedInput input = new SyndFeedInput();
|
||||
|
||||
InputStreamReader reader = null;
|
||||
|
||||
try
|
||||
try (final InputStreamReader reader = new InputStreamReader(new FileInputStream(new File(file))))
|
||||
{
|
||||
reader = new InputStreamReader(new FileInputStream(new File(file)));
|
||||
|
||||
final SyndFeed feed = input.build(reader);
|
||||
|
||||
|
@ -114,20 +111,6 @@ final class EntriesMgr
|
|||
history.add(item.getTitle());
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (reader != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
reader.close();
|
||||
}
|
||||
catch (IOException ignore)
|
||||
{
|
||||
; // Do nothing
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -139,24 +122,21 @@ final class EntriesMgr
|
|||
*
|
||||
* @return The feed's last published date.
|
||||
*
|
||||
* @throws FileNotFoundException If the file was not found.
|
||||
* @throws IOException If the file was not found or could not be read.
|
||||
* @throws FeedException If an error occurred while reading the feed.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public static String loadEntries(final String file, final String channel, final List<EntryLink> entries)
|
||||
throws FileNotFoundException, FeedException
|
||||
throws IOException, FeedException
|
||||
{
|
||||
entries.clear();
|
||||
|
||||
final SyndFeedInput input = new SyndFeedInput();
|
||||
|
||||
String today;
|
||||
InputStreamReader reader = null;
|
||||
final String today;
|
||||
|
||||
try
|
||||
try (InputStreamReader reader = new InputStreamReader(new FileInputStream(new File(file))))
|
||||
{
|
||||
reader = new InputStreamReader(new FileInputStream(new File(file)));
|
||||
|
||||
final SyndFeed feed = input.build(reader);
|
||||
|
||||
today = Utils.ISO_SDF.format(feed.getPublishedDate());
|
||||
|
@ -196,20 +176,6 @@ final class EntriesMgr
|
|||
entries.add(entry);
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (reader != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
reader.close();
|
||||
}
|
||||
catch (IOException ignore)
|
||||
{
|
||||
; // Do nothing
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return today;
|
||||
}
|
||||
|
|
|
@ -122,13 +122,30 @@ public class Mobibot extends PircBot
|
|||
* The version strings.
|
||||
*/
|
||||
private static final String[] VERSION_STRS = {
|
||||
"Version: " + ReleaseInfo.getVersion() + " (" + Utils.ISO_SDF.format(ReleaseInfo.getBuildDate()) + ')',
|
||||
"Platform: " + System.getProperty("os.name") + " (" + System.getProperty("os.version") + ", " + System
|
||||
.getProperty("os.arch") + ", " + System.getProperty("user.country") + ')',
|
||||
"Runtime: " + System.getProperty("java.runtime.name") + " (build " + System
|
||||
.getProperty("java.runtime.version") + ')',
|
||||
"VM: " + System.getProperty("java.vm.name") + " (build " + System.getProperty("java.vm.version") + ", "
|
||||
+ System.getProperty("java.vm.info") + ')'
|
||||
"Version: "
|
||||
+ ReleaseInfo.getVersion()
|
||||
+ " ("
|
||||
+ Utils.ISO_SDF.format(ReleaseInfo.getBuildDate()) + ')',
|
||||
"Platform: "
|
||||
+ System.getProperty("os.name")
|
||||
+ " ("
|
||||
+ System.getProperty("os.version")
|
||||
+ ", "
|
||||
+ System.getProperty("os.arch")
|
||||
+ ", "
|
||||
+ System.getProperty("user.country") + ')',
|
||||
"Runtime: "
|
||||
+ System.getProperty("java.runtime.name")
|
||||
+ " (build "
|
||||
+ System.getProperty("java.runtime.version")
|
||||
+ ')',
|
||||
"VM: "
|
||||
+ System.getProperty("java.vm.name")
|
||||
+ " (build "
|
||||
+ System.getProperty("java.vm.version")
|
||||
+ ", "
|
||||
+ System.getProperty("java.vm.info")
|
||||
+ ')'
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -211,11 +228,6 @@ public class Mobibot extends PircBot
|
|||
*/
|
||||
private String feedURL = "";
|
||||
|
||||
/**
|
||||
* The NickServ ident password.
|
||||
*/
|
||||
private String ident = "";
|
||||
|
||||
/**
|
||||
* The ident message.
|
||||
*/
|
||||
|
@ -226,6 +238,11 @@ public class Mobibot extends PircBot
|
|||
*/
|
||||
private String identNick = "";
|
||||
|
||||
/**
|
||||
* The NickServ ident password.
|
||||
*/
|
||||
private String identPwd = "";
|
||||
|
||||
/**
|
||||
* Today's date.
|
||||
*/
|
||||
|
@ -246,7 +263,10 @@ public class Mobibot extends PircBot
|
|||
* @param logsDir The logs directory.
|
||||
*/
|
||||
@SuppressWarnings("WeakerAccess")
|
||||
public Mobibot(final String server, final int port, final String nickname, final String channel,
|
||||
public Mobibot(final String server,
|
||||
final int port,
|
||||
final String nickname,
|
||||
final String channel,
|
||||
final String logsDir)
|
||||
{
|
||||
System.getProperties().setProperty("sun.net.client.defaultConnectTimeout", String.valueOf(CONNECT_TIMEOUT));
|
||||
|
@ -281,7 +301,7 @@ public class Mobibot extends PircBot
|
|||
today = Utils.today();
|
||||
}
|
||||
}
|
||||
catch (FileNotFoundException ignore)
|
||||
catch (IOException ignore)
|
||||
{
|
||||
; // Do nothing.
|
||||
}
|
||||
|
@ -295,7 +315,7 @@ public class Mobibot extends PircBot
|
|||
{
|
||||
EntriesMgr.loadBacklogs(this.logsDir + EntriesMgr.NAV_XML, history);
|
||||
}
|
||||
catch (FileNotFoundException ignore)
|
||||
catch (IOException ignore)
|
||||
{
|
||||
; // Do nothing.
|
||||
}
|
||||
|
@ -329,12 +349,11 @@ public class Mobibot extends PircBot
|
|||
// Setup the command line options
|
||||
final Options options = new Options();
|
||||
options.addOption(Commands.HELP_ARG.substring(0, 1), Commands.HELP_ARG, false, "print this help message");
|
||||
options.addOption(Commands.DEBUG_ARG.substring(0, 1),
|
||||
Commands.DEBUG_ARG,
|
||||
false,
|
||||
options.addOption(Commands.DEBUG_ARG.substring(0, 1), Commands.DEBUG_ARG, false,
|
||||
"print debug & logging data directly to the console");
|
||||
options.addOption(Option.builder(Commands.PROPS_ARG.substring(0, 1)).hasArg().argName("file")
|
||||
.desc("use alternate properties file").longOpt(Commands.PROPS_ARG).build());
|
||||
options.addOption(Option.builder(
|
||||
Commands.PROPS_ARG.substring(0, 1)).hasArg().argName("file").desc("use " + "alternate properties file")
|
||||
.longOpt(Commands.PROPS_ARG).build());
|
||||
options.addOption(Commands.VERSION_ARG.substring(0, 1), Commands.VERSION_ARG, false, "print version info");
|
||||
|
||||
// Parse the command line
|
||||
|
@ -366,14 +385,11 @@ public class Mobibot extends PircBot
|
|||
}
|
||||
else
|
||||
{
|
||||
FileInputStream fis = null;
|
||||
final Properties p = new Properties();
|
||||
|
||||
try
|
||||
try (final FileInputStream fis = new FileInputStream(
|
||||
new File(line.getOptionValue(Commands.PROPS_ARG.charAt(0), "./mobibot.properties"))))
|
||||
{
|
||||
fis = new FileInputStream(new File(line.getOptionValue(Commands.PROPS_ARG.charAt(0),
|
||||
"./mobibot.properties")));
|
||||
|
||||
// Load the properties files
|
||||
p.load(fis);
|
||||
}
|
||||
|
@ -389,20 +405,6 @@ public class Mobibot extends PircBot
|
|||
e.printStackTrace(System.err);
|
||||
System.exit(1);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (fis != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
fis.close();
|
||||
}
|
||||
catch (IOException ignore)
|
||||
{
|
||||
; // Do nothing
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Get the main properties
|
||||
final String channel = p.getProperty("channel");
|
||||
|
@ -453,7 +455,7 @@ public class Mobibot extends PircBot
|
|||
final String ignoredNicks = p.getProperty("ignore", "");
|
||||
final String identNick = p.getProperty("ident-nick", "");
|
||||
final String identMsg = p.getProperty("ident-msg", "");
|
||||
final String ident = p.getProperty("ident", "");
|
||||
final String identPwd = p.getProperty("ident", "");
|
||||
final String tags = p.getProperty("tags", "");
|
||||
|
||||
// Get the del.icio.us properties
|
||||
|
@ -472,13 +474,7 @@ public class Mobibot extends PircBot
|
|||
bot.setLogin(login);
|
||||
bot.setVersion(weblogURL);
|
||||
bot.setMessageDelay(MESSAGE_DELAY);
|
||||
|
||||
// Set the ident password
|
||||
bot.setIdent(ident);
|
||||
|
||||
// Set the ident nick and message
|
||||
bot.setIdentNick(identNick);
|
||||
bot.setIdentMsg(identMsg);
|
||||
bot.setIdentity(identPwd, identNick, identMsg);
|
||||
|
||||
// Set the URLs
|
||||
bot.setWeblogUrl(weblogURL);
|
||||
|
@ -492,7 +488,9 @@ public class Mobibot extends PircBot
|
|||
}
|
||||
|
||||
// Load the modules properties
|
||||
MODULES.stream().filter(AbstractModule::hasProperties).forEach(module -> {
|
||||
MODULES.stream().filter(AbstractModule::hasProperties).forEach(
|
||||
module ->
|
||||
{
|
||||
for (final String s : module.getPropertyKeys())
|
||||
{
|
||||
module.setProperty(s, p.getProperty(s, ""));
|
||||
|
@ -540,111 +538,12 @@ public class Mobibot extends PircBot
|
|||
|
||||
bot.setVersion(INFO_STRS[0]);
|
||||
|
||||
// Identify with NickServ
|
||||
if (Utils.isValidString(ident))
|
||||
{
|
||||
bot.identify(ident);
|
||||
}
|
||||
|
||||
// Identify with a specified nick
|
||||
if (Utils.isValidString(identNick) && Utils.isValidString(identMsg))
|
||||
{
|
||||
bot.sendMessage(identNick, identMsg);
|
||||
}
|
||||
bot.identify();
|
||||
|
||||
bot.joinChannel(channel);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the ident password.
|
||||
*
|
||||
* @param pwd The password.
|
||||
*/
|
||||
private void setIdent(final String pwd)
|
||||
{
|
||||
ident = pwd;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the ident nickname.
|
||||
*
|
||||
* @param nick The nickname.
|
||||
*/
|
||||
private void setIdentNick(final String nick)
|
||||
{
|
||||
identNick = nick;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the ident message.
|
||||
*
|
||||
* @param msg The message.
|
||||
*/
|
||||
private void setIdentMsg(final String msg)
|
||||
{
|
||||
identMsg = msg;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the feed URL.
|
||||
*
|
||||
* @param feedURL The feed URL.
|
||||
*/
|
||||
private void setFeedURL(final String feedURL)
|
||||
{
|
||||
this.feedURL = feedURL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the del.icio.us authentication.
|
||||
*
|
||||
* @param username The del.icio.us user name.
|
||||
* @param password The del.icio.us password.
|
||||
*/
|
||||
private void setDeliciousAuth(final String username, final String password)
|
||||
{
|
||||
delicious = new DeliciousPoster(username, password, ircServer);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the default tags/categories.
|
||||
*
|
||||
* @param tags The tags.
|
||||
*/
|
||||
private void setTags(final String tags)
|
||||
{
|
||||
defaultTags = tags;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the Ignored nicks.
|
||||
*
|
||||
* @param nicks The nicks to ignore
|
||||
*/
|
||||
private void setIgnoredNicks(final String nicks)
|
||||
{
|
||||
if (Utils.isValidString(nicks))
|
||||
{
|
||||
final StringTokenizer st = new StringTokenizer(nicks, ",");
|
||||
|
||||
while (st.hasMoreTokens())
|
||||
{
|
||||
ignoredNicks.add(st.nextToken().trim().toLowerCase());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves the entries.
|
||||
*
|
||||
* @param isDayBackup Set the true if the daily backup file should also be created.
|
||||
*/
|
||||
private void saveEntries(final boolean isDayBackup)
|
||||
{
|
||||
EntriesMgr.saveEntries(this, entries, history, isDayBackup);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sleeps for the specified number of seconds.
|
||||
*
|
||||
|
@ -807,7 +706,8 @@ public class Mobibot extends PircBot
|
|||
|
||||
if (Character.isLetter(c))
|
||||
{
|
||||
buff.append('[').append(String.valueOf(c).toLowerCase()).append(String.valueOf(c).toUpperCase())
|
||||
buff.append('[')
|
||||
.append(String.valueOf(c).toLowerCase()).append(String.valueOf(c).toUpperCase())
|
||||
.append(']');
|
||||
}
|
||||
else
|
||||
|
@ -997,8 +897,8 @@ public class Mobibot extends PircBot
|
|||
commandsList.add(Commands.USERS_CMD);
|
||||
commandsList.add(Commands.VIEW_CMD);
|
||||
|
||||
MODULES.stream().filter(AbstractModule::isEnabled)
|
||||
.forEach(module -> commandsList.addAll(module.getCommands()));
|
||||
MODULES.stream().filter(AbstractModule::isEnabled).forEach(
|
||||
module -> commandsList.addAll(module.getCommands()));
|
||||
|
||||
if (tell.isEnabled())
|
||||
{
|
||||
|
@ -1032,13 +932,34 @@ public class Mobibot extends PircBot
|
|||
if (isOp(sender))
|
||||
{
|
||||
send(sender, "The op commands are:");
|
||||
send(sender,
|
||||
helpIndent(Commands.CYCLE_CMD + " " + Commands.ME_CMD + " " + Commands.MSG_CMD + " "
|
||||
+ Commands.SAY_CMD + " " + Commands.VERSION_CMD));
|
||||
send(sender, helpIndent(
|
||||
Commands.CYCLE_CMD + " "
|
||||
+ Commands.ME_CMD + " "
|
||||
+ Commands.MSG_CMD + " "
|
||||
+ Commands.SAY_CMD + " "
|
||||
+ Commands.VERSION_CMD));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Identifies the bot.
|
||||
*/
|
||||
private void identify()
|
||||
{
|
||||
// Identify with NickServ
|
||||
if (Utils.isValidString(identPwd))
|
||||
{
|
||||
identify(identPwd);
|
||||
}
|
||||
|
||||
// Identify with a specified nick
|
||||
if (Utils.isValidString(identNick) && Utils.isValidString(identMsg))
|
||||
{
|
||||
sendMessage(identNick, identMsg);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Processes the {@link net.thauvin.erik.mobibot.Commands#IGNORE_CMD} command.
|
||||
*
|
||||
|
@ -1213,6 +1134,19 @@ public class Mobibot extends PircBot
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected final void onAction(final String sender,
|
||||
final String login,
|
||||
final String hostname,
|
||||
final String target,
|
||||
final String action)
|
||||
{
|
||||
if (target.equals(channel))
|
||||
{
|
||||
storeRecap(sender, action, true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected final void onDisconnect()
|
||||
{
|
||||
|
@ -1260,21 +1194,22 @@ public class Mobibot extends PircBot
|
|||
|
||||
setVersion(INFO_STRS[0]);
|
||||
|
||||
if (Utils.isValidString(ident))
|
||||
{
|
||||
identify(ident);
|
||||
}
|
||||
|
||||
if (Utils.isValidString(identNick) && Utils.isValidString(identMsg))
|
||||
{
|
||||
sendMessage(identNick, identMsg);
|
||||
}
|
||||
identify();
|
||||
|
||||
joinChannel(channel);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected final void onMessage(final String channel, final String sender, final String login, final String hostname,
|
||||
protected void onJoin(final String channel, final String sender, final String login, final String hostname)
|
||||
{
|
||||
tell.send(sender);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected final void onMessage(final String channel,
|
||||
final String sender,
|
||||
final String login,
|
||||
final String hostname,
|
||||
final String message)
|
||||
{
|
||||
if (logger.isDebugEnabled())
|
||||
|
@ -1690,14 +1625,22 @@ public class Mobibot extends PircBot
|
|||
|
||||
if (!isCommand)
|
||||
{
|
||||
recap(sender, message, false);
|
||||
storeRecap(sender, message, false);
|
||||
}
|
||||
|
||||
tell.send(sender, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected final void onPrivateMessage(final String sender, final String login, final String hostname,
|
||||
protected void onNickChange(final String oldNick, final String login, final String hostname, final String newNick)
|
||||
{
|
||||
tell.send(newNick);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected final void onPrivateMessage(final String sender,
|
||||
final String login,
|
||||
final String hostname,
|
||||
final String message)
|
||||
{
|
||||
if (logger.isDebugEnabled())
|
||||
|
@ -1860,46 +1803,6 @@ public class Mobibot extends PircBot
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected final void onAction(final String sender, final String login, final String hostname, final String target,
|
||||
final String action)
|
||||
{
|
||||
if (target.equals(channel))
|
||||
{
|
||||
recap(sender, action, true);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Stores the last 10 public messages and actions.
|
||||
*
|
||||
* @param sender The nick of the person who sent the private message.
|
||||
* @param message The actual message sent.
|
||||
* @param isAction Set to true if the message is an action.
|
||||
*/
|
||||
private void recap(final String sender, final String message, final boolean isAction)
|
||||
{
|
||||
recap.add(Utils.UTC_SDF.format(Calendar.getInstance().getTime()) + " -> " + sender + (isAction ? " " : ": ")
|
||||
+ message);
|
||||
|
||||
if (recap.size() > MAX_RECAP)
|
||||
{
|
||||
recap.remove(0);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onJoin(final String channel, final String sender, final String login, final String hostname)
|
||||
{
|
||||
tell.send(sender);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onNickChange(final String oldNick, final String login, final String hostname, final String newNick)
|
||||
{
|
||||
tell.send(newNick);
|
||||
}
|
||||
|
||||
/**
|
||||
* Responds with the last 10 public messages.
|
||||
*
|
||||
|
@ -1914,6 +1817,16 @@ public class Mobibot extends PircBot
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves the entries.
|
||||
*
|
||||
* @param isDayBackup Set the true if the daily backup file should also be created.
|
||||
*/
|
||||
private void saveEntries(final boolean isDayBackup)
|
||||
{
|
||||
EntriesMgr.saveEntries(this, entries, history, isDayBackup);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends a private message or notice.
|
||||
*
|
||||
|
@ -1957,11 +1870,92 @@ public class Mobibot extends PircBot
|
|||
send(sender, message, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the del.icio.us authentication.
|
||||
*
|
||||
* @param username The del.icio.us user name.
|
||||
* @param password The del.icio.us password.
|
||||
*/
|
||||
private void setDeliciousAuth(final String username, final String password)
|
||||
{
|
||||
delicious = new DeliciousPoster(username, password, ircServer);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the feed URL.
|
||||
*
|
||||
* @param feedURL The feed URL.
|
||||
*/
|
||||
private void setFeedURL(final String feedURL)
|
||||
{
|
||||
this.feedURL = feedURL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the bot's identification.
|
||||
*
|
||||
* @param identPwd The password for NickServ, if any.
|
||||
* @param identNick The ident nick name.
|
||||
* @param identMsg The ident message.
|
||||
*/
|
||||
private void setIdentity(final String identPwd, final String identNick, final String identMsg)
|
||||
{
|
||||
this.identPwd = identPwd;
|
||||
this.identNick = identNick;
|
||||
this.identMsg = identMsg;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the Ignored nicks.
|
||||
*
|
||||
* @param nicks The nicks to ignore
|
||||
*/
|
||||
private void setIgnoredNicks(final String nicks)
|
||||
{
|
||||
if (Utils.isValidString(nicks))
|
||||
{
|
||||
final StringTokenizer st = new StringTokenizer(nicks, ",");
|
||||
|
||||
while (st.hasMoreTokens())
|
||||
{
|
||||
ignoredNicks.add(st.nextToken().trim().toLowerCase());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the default tags/categories.
|
||||
*
|
||||
* @param tags The tags.
|
||||
*/
|
||||
private void setTags(final String tags)
|
||||
{
|
||||
defaultTags = tags;
|
||||
}
|
||||
|
||||
/**
|
||||
* Stores the last 10 public messages and actions.
|
||||
*
|
||||
* @param sender The nick of the person who sent the private message.
|
||||
* @param message The actual message sent.
|
||||
* @param isAction Set to <code>true</code> if the message is an action.
|
||||
*/
|
||||
private void storeRecap(final String sender, final String message, final boolean isAction)
|
||||
{
|
||||
recap.add(Utils.UTC_SDF.format(Calendar.getInstance().getTime()) + " -> " + sender + (isAction ? " " : ": ")
|
||||
+ message);
|
||||
|
||||
if (recap.size() > MAX_RECAP)
|
||||
{
|
||||
recap.remove(0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Responds with the users on a channel.
|
||||
*
|
||||
* @param sender The nick of the person who sent the message.
|
||||
* @param isPrivate Set to true is the response should be send as a private message.
|
||||
* @param isPrivate Set to <code>true</code> if the response should be send as a private message.
|
||||
*/
|
||||
private void usersResponse(final String sender, final boolean isPrivate)
|
||||
{
|
||||
|
@ -1994,7 +1988,7 @@ public class Mobibot extends PircBot
|
|||
* Responds with the bot's version info.
|
||||
*
|
||||
* @param sender The nick of the person who sent the message.
|
||||
* @param isPrivate Set to true is the response should be send as a private message.
|
||||
* @param isPrivate Set to <code>true</code> if the response should be send as a private message.
|
||||
*/
|
||||
private void versionResponse(final String sender, final boolean isPrivate)
|
||||
{
|
||||
|
@ -2012,7 +2006,7 @@ public class Mobibot extends PircBot
|
|||
*
|
||||
* @param sender The nick of the person who sent the message.
|
||||
* @param args The view command arguments.
|
||||
* @param isPrivate Set to true is the response should be send as a private message.
|
||||
* @param isPrivate Set to <code>true</code> if the response should be send as a private message.
|
||||
*/
|
||||
private void viewResponse(final String sender, final String args, final boolean isPrivate)
|
||||
{
|
||||
|
@ -2093,7 +2087,8 @@ public class Mobibot extends PircBot
|
|||
if (sent > MAX_ENTRIES)
|
||||
{
|
||||
send(sender,
|
||||
"To view more, try: " + Utils.bold(getNick() + ": " + Commands.VIEW_CMD + ' ' + (i + 1)),
|
||||
"To view more, try: " + Utils
|
||||
.bold(getNick() + ": " + Commands.VIEW_CMD + ' ' + (i + 1)),
|
||||
isPrivate);
|
||||
|
||||
break;
|
||||
|
|
|
@ -1,164 +0,0 @@
|
|||
package net.thauvin.erik.mobibot;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
/**
|
||||
* This is the 3rd version of SwingWorker (also known as SwingWorker 3), an abstract class that you subclass to perform
|
||||
* GUI-related work in a dedicated thread. For instructions on and examples of using this class, see:
|
||||
* <p/>
|
||||
* http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html
|
||||
* <p/>
|
||||
* Note that the API changed slightly in the 3rd version:
|
||||
* You must now invoke start() on the SwingWorker after creating it.
|
||||
*/
|
||||
@SuppressWarnings("ALL")
|
||||
public abstract class SwingWorker
|
||||
{
|
||||
private ThreadVar threadVar;
|
||||
|
||||
private Object value; // see getValue(), setValue()
|
||||
|
||||
/**
|
||||
* Start a thread that will call the <code>construct</code> method and then exit.
|
||||
*/
|
||||
public SwingWorker()
|
||||
{
|
||||
final Runnable doFinished = new Runnable()
|
||||
{
|
||||
public void run()
|
||||
{
|
||||
finished();
|
||||
}
|
||||
};
|
||||
|
||||
Runnable doConstruct = new Runnable()
|
||||
{
|
||||
public void run()
|
||||
{
|
||||
try
|
||||
{
|
||||
setValue(construct());
|
||||
}
|
||||
finally
|
||||
{
|
||||
threadVar.clear();
|
||||
}
|
||||
|
||||
SwingUtilities.invokeLater(doFinished);
|
||||
}
|
||||
};
|
||||
|
||||
Thread t = new Thread(doConstruct);
|
||||
threadVar = new ThreadVar(t);
|
||||
}
|
||||
|
||||
/**
|
||||
* Called on the event dispatching thread (not on the worker thread) after the <code>construct</code> method has
|
||||
* returned.
|
||||
*/
|
||||
public void finished()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Compute the value to be returned by the <code>get</code> method.
|
||||
*
|
||||
* @return The computed value.
|
||||
*/
|
||||
public abstract Object construct();
|
||||
|
||||
/**
|
||||
* Return the value created by the <code>construct</code> method. Returns null if either the constructing thread or
|
||||
* the current thread was interrupted before a value was produced.
|
||||
*
|
||||
* @return the value created by the <code>construct</code> method
|
||||
*/
|
||||
public Object get()
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
Thread t = threadVar.get();
|
||||
if (t == null)
|
||||
{
|
||||
return getValue();
|
||||
}
|
||||
try
|
||||
{
|
||||
t.join();
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
{
|
||||
Thread.currentThread().interrupt(); // propagate
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the value produced by the worker thread, or null if it hasn't been constructed yet.
|
||||
*
|
||||
* @return The value.
|
||||
*/
|
||||
protected synchronized Object getValue()
|
||||
{
|
||||
return value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the value produced by worker thread
|
||||
*
|
||||
* @param x The object.
|
||||
*/
|
||||
private synchronized void setValue(Object x)
|
||||
{
|
||||
value = x;
|
||||
}
|
||||
|
||||
/**
|
||||
* A new method that interrupts the worker thread. Call this method to force the worker to stop what it's doing.
|
||||
*/
|
||||
public void interrupt()
|
||||
{
|
||||
Thread t = threadVar.get();
|
||||
if (t != null)
|
||||
{
|
||||
t.interrupt();
|
||||
}
|
||||
threadVar.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* Start the worker thread.
|
||||
*/
|
||||
public void start()
|
||||
{
|
||||
Thread t = threadVar.get();
|
||||
if (t != null)
|
||||
{
|
||||
t.start();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Class to maintain reference to current worker thread under separate synchronization control.
|
||||
*/
|
||||
private static class ThreadVar
|
||||
{
|
||||
private Thread thread;
|
||||
|
||||
ThreadVar(Thread t)
|
||||
{
|
||||
thread = t;
|
||||
}
|
||||
|
||||
synchronized void clear()
|
||||
{
|
||||
thread = null;
|
||||
}
|
||||
|
||||
synchronized Thread get()
|
||||
{
|
||||
return thread;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -58,7 +58,9 @@ public abstract class AbstractModule
|
|||
* @param args The command arguments.
|
||||
* @param isPrivate Set to <code>true</code> if the response should be sent as a private message.
|
||||
*/
|
||||
public abstract void commandResponse(final Mobibot bot, final String sender, final String args,
|
||||
public abstract void commandResponse(final Mobibot bot,
|
||||
final String sender,
|
||||
final String args,
|
||||
final boolean isPrivate);
|
||||
|
||||
/**
|
||||
|
@ -99,7 +101,9 @@ public abstract class AbstractModule
|
|||
* @param args The help arguments.
|
||||
* @param isPrivate Set to <code>true</code> if the response should be sent as a private message.
|
||||
*/
|
||||
public abstract void helpResponse(final Mobibot bot, final String sender, final String args,
|
||||
public abstract void helpResponse(final Mobibot bot,
|
||||
final String sender,
|
||||
final String args,
|
||||
final boolean isPrivate);
|
||||
|
||||
/**
|
||||
|
@ -122,6 +126,24 @@ public abstract class AbstractModule
|
|||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensures that all properties have values.
|
||||
*
|
||||
* @return <code>true</code> if the properties are valid, <code>false</code> otherwise.
|
||||
*/
|
||||
public boolean isValidProperties()
|
||||
{
|
||||
for (final String s : getPropertyKeys())
|
||||
{
|
||||
if (!Utils.isValidString(properties.get(s)))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets a property key and value.
|
||||
*
|
||||
|
|
|
@ -100,9 +100,7 @@ final public class CurrencyConverter extends AbstractModule
|
|||
}
|
||||
}
|
||||
|
||||
new Thread(() -> {
|
||||
run(bot, sender, args);
|
||||
}).start();
|
||||
new Thread(() -> run(bot, sender, args)).start();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -148,8 +146,9 @@ final public class CurrencyConverter extends AbstractModule
|
|||
for (final Object rawCube : cubes)
|
||||
{
|
||||
cube = (Element) rawCube;
|
||||
EXCHANGE_RATES
|
||||
.put(cube.getAttribute("currency").getValue(), cube.getAttribute("rate").getValue());
|
||||
EXCHANGE_RATES.put(
|
||||
cube.getAttribute("currency").getValue(),
|
||||
cube.getAttribute("rate").getValue());
|
||||
}
|
||||
|
||||
EXCHANGE_RATES.put("EUR", "1");
|
||||
|
@ -195,11 +194,15 @@ final public class CurrencyConverter extends AbstractModule
|
|||
final double to = Double.parseDouble(EXCHANGE_RATES.get(cmds[3].toUpperCase()));
|
||||
|
||||
bot.send(bot.getChannel(),
|
||||
NumberFormat.getCurrencyInstance(Locale.US).format(amt).substring(1) + ' '
|
||||
+
|
||||
cmds[1].toUpperCase() + " = " +
|
||||
NumberFormat.getCurrencyInstance(Locale.US).format((amt * to) / from)
|
||||
.substring(1) + ' ' + cmds[3].toUpperCase());
|
||||
NumberFormat.getCurrencyInstance(Locale.US).format(amt).substring(1)
|
||||
+ ' '
|
||||
+ cmds[1].toUpperCase()
|
||||
+ " = "
|
||||
+ NumberFormat.getCurrencyInstance(Locale.US)
|
||||
.format((amt * to) / from)
|
||||
.substring(1)
|
||||
+ ' '
|
||||
+ cmds[3].toUpperCase());
|
||||
}
|
||||
catch (NullPointerException ignored)
|
||||
{
|
||||
|
|
|
@ -88,9 +88,7 @@ final public class GoogleSearch extends AbstractModule
|
|||
{
|
||||
if (args.length() > 0)
|
||||
{
|
||||
new Thread(() -> {
|
||||
run(bot, sender, args);
|
||||
}).start();
|
||||
new Thread(() -> run(bot, sender, args)).start();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -113,13 +111,18 @@ final public class GoogleSearch extends AbstractModule
|
|||
final String q = URLEncoder.encode(query, "UTF-8");
|
||||
|
||||
final URL url =
|
||||
new URL("https://www.googleapis.com/customsearch/v1?key=" + properties.get(GOOGLE_API_KEY_PROP)
|
||||
+ "&cx=" + properties.get(GOOGLE_CSE_KEY_PROP) + "&q=" + q + "&filter=1&num=5&alt=json");
|
||||
new URL("https://www.googleapis.com/customsearch/v1?key="
|
||||
+ properties.get(GOOGLE_API_KEY_PROP)
|
||||
+ "&cx="
|
||||
+ properties.get(GOOGLE_CSE_KEY_PROP)
|
||||
+ "&q="
|
||||
+ q
|
||||
+ "&filter=1&num=5&alt=json");
|
||||
final URLConnection conn = url.openConnection();
|
||||
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
final BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
|
||||
|
||||
try (final BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())))
|
||||
{
|
||||
String line;
|
||||
while ((line = reader.readLine()) != null)
|
||||
{
|
||||
|
@ -135,13 +138,12 @@ final public class GoogleSearch extends AbstractModule
|
|||
bot.send(sender, Utils.unescapeXml(j.getString("title")));
|
||||
bot.send(sender, TAB_INDENT + Utils.green(j.getString("link")));
|
||||
}
|
||||
|
||||
reader.close();
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
bot.getLogger().warn("Unable to search in Google for: " + query, e);
|
||||
bot.send(sender, "An error has occurred: " + e.getMessage());
|
||||
bot.send(sender, "An error has occurred searching in Google: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -162,7 +164,6 @@ final public class GoogleSearch extends AbstractModule
|
|||
@Override
|
||||
public boolean isEnabled()
|
||||
{
|
||||
return Utils.isValidString(properties.get(GOOGLE_API_KEY_PROP)) && Utils
|
||||
.isValidString(properties.get(GOOGLE_CSE_KEY_PROP));
|
||||
return isValidProperties();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -72,9 +72,7 @@ final public class Joke extends AbstractModule
|
|||
@Override
|
||||
public void commandResponse(final Mobibot bot, final String sender, final String args, final boolean isPrivate)
|
||||
{
|
||||
new Thread(() -> {
|
||||
run(bot, sender);
|
||||
}).start();
|
||||
new Thread(() -> run(bot, sender)).start();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -95,8 +93,8 @@ final public class Joke extends AbstractModule
|
|||
final URLConnection conn = url.openConnection();
|
||||
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
final BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
|
||||
|
||||
try (final BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())))
|
||||
{
|
||||
String line;
|
||||
while ((line = reader.readLine()) != null)
|
||||
{
|
||||
|
@ -106,15 +104,16 @@ final public class Joke extends AbstractModule
|
|||
final JSONObject json = new JSONObject(sb.toString());
|
||||
|
||||
bot.send(bot.getChannel(),
|
||||
Colors.CYAN + json.getJSONObject("value").get("joke").toString().replaceAll("\\'", "'")
|
||||
.replaceAll("\\\"", "\"") + Colors.NORMAL);
|
||||
|
||||
reader.close();
|
||||
Colors.CYAN
|
||||
+ json.getJSONObject("value").get("joke").toString().replaceAll("\\'", "'")
|
||||
.replaceAll("\\\"", "\"")
|
||||
+ Colors.NORMAL);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
bot.getLogger().warn("Unable to retrieve random joke.", e);
|
||||
bot.send(sender, "An error has occurred: " + e.getMessage());
|
||||
bot.send(sender, "An error has occurred retrieving a random joke: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -70,9 +70,7 @@ final public class StockQuote extends AbstractModule
|
|||
{
|
||||
if (args.length() > 0)
|
||||
{
|
||||
new Thread(() -> {
|
||||
run(bot, sender, args);
|
||||
}).start();
|
||||
new Thread(() -> run(bot, sender, args)).start();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -160,7 +158,7 @@ final public class StockQuote extends AbstractModule
|
|||
catch (IOException e)
|
||||
{
|
||||
bot.getLogger().debug("Unable to retrieve stock quote for: " + symbol, e);
|
||||
bot.send(sender, "An error has occurred: " + e.getMessage());
|
||||
bot.send(sender, "An error has occurred retrieving a stock quote: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,7 +32,6 @@
|
|||
package net.thauvin.erik.mobibot.modules;
|
||||
|
||||
import net.thauvin.erik.mobibot.Mobibot;
|
||||
import net.thauvin.erik.mobibot.Utils;
|
||||
import twitter4j.Status;
|
||||
import twitter4j.TwitterFactory;
|
||||
import twitter4j.conf.ConfigurationBuilder;
|
||||
|
@ -76,9 +75,7 @@ final public class Twitter extends AbstractModule
|
|||
{
|
||||
if (isEnabled() && args.length() > 0)
|
||||
{
|
||||
new Thread(() -> {
|
||||
run(bot, sender, args);
|
||||
}).start();
|
||||
new Thread(() -> run(bot, sender, args)).start();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -103,15 +100,7 @@ final public class Twitter extends AbstractModule
|
|||
@Override
|
||||
public boolean isEnabled()
|
||||
{
|
||||
for (final String s : getPropertyKeys())
|
||||
{
|
||||
if (!Utils.isValidString(properties.get(s)))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
return isValidProperties();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -122,7 +111,8 @@ final public class Twitter extends AbstractModule
|
|||
try
|
||||
{
|
||||
final ConfigurationBuilder cb = new ConfigurationBuilder();
|
||||
cb.setDebugEnabled(true).setOAuthConsumerKey(properties.get(CONSUMER_KEY_PROP))
|
||||
cb.setDebugEnabled(true)
|
||||
.setOAuthConsumerKey(properties.get(CONSUMER_KEY_PROP))
|
||||
.setOAuthConsumerSecret(properties.get(CONSUMER_SECRET_PROP))
|
||||
.setOAuthAccessToken(properties.get(TOKEN_PROP))
|
||||
.setOAuthAccessTokenSecret(properties.get(TOKEN_SECRET_PROP));
|
||||
|
|
|
@ -75,9 +75,7 @@ final public class Weather extends AbstractModule
|
|||
@Override
|
||||
public void commandResponse(final Mobibot bot, final String sender, final String args, final boolean isPrivate)
|
||||
{
|
||||
new Thread(() -> {
|
||||
run(bot, sender, args.toUpperCase(), isPrivate);
|
||||
}).start();
|
||||
new Thread(() -> run(bot, sender, args.toUpperCase(), isPrivate)).start();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -110,8 +108,11 @@ final public class Weather extends AbstractModule
|
|||
bot.send(sender, "Station ID: " + metar.getStationID(), isPrivate);
|
||||
|
||||
bot.send(sender,
|
||||
"At: " + Utils.UTC_SDF.format(metar.getDate()) + " UTC (" + (
|
||||
((new Date()).getTime() - metar.getDate().getTime()) / 1000L / 60L) + " minutes ago)",
|
||||
"At: "
|
||||
+ Utils.UTC_SDF.format(metar.getDate())
|
||||
+ " UTC ("
|
||||
+ (((new Date()).getTime() - metar.getDate().getTime()) / 1000L / 60L)
|
||||
+ " minutes ago)",
|
||||
isPrivate);
|
||||
|
||||
result = metar.getWindSpeedInMPH();
|
||||
|
@ -119,8 +120,13 @@ final public class Weather extends AbstractModule
|
|||
if (result != null)
|
||||
{
|
||||
bot.send(sender,
|
||||
"Wind Speed: " + result + " mph, " + metar.getWindSpeedInKnots() + " knots, " + metar
|
||||
.getWindSpeedInMPS() + " m/s",
|
||||
"Wind Speed: "
|
||||
+ result
|
||||
+ " mph, "
|
||||
+ metar.getWindSpeedInKnots()
|
||||
+ " knots, "
|
||||
+ metar.getWindSpeedInMPS()
|
||||
+ " m/s",
|
||||
isPrivate);
|
||||
}
|
||||
|
||||
|
@ -129,7 +135,9 @@ final public class Weather extends AbstractModule
|
|||
if (result != null)
|
||||
{
|
||||
bot.send(sender,
|
||||
"Visibility: " + (metar.getVisibilityLessThan() ? "< " : "") + NUMBER_FORMAT.format(result)
|
||||
"Visibility: "
|
||||
+ (metar.getVisibilityLessThan() ? "< " : "")
|
||||
+ NUMBER_FORMAT.format(result)
|
||||
+ " mi, " + metar.getVisibilityInKilometers() + " km",
|
||||
isPrivate);
|
||||
}
|
||||
|
|
|
@ -197,6 +197,16 @@ final public class WorldTime extends AbstractModule
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void helpResponse(final Mobibot bot, final String sender, final String args, final boolean isPrivate)
|
||||
{
|
||||
bot.send(sender, "To display a country's current date/time:");
|
||||
bot.send(sender, bot.helpIndent(bot.getNick() + ": " + TIME_CMD) + " [<country code>]");
|
||||
|
||||
bot.send(sender, "For a listing of the supported countries:");
|
||||
bot.send(sender, bot.helpIndent(bot.getNick() + ": " + TIME_CMD));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the current Internet (beat) Time.
|
||||
*
|
||||
|
@ -237,16 +247,6 @@ final public class WorldTime extends AbstractModule
|
|||
return ('@' + String.valueOf(beats));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void helpResponse(final Mobibot bot, final String sender, final String args, final boolean isPrivate)
|
||||
{
|
||||
bot.send(sender, "To display a country's current date/time:");
|
||||
bot.send(sender, bot.helpIndent(bot.getNick() + ": " + TIME_CMD) + " [<country code>]");
|
||||
|
||||
bot.send(sender, "For a listing of the supported countries:");
|
||||
bot.send(sender, bot.helpIndent(bot.getNick() + ": " + TIME_CMD));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPrivateMsgEnabled()
|
||||
{
|
||||
|
|
|
@ -5,4 +5,4 @@ version.major=0
|
|||
version.minor=7
|
||||
version.patch=0
|
||||
version.prerelease=beta
|
||||
version.buildmeta=006
|
||||
version.buildmeta=007
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue