Author Topic: IRC Client Integration  (Read 39114 times)

0 Members and 1 Guest are viewing this topic.

Offline Netham45

  • LV11 Super Veteran (Next: 3000)
  • ***********
  • Posts: 2103
  • Rating: +213/-4
  • *explodes*
    • View Profile
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:
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. >:D

« Last Edit: February 26, 2015, 01:37:46 pm by Sorunome »
Omnimaga Admin

Offline Munchor

  • LV13 Extreme Addict (Next: 9001)
  • *************
  • Posts: 6199
  • Rating: +295/-121
  • Code Recycler
    • View Profile
Re: IRC Client Integration
« Reply #1 on: June 27, 2011, 07:05:43 am »
And what does this exactly do? Can you end a screenshot of how XChat/mIRC look like when this is installed?

Offline Netham45

  • LV11 Super Veteran (Next: 3000)
  • ***********
  • Posts: 2103
  • Rating: +213/-4
  • *explodes*
    • View Profile
Re: IRC Client Integration
« Reply #2 on: June 27, 2011, 07:06:30 am »
I have one attached to the first post in the thread.

I also just put the source to the x-chat plugin in there.

Right now, it just manipulates the text to be easier to read. I want to get userlist integration too, but I'm not sure I can manipulate those in X-Chat and mIRC.
« Last Edit: June 27, 2011, 07:07:44 am by Netham45 »
Omnimaga Admin

Offline Munchor

  • LV13 Extreme Addict (Next: 9001)
  • *************
  • Posts: 6199
  • Rating: +295/-121
  • Code Recycler
    • View Profile
Re: IRC Client Integration
« Reply #3 on: June 27, 2011, 07:08:00 am »
I have one attached to the first post in the thread.

I also just put the source to the x-chat plugin in there.

Right now, it just manipulates the text to be easier to read. I want to get userlist integration too, but I'm not sure I can manipulate those in X-Chat and mIRC.

You hadn't attached it when I posted, but I see now, thanks.

Offline Netham45

  • LV11 Super Veteran (Next: 3000)
  • ***********
  • Posts: 2103
  • Rating: +213/-4
  • *explodes*
    • View Profile
Re: IRC Client Integration
« Reply #4 on: June 27, 2011, 07:11:22 am »
You hadn't attached it when I posted, but I see now, thanks.

Psh, I had posted it a good 5 seconds before you posted your message.

Also, I just realized that the X-Chat one doesn't care what your colored nick preferences are, it'll color 'em anyways. I'm not sure if I can get at the config to check it, X-Chat's API is lacking.
Omnimaga Admin

Offline Eeems

  • Mr. Dictator
  • Administrator
  • LV13 Extreme Addict (Next: 9001)
  • *************
  • Posts: 6268
  • Rating: +318/-36
  • little oof
    • View Profile
    • Eeems
Re: IRC Client Integration
« Reply #5 on: June 27, 2011, 01:16:50 pm »
Chatzilla next? :)

looks great :)
/e

Offline XVicarious

  • LV6 Super Member (Next: 500)
  • ******
  • Posts: 485
  • Rating: +45/-28
  • I F**king Love Twisty Puzzles
    • View Profile
    • XVicarious
Re: IRC Client Integration
« Reply #6 on: June 27, 2011, 01:49:23 pm »
I get this error when I try to use the plugin:
Code: [Select]
No xchat_plugin_init symbol; is this really an xchat plugin?

Offline Netham45

  • LV11 Super Veteran (Next: 3000)
  • ***********
  • Posts: 2103
  • Rating: +213/-4
  • *explodes*
    • View Profile
Re: IRC Client Integration
« Reply #7 on: June 27, 2011, 01:50:07 pm »
blarg. Lemme upload a fixed one, I didn't set the export defines for the release build.

EDIT: Uploaded to first post. I tested this one, too!
« Last Edit: June 27, 2011, 02:00:56 pm by Netham45 »
Omnimaga Admin

Offline DJ Omnimaga

  • Clacualters are teh gr33t
  • CoT Emeritus
  • LV15 Omnimagician (Next: --)
  • *
  • Posts: 55943
  • Rating: +3154/-232
  • CodeWalrus founder & retired Omnimaga founder
    • View Profile
    • Dream of Omnimaga Music
Re: IRC Client Integration
« Reply #8 on: June 27, 2011, 03:58:27 pm »
Looks nice :D

EDIT: Hmm two suggestions:

-Display timestamps
-Strip SpyBot45, SpyBot46 and Omnimaga (alt nick for OmnomIRC) nicknames too

Also any idea if SpyBot nickname removal will ever be available again in the actual omnomIRC?
« Last Edit: June 27, 2011, 04:01:16 pm by DJ_O »

Offline Netham45

  • LV11 Super Veteran (Next: 3000)
  • ***********
  • Posts: 2103
  • Rating: +213/-4
  • *explodes*
    • View Profile
Re: IRC Client Integration
« Reply #9 on: June 27, 2011, 04:02:47 pm »
The issue I have with stripping a bunch of extra nicks is that every time the bots are down, someone inevitably impersonates the bot and screws with stuff.
Omnimaga Admin

Offline Juju

  • Incredibly sexy mare
  • Coder Of Tomorrow
  • LV13 Extreme Addict (Next: 9001)
  • *************
  • Posts: 5730
  • Rating: +500/-19
  • Weird programmer
    • View Profile
    • juju2143's shed
