void sourceirc_OnChannelMessage(object sender, IrcEventArgs e)
{
lastMessage = DateTime.Now;
/* Sample input
:[email protected] PRIVMSG #wikipedia-VAN :15[[07Title15]] by "0380.100.196.12815" (12 http://en.wikipedia.org/w/index.php?diff=403417897&oldid=396729660 15) 060.90746715 (04Reverted15) (13Default revert15) (021.234 15s)
:[email protected] PRIVMSG #wikipedia-VAN :15[[07Page15]] by "03127.0.0.115" (12 http://en.wikipedia.org/w/index.php?diff=403418859&oldid=403418512 15) 060.95910315 (03Not Reverted15) (13Reverted before15) (020.3157 15s)
*/
string strippedmsg = stripBold.Replace(stripColours.Replace(CTFUtils.replaceStrMax(e.Data.Message, '\x03', '\x04', 14), "\x03"), "");
string[] fields = strippedmsg.Split(new char[1] { '\x03' }, 15);
if (fields.Length == 15)
{
/* Sample fields
0:
1:[[
2:Triangular trade
3:]] by "
4:173.57.160.195
5:" (
6: http://en.wikipedia.org/w/index.php?diff=403448965&oldid=402566006
7:)
8:0.935177
9: (
10:Reverted
11:) (
12:Default revert
13:) (
14:3.0718929767609 15s)
--
0:
1:[[
2:Heterosexuality
3:]] by "
4:68.194.43.126
5:" (
6: http://en.wikipedia.org/w/index.php?diff=403448989&oldid=403448396
7:)
8:0.963363
9: (
10:Not Reverted
11:) (
12:Default revert
13:) (
14:3.0718929767609 15s)
*/
// Cut off possible special character at the end
if (fields[14].EndsWith("\x03"))
fields[14] = fields[14].Substring(0, fields[14].Length - 1);
// Cut off " s)" too
string[] timeparts = fields[14].Split(new char[1] { ' ' }, 2);
fields[14] = timeparts[0];
}
else
{
//Console.WriteLine("Ignored: " + e.Data.Message);
return; //Probably really long article title or something that got cut off; we can't handle these
}
try
{
SourceEvent rce;
rce.eventtype = SourceEvent.EventType.somethingelse;
rce.fullstring = e.Data.Message;
rce.sendname = e.Data.Nick;
rce.title = "";
rce.user = "";
rce.url = "";
rce.score = "";
rce.reverted = "";
rce.reason = "";
rce.time = "";
try
{
if (e.Data.Nick == Program.sourceAccount)
{
rce.eventtype = SourceEvent.EventType.cluereport;
rce.title = fields[2];
rce.user = fields[4];
rce.url = fields[6].Trim();
rce.score = fields[8];
rce.reverted = fields[10];
rce.reason = fields[12];
rce.time = fields[14];
}
Program.ReactToSourceEvent(rce);
}
catch (Exception exce)
{
logger.Warn("ReactorException: " + exce.Message);
}
}
catch (ArgumentOutOfRangeException eor)
{
//Broadcast this for Distributed Debugging
logger.Warn("SourceR_AOORE: " + eor.Message);
}
}