376
OmnomIRC Development / IRC Client Integration
« on: June 27, 2011, 07:03:03 am »
Hey, this is Sorunome here. Below you can find Nethams original post.
This are bindings for OmnomIRC to integrate into an IRC client, like, let's say, HexChat.
Ok, HexChat is the only one I've written it for, so far.
The binding is available at the repository, currently only the dev branch, so go over here: https://github.com/Sorunome/OmnomIRC2/blob/dev/omnombindings_hexchat.py
Netham45's stuff may still work, but maybe not, it is untested and heavily outdated as I changed the IRC bot a lot since. You can still check it out, though
Old code/bindings, by Netham45:
I've written some tools to allow OmnomIRC to integrate into your IRC clients.
Here's the mIRC code, just put this into the remote.ini section of your scripts:
And there is an XChat plugin attached. To use this, put it in %appdata%\X-Chat 2\ and restart XChat.
The file included only works on Windows X-Chat 2.
Here is the source code if someone wishes to compile it for Linux. It's a bit rushed, and not the neatest.
Edit: Updated mIRC script.
This are bindings for OmnomIRC to integrate into an IRC client, like, let's say, HexChat.
Ok, HexChat is the only one I've written it for, so far.
The binding is available at the repository, currently only the dev branch, so go over here: https://github.com/Sorunome/OmnomIRC2/blob/dev/omnombindings_hexchat.py
Netham45's stuff may still work, but maybe not, it is untested and heavily outdated as I changed the IRC bot a lot since. You can still check it out, though
Old code/bindings, by Netham45:
Spoiler For old:
I've written some tools to allow OmnomIRC to integrate into your IRC clients.
Here's the mIRC code, just put this into the remote.ini section of your scripts:
Spoiler For OmnomIRC only code:
Code: [Select]
ON ^*:TEXT:*:#:if ( $nick == OmnomIRC ) { echo $chan $iif($regsubex($readini($mircini,options,n4),/(^(.+?,){11}(.+?).*)/,\3) == 1,$timestamp,) $iif( $mid($1-,2,1) == $chr(35) , (4 $+ $chr(35) $+ ) $+ $mid($1-,4), (12O) $+ $mid($1-,7) ) | haltdef }
Spoiler For OmnomIRC & Saxjax code:
Code: [Select]
ON ^*:TEXT:*:#:{
var %timestamp $chr(20)
if ($regsubex($readini($mircini,options,n4),/(^(.+?,){11}(.+?).*)/,\3) == 1) { var %timestamp $timestamp }
if ( $nick == OmnomIRC ) { echo $chan %timestamp $iif( $mid($1-,2,1) == $chr(35) , (4 $+ $chr(35) $+ ) $+ $mid($1-,4), (12O) $+ $mid($1-,7) ) | haltdef }
if ( $nick == Saxjax ) { echo $chan %timestamp $regsubex( $1- ,\((.)\).\[(.+?)\] (.*),( $+ 5\1 $+ $+ ) <\2> \3) | haltdef }
}
And there is an XChat plugin attached. To use this, put it in %appdata%\X-Chat 2\ and restart XChat.
The file included only works on Windows X-Chat 2.
Here is the source code if someone wishes to compile it for Linux. It's a bit rushed, and not the neatest.
Code: [Select]
#include "xchat-plugin.h"
#include <string>
#include <cstdlib>
#include <regex>
#include <iostream>
#define PNAME "OmnomIRC Integration"
#define PDESC "Integrates OmnomIRC into X-Chat"
#define PVERSION "0.1"
static xchat_plugin *ph; /* plugin handle */
static int enable = 1;
static char omnomIRC_Name[] = "OmnomIRC";
using namespace std::tr1;
using namespace std;
//#define debug
static void dbgPrint(const char *message)
{
#ifdef debug
xchat_print(ph,message);
#endif
}
static void dbgPrint(string message)
{
#ifdef debug
xchat_print(ph,message.c_str());
#endif
}
static string getMessageType(string message)
{
if (regex_search(message.begin(),message.end(),regex("^.{0,3}\\((.)\\).{0,1}<(.+?)> (.*)")))
return "message";
if (regex_search(message.begin(),message.end(),regex("^.{0,4}\\((.)\\)([^:space:]{0,4})\\* ?(.*)")))
return "action";
return "";
}
static char* getNameColor(const char *name)
{
char *rcolors[] = {"19", "20", "22", "24", "25", "26", "27", "28", "29"};
int sum = 0, i = 0;
while (name[i] != '\x00')
sum += name[i++];
sum %= 9;
return rcolors[sum];
}
static int on_text_cb(char *word[], void *userdata)
{
if (strcmp(word[0],omnomIRC_Name))
{
string messageType = getMessageType(word[2]).c_str();
string type = word[0];
cmatch parts;
if (strcmp(messageType.c_str(),"message") == 0)
{
regex rx("^.{0,3}\\((.)\\).{0,1}<(.+?)> (.*)");
regex_search(word[2],parts,rx);
bool omnomirc = parts[1].str().c_str()[0] == 'O';
string name;
if (omnomirc)
{
name.append("\x03""(\x03""12O\x03"")\x03");
name.append(getNameColor(parts[2].str().c_str()));
}
else
{
name.append("\x03""(\x03""4#\x03"")\x03");
name.append(getNameColor(parts[2].str().c_str()));
}
name.append(parts[2]);
string msg;;
msg.append(parts[3]);
parts[2].str();
if (xchat_nickcmp(ph,xchat_get_info(ph,"nick"),parts[2].str().c_str()) == 0)
xchat_emit_print(ph, "Channel Message",name.c_str(), msg.c_str(), "@", NULL); //Don't highlight on local messages
else
xchat_emit_print(ph, type.c_str(), name.c_str(), msg.c_str(), "@", NULL);
return XCHAT_EAT_ALL;
}
else if (strcmp(messageType.c_str(),"action") == 0)
{
regex rx("^.{0,3}\\((.)\\)([^:space:]{0,4})\\* ?(.*)");
regex_search(word[2],parts,rx);
bool omnomirc = parts[1].str().c_str()[0] == 'O';
string name = "\x03""\x03";
if (omnomirc)
name.append("12O\x03""18 *");
else
name.append("04#\x03""18 *");
string message(parts[2]);
message.append(parts[3]);
xchat_emit_print(ph, type.c_str(), name.c_str(), message.c_str(), "@", NULL);
return XCHAT_EAT_ALL;
}
}
return XCHAT_EAT_NONE;
}
void xchat_plugin_get_info(char **name, char **desc, char **version, void **reserved)
{
*name = PNAME;
*desc = PDESC;
*version = PVERSION;
}
int xchat_plugin_init(xchat_plugin *plugin_handle,
char **plugin_name,
char **plugin_desc,
char **plugin_version,
char *arg)
{
/* we need to save this for use with any xchat_* functions */
ph = plugin_handle;
/* tell xchat our info */
*plugin_name = PNAME;
*plugin_desc = PDESC;
*plugin_version = PVERSION;
xchat_hook_print(ph, "Channel Message", XCHAT_PRI_NORM, on_text_cb, NULL);
xchat_hook_print(ph, "Channel Msg Hilight", XCHAT_PRI_NORM, on_text_cb, NULL);
xchat_print(ph, "OmnomIRC Integration loaded successfully!\n");
return 1;
}
Edit: Updated mIRC script.