Re: IRC Client Integration
« Reply #10 on: June 27, 2011, 04:10:55 pm »
Oh cool I was thinking of this too, can't wait to try it :D

Also I prefer if you leave the bots nicks there.

EDIT: I was able to successfully compile it on Linux by changing 2 lines :D
« Last Edit: June 27, 2011, 04:29:22 pm by Juju »

Remember the day the walrus started to fly...

I finally cleared my sig after 4 years you're happy now?
THEGAME
This signature is ridiculously large you've been warned.

The cute mare that used to be in my avatar is Yuki Kagayaki, you can follow her on Facebook and Tumblr.

Offline alberthrocks

  • Moderator
  • LV8 Addict (Next: 1000)
  • ********
  • Posts: 876
  • Rating: +103/-10
    • View Profile
Re: IRC Client Integration
« Reply #11 on: June 27, 2011, 04:22:34 pm »
Nice stuff! :D Just a friendly poke that XChat can support Python, Perl, and TCL (the former being the most popular), so you can have a bit more portability. ;)
(I can't compile that plugin until I dig out some archives for the needed headers - surprisingly, XChat on Linux doesn't come with them, but they are installed when compiling XChat2 source.)
Withgusto Networks Founder and Administrator
Main Server Status: http://withg.org/status/
Backup Server Status: Not available
Backup 2/MC Server Status: http://mc.withg.org/status/


Proud member of ClrHome!

Miss my old signature? Here it is!
Spoiler For Signature:
Alternate "New" IRC post notification bot (Newy) down? Go here to reset it! http://withg.org/albert/cpuhero/

Withgusto Networks Founder and Administrator
Main Server Status: http://withg.org/status/
Backup Server Status: Not available
Backup 2/MC Server Status: http://mc.withg.org/status/

Activity remains limited due to busyness from school et al. Sorry! :( Feel free to PM, email, or if you know me well enough, FB me if you have a question/concern. :)

Don't expect me to be online 24/7 until summer. Contact me via FB if you feel it's urgent.


Proud member of ClrHome!

Spoiler For "My Projects! :D":
Projects:

Computer/Web/IRC Projects:
C______c: 0% done (Doing planning and trying to not forget it :P)
A_____m: 40% done (Need to develop a sophisticated process queue, and a pretty web GUI)
AtomBot v3.0: 0% done (Planning stage, may do a litmus test of developer wants in the future)
IdeaFrenzy: 0% done (Planning and trying to not forget it :P)
wxWabbitemu: 40% done (NEED MOAR FEATURES :P)

Calculator Projects:
M__ C_____ (an A____ _____ clone): 0% done (Need to figure out physics and Axe)
C2I: 0% done (planning, checking the demand for it, and dreaming :P)

Offline DJ Omnimaga

  • Clacualters are teh gr33t
  • CoT Emeritus
  • LV15 Omnimagician (Next: --)
  • *
  • Posts: 55943
  • Rating: +3154/-232
  • CodeWalrus founder & retired Omnimaga founder
    • View Profile
    • Dream of Omnimaga Music
Re: IRC Client Integration
« Reply #12 on: June 27, 2011, 04:31:41 pm »
The issue I have with stripping a bunch of extra nicks is that every time the bots are down, someone inevitably impersonates the bot and screws with stuff.
Ah ok I see. Well are you plannign to at least strip the defualt ones?

Offline Netham45

  • LV11 Super Veteran (Next: 3000)
  • ***********
  • Posts: 2103
  • Rating: +213/-4
  • *explodes*
    • View Profile
Re: IRC Client Integration
« Reply #13 on: June 27, 2011, 04:35:07 pm »
Nice stuff! :D Just a friendly poke that XChat can support Python, Perl, and TCL (the former being the most popular), so you can have a bit more portability. ;)
(I can't compile that plugin until I dig out some archives for the needed headers - surprisingly, XChat on Linux doesn't come with them, but they are installed when compiling XChat2 source.)

Except those extensions require hundreds of megs of extra libs on Windows.


Also, here's an updated mIRC script, it supports timestamps.
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 }

Also, OmnomIRC doesn't have an alt nick anymore, since I switched to the PHP bot. It'll just keep retrying with OmnomIRC until the server lets it in.
Omnimaga Admin

Offline Juju

  • Incredibly sexy mare
  • Coder Of Tomorrow
  • LV13 Extreme Addict (Next: 9001)
  • *************
  • Posts: 5730
  • Rating: +500/-19
  • Weird programmer
    • View Profile
    • juju2143's shed
Re: IRC Client Integration
« Reply #14 on: June 27, 2011, 04:35:45 pm »
In fact you need this file in the same directory as xchat_omnomirc.cpp, which contains Netham45's source code plus some modifications by me:

Line 2: Change
Code: [Select]
#include <string>with
Code: [Select]
#include <cstring>
Line 13:
Code: [Select]
using namespace std::tr1;You don't need this line. Comment or remove it.

Then you compile with:
Code: [Select]
gcc -Wl,--export-dynamic -Wall -O1 -shared -fPIC -std=c++0x xchat_omnomirc.cpp -o xchat_omnomirc.so
And you move the resulting file in ~/.xchat2 so it autoruns when xchat starts.

Remember the day the walrus started to fly...

I finally cleared my sig after 4 years you're happy now?
THEGAME
This signature is ridiculously large you've been warned.

The cute mare that used to be in my avatar is Yuki Kagayaki, you can follow her on Facebook and Tumblr.