diff --git a/lib/commons-cli-1.0.jar b/lib/commons-cli-1.0.jar deleted file mode 100644 index 22a004e..0000000 Binary files a/lib/commons-cli-1.0.jar and /dev/null differ diff --git a/lib/commons-cli-1.1.jar b/lib/commons-cli-1.1.jar new file mode 100644 index 0000000..e633afb Binary files /dev/null and b/lib/commons-cli-1.1.jar differ diff --git a/lib/commons-httpclient-3.0-rc2.jar b/lib/commons-httpclient-3.0-rc2.jar deleted file mode 100644 index bea0a98..0000000 Binary files a/lib/commons-httpclient-3.0-rc2.jar and /dev/null differ diff --git a/lib/commons-httpclient-3.1.jar b/lib/commons-httpclient-3.1.jar new file mode 100644 index 0000000..7c59774 Binary files /dev/null and b/lib/commons-httpclient-3.1.jar differ diff --git a/lib/commons-logging-1.1.1.jar b/lib/commons-logging-1.1.1.jar new file mode 100644 index 0000000..8758a96 Binary files /dev/null and b/lib/commons-logging-1.1.1.jar differ diff --git a/lib/commons-logging.jar b/lib/commons-logging.jar deleted file mode 100644 index b73a80f..0000000 Binary files a/lib/commons-logging.jar and /dev/null differ diff --git a/lib/delicious-1.12.jar b/lib/delicious-1.12.jar deleted file mode 100644 index 803449d..0000000 Binary files a/lib/delicious-1.12.jar and /dev/null differ diff --git a/lib/delicious-1.14.jar b/lib/delicious-1.14.jar new file mode 100644 index 0000000..bf441fa Binary files /dev/null and b/lib/delicious-1.14.jar differ diff --git a/lib/jdom-1.0.jar b/lib/jdom-1.0.jar deleted file mode 100644 index 288e64c..0000000 Binary files a/lib/jdom-1.0.jar and /dev/null differ diff --git a/lib/jdom-1.1.jar b/lib/jdom-1.1.jar new file mode 100644 index 0000000..97c85f5 Binary files /dev/null and b/lib/jdom-1.1.jar differ diff --git a/lib/twitter4j-1.0.4.jar b/lib/twitter4j-1.0.4.jar new file mode 100644 index 0000000..54d365e Binary files /dev/null and b/lib/twitter4j-1.0.4.jar differ diff --git a/licenses/Apache LICENSE.txt b/licenses/Apache LICENSE.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/licenses/Apache LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/licenses/Twitter4J LICENSE.txt b/licenses/Twitter4J LICENSE.txt new file mode 100644 index 0000000..c5669d9 --- /dev/null +++ b/licenses/Twitter4J LICENSE.txt @@ -0,0 +1,24 @@ +Copyright (c) 2007-2008, Yusuke Yamamoto +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the Yusuke Yamamoto nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY Yusuke Yamamoto ``AS IS'' AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL Yusuke Yamamoto BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/mobibot.iws b/mobibot.iws index ffe1fdb..c229c8f 100644 --- a/mobibot.iws +++ b/mobibot.iws @@ -30,24 +30,16 @@ - - - - - - - - - + + + + + + + + - - - - - - - - + @@ -375,6 +367,24 @@ diff --git a/src/net/thauvin/erik/mobibot/Mobibot.java b/src/net/thauvin/erik/mobibot/Mobibot.java index 2190f0f..2160aa8 100644 --- a/src/net/thauvin/erik/mobibot/Mobibot.java +++ b/src/net/thauvin/erik/mobibot/Mobibot.java @@ -190,6 +190,11 @@ public class Mobibot extends PircBot * The Jaiku command. */ private static final String JAIKU_CMD = "jaiku"; + + /** + * The Twitter command. + */ + private static final String TWITTER_CMD = "twitter"; /** * The math command. */ @@ -447,6 +452,21 @@ public class Mobibot extends PircBot */ private String _jaikuUser = ""; + /** + * The Twitter password. + */ + private String _twitterPwd = ""; + + /** + * The Twitter user. + */ + private String _twitterUser = ""; + + /** + * The Twitter client id/source. + */ + private String _twitterSrc = ""; + /** * The history/backlogs array. */ @@ -715,6 +735,11 @@ public class Mobibot extends PircBot final String jname = p.getProperty("jaiku-user"); final String jkey = p.getProperty("jaiku-key"); + // Get the Twitter properties + final String tname = p.getProperty("twitter-user"); + final String tpwd = p.getProperty("twitter-pwd"); + final String tsrc = p.getProperty("twitter-src", ""); + // Create the bot final Mobibot bot = new Mobibot(server, port, channel, logsDir); @@ -753,6 +778,12 @@ public class Mobibot extends PircBot bot.setJaikuAuth(jname, jkey); } + if (isValidString(tname) && isValidString(tpwd)) + { + // Set the Twitter authentication + bot.setTwitterAuth(tname, tpwd, tsrc); + } + // Set the tags bot.setTags(tags); @@ -934,6 +965,11 @@ public class Mobibot extends PircBot send(sender, "To post to Jaiku:"); send(sender, DOUBLE_INDENT + bold(getNick() + ": " + JAIKU_CMD + " ")); } + else if (lcTopic.endsWith(TWITTER_CMD)) + { + send(sender, "To post to Twitter:"); + send(sender, DOUBLE_INDENT + bold(getNick() + ": " + TWITTER_CMD + " ")); + } else if (lcTopic.endsWith(RECAP_CMD)) { send(sender, "To list the last 10 public channel messages:"); @@ -1054,7 +1090,7 @@ public class Mobibot extends PircBot send(sender, DOUBLE_INDENT + bold(SPELL_CMD + ' ' + STOCK_CMD + ' ' + HELP_TAGS_KEYWORD + ' ' + TIME_CMD + ' ' + USERS_CMD + ' ' + VIEW_CMD)); - send(sender, DOUBLE_INDENT + bold(JAIKU_CMD + ' ' + WEATHER_CMD)); + send(sender, DOUBLE_INDENT + bold(JAIKU_CMD + ' ' + TWITTER_CMD + ' ' + WEATHER_CMD)); if (isOp(sender)) { @@ -1391,6 +1427,10 @@ public class Mobibot extends PircBot { jaikuResponse(sender, args); } + else if (cmd.startsWith(TWITTER_CMD)) + { + twitterResponse(sender, args); + } else if (cmd.startsWith(SPELL_CMD)) { spellResponse(sender, args); @@ -2404,6 +2444,31 @@ public class Mobibot extends PircBot } } + /** + * Posts a message to Twitter. + * + * @param sender The sender's nick. + * @param message The message. + */ + private void twitterResponse(String sender, String message) + { + if (isValidString(_twitterPwd) && isValidString(_twitterUser)) + { + if (message.length() > 0) + { + new Thread(new Twitter(this, sender, _twitterUser, _twitterPwd, _twitterSrc, message)).start(); + } + else + { + helpResponse(sender, TWITTER_CMD); + } + } + else + { + send(sender, "The Twitter posting facility is disabled."); + } + } + /** * Responds with the bot's information. * @@ -2441,12 +2506,8 @@ public class Mobibot extends PircBot */ private boolean isIgnoredNick(String nick) { - if (isValidString(nick)) - { - return _ignoredNicks.contains(nick.toLowerCase()); - } + return isValidString(nick) && _ignoredNicks.contains(nick.toLowerCase()); - return false; } /** @@ -2893,6 +2954,20 @@ public class Mobibot extends PircBot _jaikuUser = user; } + /** + * Sets the Twitter user and password.. + * + * @param user The Twitter user. + * @param key The Twitter password. + * @param source The Twitter source. + */ + private void setTwitterAuth(String user, String key, String source) + { + _twitterPwd = key; + _twitterUser = user; + _twitterSrc = source; + } + /** * Sets the ident password. * diff --git a/src/net/thauvin/erik/mobibot/ReleaseInfo.java b/src/net/thauvin/erik/mobibot/ReleaseInfo.java index bb75834..4d33a81 100644 --- a/src/net/thauvin/erik/mobibot/ReleaseInfo.java +++ b/src/net/thauvin/erik/mobibot/ReleaseInfo.java @@ -1,5 +1,5 @@ /* Created by JReleaseInfo AntTask from Open Source Competence Group */ -/* Creation date Thu Oct 11 18:41:48 PDT 2007 */ +/* Creation date Wed Sep 10 20:04:51 PDT 2008 */ package net.thauvin.erik.mobibot; import java.util.Date; @@ -20,21 +20,21 @@ public class ReleaseInfo { } - /** buildDate (set during build process to 1192153308645L). */ - private static final Date buildDate = new Date(1192153308645L); + /** buildDate (set during build process to 1221102291797L). */ + private static final Date buildDate = new Date(1221102291797L); /** - * Get buildDate (set during build process to Thu Oct 11 18:41:48 PDT 2007). + * Get buildDate (set during build process to Wed Sep 10 20:04:51 PDT 2008). * @return Date buildDate */ public static Date getBuildDate() { return buildDate; } /** - * Get buildNumber (set during build process to 0). + * Get buildNumber (set during build process to 3). * @return int buildNumber */ - public static int getBuildNumber() { return 0; } + public static int getBuildNumber() { return 3; } /** project (set during build process to "mobibot"). */ diff --git a/src/net/thauvin/erik/mobibot/Twitter.java b/src/net/thauvin/erik/mobibot/Twitter.java new file mode 100644 index 0000000..588bd50 --- /dev/null +++ b/src/net/thauvin/erik/mobibot/Twitter.java @@ -0,0 +1,93 @@ +/* + * @(#)Jaiku.java + * + * Copyright (C) 2007 Erik C. Thauvin + * All rights reserved. + * + * $Id$ + * + */ +package net.thauvin.erik.mobibot; + +/** + * Inserts presence information into Twitter. + * + * @author Erik C. Thauvin + * @version $Revision$, $Date$ + * @created Sept 10, 2008 + * @since 1.0 + */ +public class Twitter implements Runnable +{ + /** + * The bot. + */ + private final Mobibot _bot; + + /** + * The Twitter API password. + */ + private final String _pwd; + + /** + * The Twitter user. + */ + private final String _user; + + /** + * The Twitter message. + */ + private final String _message; + + /** + * The Twitter source. + */ + private final String _source; + + /** + * The nick of the person who sent the message. + */ + private final String _sender; + + /** + * Creates a new Twitter object. + * + * @param bot The bot. + * @param sender The nick of the person who sent the message. + * @param user The Twitter user. + * @param password The Twitter password. + * @param source The Twitter client id/source. + * @param message The Twitter message. + */ + public Twitter(Mobibot bot, String sender, String user, String password, String source, String message) + { + _bot = bot; + _user = user; + _pwd = password; + _source = source; + _message = message; + _sender = sender; + } + + public final void run() + { + try + { + twitter4j.Twitter twitter = new twitter4j.Twitter(_user, _pwd); + + if (Mobibot.isValidString(_source)) + { + twitter.setSource(_source); + } + + twitter.update(_message + " (" + _sender + ')'); + + _bot.send(_sender, "You message was posted to http://twitter.com/" + _user); + } + catch (Exception e) + { + _bot.getLogger().warn("Unable to post to Twitter: " + _message, e); + _bot.send(_sender, "An error has occurred: " + e.getMessage()); + } + } +} \ No newline at end of file diff --git a/website/index.html b/website/index.html index cebb98e..fcbaff2 100644 --- a/website/index.html +++ b/website/index.html @@ -22,9 +22,11 @@
  • Google Tag Library
  • JWeather
  • MathEvaluator
  • -
  • Rome
  • +
  • Rome
  • +
  • Apache XML-RPC (for Jaiku)
  • +
  • Twitter4J
  • -

    mobibot was written by Erik C. Thauvin as a replacement for the channel's original ChumpBot.

    +

    mobibot was written by Erik C. Thauvin as a replacement for the channel's original ChumpBot.

    Features

    mobibot's main functionality is to capture URLs posted on the channel. The URLs are automatically gathered into a publishable RSS feed.

    Other features include:

    @@ -41,9 +43,10 @@
  • Displaying the time in various time zones
  • Listing the users on the channel
  • Displaying weather information
  • +
  • Posting to Jaiku's #mobitopia channel
  • Some of the internal features include RSS feed backlogs, rolling logs, debugging toggle and much more.

    -

    If you have any feature suggestions, please post them to the mobibot wiki.

    +

    If you have any feature suggestions, please post them to the mobibot wiki.

    Using mobibot

    To use mobibot, simply join #mobitopia on irc.freenode.net and type:

    mobibot: help