XMPP chat bot, with plugin architecture for implementing commands.
Minions runs as a bot in XMPP MUC chat rooms, and responds to commands. Commands are implemented as plugins, and may be loaded at runtime by copying the JAR file in the plugins directory.
| Folder | Contents | 
|---|---|
| minions-api | The interface to be implemented by Minion plugins. | 
| minions-core | The Minions chat bot. | 
| minions-contrib | Example Minion plugins. | 
First build Minions, from the project root run:
mvn clean install
Then create a YAML file with your configuration:
user:
    name: The user name for the account Minions should log in as.
    resource: The resource for login, minions-core by default.
    password: The password for the account.
service:
    server: Optional server if not the same as domain part of the username.
    port: Optional port if not the default 5222.
rooms:
    - jid: The JID of the room to join.
       nick: Nickname to use in the room, minions by default.
       password: Password for the room if required.
    - ...
admins:
    - barejid Bare JID of an admin user.
    - ...
plugins:
    refreshSeconds: Polling interval to check for new plugins, defaults to 10 seconds.
    prefix: The command prefix, defaults to !
    dir: The directory in which plugins are located, defaults to ~/.local/share/minions/plugins
An example can be found here
Run the Jar file passing your configuration file as an argument:
java -jar minions-core/target/minions-core-1.0-SNAPSHOT.jar minions.yml
Declare the Minions API as a dependency:
<dependency>
  <groupId>com.boothj5.minions</groupId>
  <artifactId>minions-api</artifactId>
  <version>1.0-SNAPSHOT</version>
</dependency>Using the echo-minion as an example,  extend the Minion class:
package com.boothj5.minions.echo;
import com.boothj5.minions.Minion;
import com.boothj5.minions.MinionsException;
import com.boothj5.minions.MinionsRoom;
public class EchoMinion extends Minion {
  @Override
  public String getHelp() {
    return "[message] - Echo something.";
  }
  @Override
  public void onMessage(MinionsRoom muc, String from, String message) throws MinionsException {
    String trimmed = message.trim();
    if ("".equals(trimmed)) {
      muc.sendMessage(from + " didn't say anything for me to echo");
    } else {
      muc.sendMessage(from + " said: " + trimmed);
    }
  }
}The plugin needs to be packaged as a fat jar (with dependencies) and must include two Manifest attributes:
MinionClass - Implementation of the Minion interface.
MinionCommand - The command name.
Example from echo-minion:
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-assembly-plugin</artifactId>
  <version>2.5.3</version>
  <configuration>
    <descriptorRefs>
      <descriptorRef>jar-with-dependencies</descriptorRef>
    </descriptorRefs>
    <archive>
      <manifest>
        <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
      </manifest>
      <manifestEntries>
        <MinionClass>com.boothj5.minions.echo.EchoMinion</MinionClass>
        <MinionCommand>echo</MinionCommand>
      </manifestEntries>
    </archive>
  </configuration>
  <executions>
    <execution>
      <id>assemble-all</id>
      <phase>package</phase>
      <goals>
        <goal>single</goal>
      </goals>
    </execution>
  </executions>
</plugin>Build the plugin:
mvn clean package
Copy the fat jar to the plugins directory, e.g. for the echo-minion:
cp target/echo-minion-1.0-SNAPSHOT-jar-with-dependencies.jar ~/.local/share/minions/plugins/.
The plugin will be available on the next refresh.
#Using Minions When the Minions bot is present in the chat room, use the following to list available commands, (assuming the default prefix '!'):
!help
Example output:
22:17 - boothj5: !help
22:17 - minions:
        !help - Show this help.
        !status [url] - Get the http status code for a URL.
        !digest - Calculate various digests of a given value. Send 'help' for more information.
        !calc [expression] - Calculate result of evaluating expression.
        !apples give|take - Give or take an apple from the minion.
        !bin to|from [value] - Convert integer to binary, or binary to integer.
        !chatter [message] - Send a message to chatterbot.
        !echo [message] - Echo something.
        !props - Show OS system properties.
To list Jars that are currently loaded:
!jars
To execute a command, enter the command with the prefix, and any args required e.g.:
18:49 - boothj5: !status http://www.profanity.im
18:49 - minions: Status http://www.profanity.im: 200 - OK