Helga is a powerful Server-Bot. It can controlled by normal chat messages you send to bot@helga.yourserver.com, helga.yourserver.com or generally something@helga.yourserver.com. You will automatically registered if you add Helga to your roster. Alternatively you can register via service discovery.
Helga builds an advanced shared group system around the constricted Openfire system. So everything that was possible with Openfire itself, is possible with Helga, too. A more detailed description is available in German language.
An complete manual to all commands and parameters is currently only available in German language. Also a first steps guide is available in German.
command | description |
|---|---|
help | Get a list of all supported commands. |
help [command] | Get help to an specific command. |
get | Reads out the current setting of an option. To change a setting, use the 'set'-command. |
latex | Complies given LaTeX Code to an GIF image, uploaded on the server. Helga provides two links:
See README for more details. |
message | Send a remind message to someone. This command can be used to send an message to yourself or someone else. You can manage your messages with 'show' and 'remove' commands. The number of messages per user is limited to 10. |
ping | Simple command which just answers "pong". Helpful to check if your internet connection is still available. |
presence | Gives the time when an user was last seen or his presence if the user is only at the moment. For security reasons is is only possible to query users who are registered with Helga and have set public setting to 'true'. Serveradmins get extended information about users operating system and client. |
remove | Active events can be removed. The 'remove'-Command removes an specific or all messages. You can only remove your own messages. You can get the MessageID by the 'show'-Command. |
set | Set an option to an new value. To read out the current setting use the 'get'-command. |
show | Prints a list of all your active messages. |
time | Sends current servertime |
welcome | Sends welcome-message again. |
command | description |
|---|---|
group add | This command is only for serveradmins. You can add one ore more users directly to a group. (without user demand) |
group ban | This command is only for moderators. The user will deleted from the group and append to a ban list, which prevents the user from rejoin to the group. The ban can be revoked with the 'revoke' command. This ban list of a group can be shown using the 'info' command. |
group create | Serveradmins can create new groups with this command. To change group settings later, use 'update'. Both commands are identically, except that 'create' can only create new groups and 'update' can only change existing groups. (security against typos) |
group decline | This command has two functions:
|
group delete | Serveradmins can delete existing groups. |
group find | This command lists all available groups of type OPEN and MODERATED. Groups of type CLOSED are only showed to serveradmins. An optional filter can be used to restrict the search. All groups are listed who have the given filter in their name. The wildcards * and ? are interpreted as usual. The filter is case sensitive. |
group info | A list of groups you are member of or information to an specific group. |
group invite | Inside of OPEN groups every member can send invitations. Inside of MODERATED or CLOSED group only moderators are allowed to do this. Make an user an join request, then all moderators will receive a message. By inviting this user a moderator can accept the request. In this case the user will not receive an invite message, but will added to the group directly. |
group join | With this command you can join a group. If the group is MODERATED, only a join request is made. This request can be accepted by an moderator with an 'invite' or decline with 'decline'. In CLOSED groups you can only join if you have been invited. Only serveradmins can 'join' other users. |
group kick | Groupmembers can leave the group with this command. Moderators can kick other users out of the group. |
group message | Send a message to all members of a group. Only for group members in case of the group is in ONLYGROUP mode. In all other cases this can only done by group moderators. |
group revoke | This command is only for moderators. It revokes a ban that was declared using the 'ban' command. |
group update | see 'create' |
command | description |
|---|---|
roster import | With this command you can add multiple contacts at once to your roster (contactlist). This only makes sence if you want to import many contacts, for example a complete contact list if you are doing a server relocation. |
roster export | This command does export your roster (contactlist) using the format described under 'import'. Contacts form shared groups where exported, too. Contacts that have a jabberID without a username (e.g. Transports as icq.jabber.rwth-aachen.de) where not exported. |
roster names | This command iterates through your complete roster and sets nicknames automatically. This could take some seconds, especially if vCard are not locally available and have to be requested from remote. |
command | description |
|---|---|
admin email | Serveradmins can send an email to all users of your server. |
admin message | Serveradmins can send a message to all registered users of your server. (really all users, not only available) |
| 2.22 -- August 18, 2008 |
|
2.21 -- April 8, 2008 |
|---|
|
2.20 -- March 13, 2008 |
|
2.11 -- March 4, 2008 |
|
2.1 -- February 21, 2008 |
|
2.02 -- November 18, 2007 |
|
2.01 -- November 2, 2007 |
|
This complete bundle contains: compiled jar-file, source code, JavaDoc files, some scripts and GPL license text.
You should read the configuration section in README file before using!
Do not use on productive systems, if you do not have an MySQL database!
If you have questions, improvements, etc. leave a comment on this document.
Martin Weusten (Coolcat)
currently nobody needs another license, so let us think about if the problem is there. ![]()
If somebody needs a translation of the complete command reference or other Helga related articles, just ask for it. But I think most things are self-explanatory, if not try Google Translate.
Hi,
I am trying to test out this bot but I cannot get it to install properly. I can get the plugin installed have created the properties. I see the database tables have been created by the plugin. However, when I try to add helga to my rosta I am told it is pending. The instructions on how to install and check/test is not so clear to me.
Is there anything I have missed? How do I check Helga is actually installed correctly and running? Do I need to create an actual jabber user called 'helga'?
Please advise.
Regards,
Mon
I am trying to test out this bot but I cannot get it to install properly.
You have checked requirements? (Openfire 3.3.2, MySQL database)
Do you find Helga on your plugins page? ( https://yourserver.com:9091/plugin-admin.jsp )
Do you see Helga-Config-Help-Page? ( https://yourserver.com:9091/plugins/helga/helga.jsp )
Any related error/warn/info messages? There should be like "Helga : start()" in 'info.log'.
I can get the plugin installed have created the properties.
You have only to create properties if you want to overwrite default settings. That should not be necessary just for testing.
>How do I check Helga is actually installed correctly and running?
For example send a message with "help" to 'bot@helga.yourserver.com'. You should get a list of all commands. It is not necessary to have Helga actually on your contact list.
Helga does only react to LOCAL users.
Do I need to create an actual jabber user called 'helga'?
No, it's a component. It does listen on 'everything@helga.yourserver.com', not as a normal user on 'helga@yourserver.com'.
Is there anything I have missed?
For testing it should be enough to copy it into your plugins directory.
If nothing works, try to restart the plugin.
Coolcat
I tried to put helga into my plugins directory. I can see the helga on my https://yourserver.com:9091/plugin-admin.jsp. But, there are so many errors, such as "IF".. bla..bla..bla.. my purpose just for testing.
Do i need to create bot@helga.yourserver.com ?
sosys
This is the error message :
java.sql.SQLException: Incorrect syntax near the keyword 'IF'.
at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:365)
at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2781)
at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2224)
at net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:628)
at net.sourceforge.jtds.jdbc.JtdsStatement.processResults(JtdsStatement.java:525)
at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQL(JtdsStatement.java:487)
at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.executeUpdate(JtdsPreparedState ment.java:421)
at org.jivesoftware.openfire.plugin.helga.HelgaUserManager.loadUsers(HelgaUserMana ger.java:518)
at org.jivesoftware.openfire.plugin.helga.HelgaUserManager.init(HelgaUserManager.j ava:153)
at org.jivesoftware.openfire.plugin.Helga.initialize(Helga.java:137)
at org.jivesoftware.openfire.component.InternalComponentManager.addComponent(Inter nalComponentManager.java:119)
at org.jivesoftware.openfire.plugin.Helga.initializePlugin(Helga.java:87)
at org.jivesoftware.openfire.container.PluginManager.loadPlugin(PluginManager.java :404)
at org.jivesoftware.openfire.container.PluginManager.access$200(PluginManager.java :46)
at org.jivesoftware.openfire.container.PluginManager$PluginMonitor.run(PluginManag er.java:916)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101 (ScheduledThreadPoolExecutor.java:98)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodi c(ScheduledThreadPoolExecutor.java:181)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Schedu ledThreadPoolExecutor.java:205)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java: 885)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:619)
java.sql.SQLException: Incorrect syntax near the keyword 'IF'.
at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:365)
at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2781)
at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2224)
at net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:628)
at net.sourceforge.jtds.jdbc.JtdsStatement.processResults(JtdsStatement.java:525)
at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQL(JtdsStatement.java:487)
at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.executeUpdate(JtdsPreparedState ment.java:421)
at org.jivesoftware.openfire.plugin.helga.HelgaEventManager.loadFromDB(HelgaEventM anager.java:369)
at org.jivesoftware.openfire.plugin.helga.HelgaEventManager.init(HelgaEventManager .java:111)
at org.jivesoftware.openfire.plugin.Helga.initialize(Helga.java:138)
at org.jivesoftware.openfire.component.InternalComponentManager.addComponent(Inter nalComponentManager.java:119)
at org.jivesoftware.openfire.plugin.Helga.initializePlugin(Helga.java:87)
at org.jivesoftware.openfire.container.PluginManager.loadPlugin(PluginManager.java :404)
at org.jivesoftware.openfire.container.PluginManager.access$200(PluginManager.java :46)
at org.jivesoftware.openfire.container.PluginManager$PluginMonitor.run(PluginManag er.java:916)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101 (ScheduledThreadPoolExecutor.java:98)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodi c(ScheduledThreadPoolExecutor.java:181)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Schedu ledThreadPoolExecutor.java:205)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java: 885)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:619)
org.xmpp.component.ComponentException: java.lang.NullPointerException
at org.jivesoftware.openfire.component.InternalComponentManager.addComponent(Inter nalComponentManager.java:144)
at org.jivesoftware.openfire.plugin.Helga.initializePlugin(Helga.java:87)
at org.jivesoftware.openfire.container.PluginManager.loadPlugin(PluginManager.java :404)
at org.jivesoftware.openfire.container.PluginManager.access$200(PluginManager.java :46)
at org.jivesoftware.openfire.container.PluginManager$PluginMonitor.run(PluginManag er.java:916)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101 (ScheduledThreadPoolExecutor.java:98)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodi c(ScheduledThreadPoolExecutor.java:181)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Schedu ledThreadPoolExecutor.java:205)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java: 885)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.NullPointerException
at org.jivesoftware.openfire.plugin.helga.HelgaEventManager.loadFromDB(HelgaEventM anager.java:465)
at org.jivesoftware.openfire.plugin.helga.HelgaEventManager.init(HelgaEventManager .java:111)
at org.jivesoftware.openfire.plugin.Helga.initialize(Helga.java:138)
at org.jivesoftware.openfire.component.InternalComponentManager.addComponent(Inter nalComponentManager.java:119)
... 13 more
Line=19 The content of element type "dwr" must match "(init?,allow?,signatures?)".
Do i need to create bot@helga.yourserver.com ?
No, you don't. It's just a virtual JID. Helga grips simply everthing that goes to *@helga.yourserver.com
In your error message I can see you don't use a MySQL-database. Please read system requirements:
your Openfire must be backed by a MySQL database
It should not be that hard to patch Helga, so it works with other databases. I'm not familiar with other databases, so I won't do it until I need it for myself. But for exactly such reasons Helga is open-source so, have fun to patch it yourself.
Hi Coolcat,
I have installed the helga successfully in my new openfire server. But, how to type the commands ? I have no idea.
Thanks
Any clue for changing to MS SQL server?
I only know MySQL, but SQL is a standard language for for databases. There should only be some datatypes which are not supported. I think BIGINT and BOOL are MySQL only, just substitute them with something else which works for you. E.g. you could replace BIGINT by String and BOOL by an INT which is 0 or 1. You will have to change it at every place where the database is accessed.
But, how to type the commands ? I have no idea.
Just register with Helga. This can be done in two ways:
Add the JID 'bot@helga.yourserver.com' to your contact list as it would be a normal contact.
Register with Helga using Service Discovery. Then the JID 'helga.yourserver.com' will be added to your contact list in the Agent/Transport section.
After that just write the commands as normal chat messages.
Hi Coolcat,
thanks for the reply. It runs okay on MySQL. But i have another question. I cant create group. It's said that im not the admin, but im log in as 'admin'.
Pls help.
benny,
Just read the documentation....
You should read the configuration section in README file before using!
Create a normal group with name "Jabber Admins" via Adminconsole and add yourself to this group. Only Members of this special group have admin rights for Helga. The group should be CLOSED, so call
group update -g "Jabber Admins" -t closed
After that you should update existing groups, so there are integrated into the Helga group system. Call this for each group that was created via adminconsole:
group update -g "Groupname"
There is another special group "New Users", just read configuration section in README.
Coolcat
Thanks for your kind reply. May i know any other bots/plugin that works like Alice bot?
Sosys-
Hi Coolcat,
Where is the file to connect to mysql database? I cant find it for hours.
Is it auto connected to the mysql ?
Thanks
Sosys~
Where do you store the list of answers such as :
Hi,
my name is Helga!
I'am the really stupid bot on this great Jabber-Server. You can control me with normal chat messages. Send me 'help' to get an commandlist or 'help command' for specific help.
I cant find it on the files.
Thanks
1. Sorry, I don't know Alice-Bot ![]()
2. Helga uses openfires database connection. During first start it creates some new tables with prefix "helga".
3. Helga uses i18n to support multiple languages:
helga/src/i18n/helga_i18n.properties (English)
helga/src/i18n/helga_i18n_de.properties (German)
If you want to implement new commands, take a look on that "Command" base class. For some simple usage examples take class "CommandMisc".
Hey Guys,
I have been trying to import Helga into Eclipse to look at and edit the code, But i have been having trouble with it regards missing class files, errors and library's. Has anybody done this and whats the best way of doing it.
i just tried to install helga on openfire 3.4.4 with sql-server backend. first problem is that you can not use the word "public" as a fieldname in table helgauser. you also can not use the same constraint twice on sql-server. somehow i created the tables but i see following errorlogs
at
org.jivesoftware.openfire.plugin.helga.HelgaEventManager.loadFromDB(HelgaEventMa nager.java:350)
at org.jivesoftware.openfire.plugin.helga.HelgaEventManager.init(HelgaEventManager .java:91)
at org.jivesoftware.openfire.plugin.Helga.initialize(Helga.java:137)
at org.jivesoftware.openfire.component.InternalComponentManager.addComponent(Inter nalComponentManager.java:123)
at org.jivesoftware.openfire.plugin.Helga.initializePlugin(Helga.java:85)
at org.jivesoftware.openfire.container.PluginManager.loadPlugin(PluginManager.java :447)
at org.jivesoftware.openfire.container.PluginManager.access$300(PluginManager.java :46)
at org.jivesoftware.openfire.container.PluginManager$PluginMonitor.run(PluginManag er.java:1013)
i'm no programmer but i would help to test/develop the bot for MS-Sql support
thx for testing ![]()
I changed column name form 'public' to 'presence' and renamed the constraints.
Please execute this SQL before trying the new version to be sure your database is "clean" again:
DROP TABLE helgaEvent;
DROP TABLE helgaMessage;
DROP TABLE helgaUser;
DROP TABLE helgaGroup;
DELETE FROM jiveVersion WHERE name='helga';
P.S. Currently there is only an upgrade file for MySQL, because I assume nobody else has tried Helga with an non-MySQL-db. If you need to upgrade, check /src/database/upgrade/3/helga_mysql.sql and do this manually for your database.
does not look that much better.
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodi c(Unknown Source)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknow n Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
2008.02.27 00:52:46 [org.jivesoftware.openfire.plugin.helga.HelgaEventManager.loadFromDB(HelgaEvent Manager.java:426)
]
java.sql.SQLException: ResultSet may only be accessed in a forward direction.
at net.sourceforge.jtds.jdbc.JtdsResultSet.checkScrollable(JtdsResultSet.java:316)
at net.sourceforge.jtds.jdbc.JtdsResultSet.first(JtdsResultSet.java:528)
at org.jivesoftware.openfire.plugin.helga.HelgaEventManager.loadFromDB(HelgaEventM anager.java:350)
at org.jivesoftware.openfire.plugin.helga.HelgaEventManager.init(HelgaEventManager .java:91)
at org.jivesoftware.openfire.plugin.Helga.initialize(Helga.java:137)
at org.jivesoftware.openfire.component.InternalComponentManager.addComponent(Inter nalComponentManager.java:123)
at org.jivesoftware.openfire.plugin.Helga.initializePlugin(Helga.java:85)
at org.jivesoftware.openfire.container.PluginManager.loadPlugin(PluginManager.java :447)
at org.jivesoftware.openfire.container.PluginManager.access$300(PluginManager.java :46)
at org.jivesoftware.openfire.container.PluginManager$PluginMonitor.run(PluginManag er.java:1013)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask$Sync.innerRunAndReset(Unknown Source)
at java.util.concurrent.FutureTask.runAndReset(Unknown Source)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101 (Unknown Source)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodi c(Unknown Source)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknow n Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
2008.02.27 00:52:46 [org.jivesoftware.openfire.plugin.Helga.initializePlugin(Helga.java:88)
]
org.xmpp.component.ComponentException: java.lang.NullPointerException
at org.jivesoftware.openfire.component.InternalComponentManager.addComponent(Inter nalComponentManager.java:148)
at org.jivesoftware.openfire.plugin.Helga.initializePlugin(Helga.java:85)
at org.jivesoftware.openfire.container.PluginManager.loadPlugin(PluginManager.java :447)
at org.jivesoftware.openfire.container.PluginManager.access$300(PluginManager.java :46)
at org.jivesoftware.openfire.container.PluginManager$PluginMonitor.run(PluginManag er.java:1013)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask$Sync.innerRunAndReset(Unknown Source)
at java.util.concurrent.FutureTask.runAndReset(Unknown Source)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101 (Unknown Source)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodi c(Unknown Source)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknow n Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.Nul
That's COOLcat Martin!
Everybody uses some other people's code. It's your idea that matters more, not just extra codes of yours. In fact, your plugin is much more than just a Precence or Search plugin. Therefore, I think you deserve to own the copyright. You could just give credit to the owner of the parts you copy and paste, like you did in Helga.java:
Also, you can release it under a compatible license like Apache License version 2.0.