aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Environment')
-rw-r--r--OpenSim/Region/Environment/Modules/ChatModule.cs29
1 files changed, 25 insertions, 4 deletions
diff --git a/OpenSim/Region/Environment/Modules/ChatModule.cs b/OpenSim/Region/Environment/Modules/ChatModule.cs
index 54f32f6..5a31e0b 100644
--- a/OpenSim/Region/Environment/Modules/ChatModule.cs
+++ b/OpenSim/Region/Environment/Modules/ChatModule.cs
@@ -31,6 +31,7 @@ using System.IO;
31using System.Net.Sockets; 31using System.Net.Sockets;
32using System.Threading; 32using System.Threading;
33using System.Collections.Generic; 33using System.Collections.Generic;
34using System.Text.RegularExpressions;
34using libsecondlife; 35using libsecondlife;
35using OpenSim.Framework.Interfaces; 36using OpenSim.Framework.Interfaces;
36using OpenSim.Framework.Utilities; 37using OpenSim.Framework.Utilities;
@@ -319,6 +320,23 @@ namespace OpenSim.Region.Environment.Modules
319 } 320 }
320 } 321 }
321 322
323 private Dictionary<string, string> ExtractMsg(string input) {
324 Dictionary<string, string> result = null;
325 string regex = @":(?<nick>\w*)!~(?<user>\S*) PRIVMSG (?<channel>\S+) :(?<msg>.*)";
326 Regex RE = new Regex(regex, RegexOptions.Multiline);
327 MatchCollection matches = RE.Matches(input);
328 // Get some direct matches $1 $4 is a
329 if (matches.Count == 4) {
330 result = new Dictionary<string, string>();
331 result.Add("nick", matches[0].Value);
332 result.Add("user", matches[1].Value);
333 result.Add("channel", matches[2].Value);
334 result.Add("msg", matches[3].Value);
335 } else {
336 m_log.Verbose("IRC", "Number of matches: " + matches.Count);
337 }
338 return result;
339 }
322 340
323 public void PingRun() 341 public void PingRun()
324 { 342 {
@@ -341,18 +359,21 @@ namespace OpenSim.Region.Environment.Modules
341 Console.WriteLine(inputLine); 359 Console.WriteLine(inputLine);
342 if (inputLine.Contains(m_channel)) 360 if (inputLine.Contains(m_channel))
343 { 361 {
344 string mess = inputLine.Substring(inputLine.IndexOf(m_channel)); 362 Dictionary<string, string> data = ExtractMsg(inputLine);
345 foreach (Scene m_scene in m_scenes) 363 if (data != null )
346 { 364 {
347 m_scene.ForEachScenePresence(delegate(ScenePresence avatar) 365 foreach (Scene m_scene in m_scenes)
366 {
367 m_scene.ForEachScenePresence(delegate(ScenePresence avatar)
348 { 368 {
349 if (!avatar.IsChildAgent) 369 if (!avatar.IsChildAgent)
350 { 370 {
351 avatar.ControllingClient.SendChatMessage( 371 avatar.ControllingClient.SendChatMessage(
352 Helpers.StringToField(inputLine), 255, pos, "IRC:", 372 Helpers.StringToField(data["msg"]), 255, pos, data["nick"],
353 LLUUID.Zero); 373 LLUUID.Zero);
354 } 374 }
355 }); 375 });
376 }
356 } 377 }
357 } 378 }
358 } 379 }