diff --git a/Makefile b/Makefile
index 4ac0c0c..19aa916 100644
--- a/Makefile
+++ b/Makefile
@@ -1,9 +1,5 @@
-raven.mono: /usr/bin/mcs /usr/bin/mono clean ./raven.csharp ./connection.csharp ./ravencommand.csharp /bin/bash /usr/bin/mail /usr/bin/wget
- mkdir -p /usr/local/etc/TheRaven
+raven.mono: /usr/bin/mcs /usr/bin/mono clean ./raven.csharp ./connection.csharp ./ravencommand.csharp /bin/bash /usr/bin/mail /usr/bin/wget /usr/local/bin/djinni ./chatbot-support.bash
mcs -out:raven.mono reportmessage.csharp *exception.csharp irc*message.csharp connection.csharp raven*.csharp
- id raven || useradd -M -G git,ircd,api raven
- id raven || usermod -d /usr/local/etc/TheRaven raven
- chown raven:raven /usr/local/etc/TheRaven
clean:
if [ "$$(ls ./*~ 2>/dev/null | wc -l)" -gt 0 ]; then rm -Rf *~; fi
@@ -21,6 +17,10 @@ check-for-verbosity:
grep Console.WriteLine *.csharp | egrep -v 'verbosity|raven.csharp'; echo
install: raven.mono
+ id raven || useradd -M -G git,ircd,api raven
+ id raven || usermod -d /usr/local/etc/TheRaven raven
+ chown raven:raven /usr/local/etc/TheRaven
+ mkdir -p /usr/local/etc/TheRaven
cp raven.mono /opt/raven.mono
[ ! -d /usr/local/etc/TheRaven ] || mkdir -p /usr/local/etc/TheRaven
chown -R raven:raven /opt/raven.mono /usr/local/etc/TheRaven*
diff --git a/chatbot-support.bash b/chatbot-support.bash
new file mode 100644
index 0000000..c1edfe7
--- /dev/null
+++ b/chatbot-support.bash
@@ -0,0 +1,3 @@
+#!/bin/bash
+url="$(wget -q -O - http://alice.pandorabots.com/ | grep iframe | cut -f 2 -d \")"
+curl -s --data "input=$(echo $1 | sed "s/$2//g" | sed 's/^: //')" "$url" | grep 'ALICE:' | tail -n 1 | cut -f 3 -d '>' | sed 's/ ALICE: //' | sed "s/ALICE/$2/g" | sed "s/Alice/$2/g" | sed "s/ om/ friend/"
diff --git a/raven.csharp b/raven.csharp
index 53193e5..0b178c5 100644
--- a/raven.csharp
+++ b/raven.csharp
@@ -13,7 +13,7 @@ namespace AniNIX.TheRaven {
//These are the basic configuration information to be overwritten
public String Host { get; private set; } //This is the Host we are connecting to.
public int Port { get; private set; } // This is Port to connect on
- private string _nick; // This is the _nickname for this Raven to use.
+ public string Nick { get; private set; } // This is the Nickname for this Raven to use.
private string _nickServPass; // This is the password we will send to NickServ to identify
private string _autoSend; // This is the command we will automatically send to the Host
private string configDir; // This is the configuration directory.
@@ -44,7 +44,7 @@ namespace AniNIX.TheRaven {
sb.Append("### AniNIX::TheRaven -- Running Values ###\n");
sb.Append(String.Format("Host: {0}\n",Host));
sb.Append(String.Format("Port: {0}\n",Port));
- sb.Append(String.Format("Nick: {0}\n",_nick));
+ sb.Append(String.Format("Nick: {0}\n",Nick));
sb.Append("NickServPass: ****\n");
sb.Append(String.Format("Auto: {0}\n",_autoSend));
sb.Append(String.Format("Conf: {0}\n",configDir));
@@ -81,7 +81,7 @@ namespace AniNIX.TheRaven {
e.ToString();
Port = 6667;
}
- _nick = (_nick == null) ? loginDefaults[2] : _nick;
+ Nick = (Nick == null) ? loginDefaults[2] : Nick;
_nickServPass = (_nickServPass == null) ? loginDefaults[3] : _nickServPass;
}
@@ -127,7 +127,7 @@ namespace AniNIX.TheRaven {
ReportMessage.Log(Verbosity.Verbose,String.Format("Handling Argument {0}: {1}",i,args[i]));
switch (args[i]) {
case "-n":
- if (i < args.Length-1) _nick = args[++i];
+ if (i < args.Length-1) Nick = args[++i];
break;
case "-h":
if (i < args.Length-1) Host = args[++i];
@@ -183,13 +183,18 @@ namespace AniNIX.TheRaven {
ReportMessage.Log(Verbosity.VeryVerbose,this.ToString());
}
+ ///
+ /// Populate the name recognition
+ ///
+
+
///
/// Create a raven with default settings.
///
public Raven(String host = "localhost", int port = 6667, String nick = "TheRaven-Guest", String nickServPass = "null", String autoSend = null, String configDir = "/usr/local/etc/TheRaven-Local", Verbosity verbosity = Verbosity.Verbose) {
this.Host = host;
Port = port;
- _nick = nick;
+ Nick = nick;
_nickServPass = nickServPass;
_autoSend = autoSend;
this.configDir = configDir;
@@ -212,7 +217,7 @@ namespace AniNIX.TheRaven {
//Send USER and NICK lines to identify.
IRCClientMessage send = new IRCClientMessage();
- send.CreateCustomMessage(String.Format("NICK {0}\nUSER {0} * * :{0}",_nick));
+ send.CreateCustomMessage(String.Format("NICK {0}\nUSER {0} * * :{0}",Nick));
_connection.Write(send);
ReportMessage.Log(Verbosity.VeryVerbose,"USER and NICK sent");
//thanks to cfrayne for the refactor
@@ -256,7 +261,7 @@ namespace AniNIX.TheRaven {
if (notifications.TryGetValue(response.target,out result)) {
if (response.message.Contains(result)) {
try {
- RavenExecute.Command(String.Format("djinni admin \"Found {1} in {0}\"",response.target,result));
+ RavenExecute.Command(String.Format("/usr/local/bin/djinni admin \"Found {1} in {0}\"",response.target,result));
} catch (Exception e) {
ReportMessage.Log(Verbosity.Error,e.ToString());
}
@@ -264,18 +269,22 @@ namespace AniNIX.TheRaven {
}
}
- //TODO Implement the dialog options and link reponse
+ // Integrate with the ALICE chatbot project.
+ // TODO Create a local instance instead
+ if (response.msgCode.Equals("PRIVMSG") && !String.IsNullOrWhiteSpace(response.message) && (response.target.Equals(Nick) || response.message.StartsWith(String.Format("{0}:",Nick)) || response.message.EndsWith(String.Format("{0}!",Nick)) || response.message.EndsWith(String.Format("{0}?",Nick)) || response.message.EndsWith(String.Format("{0}.",Nick)) || response.message.EndsWith(String.Format("{0}",Nick)))) {
+ IRCClientMessage send = new IRCClientMessage();
+ send.PrivMsg(RavenExecute.Command(String.Format("bash /usr/local/src/TheRaven/chatbot-support.bash {0} {1}",response.message.Replace("'","").Replace("\"","").Split('\n')[0].Trim(),Nick)).Trim(),(response.target.Equals(Nick))?response.user:response.target);
+ _connection.Write(send);
+ }
- /* CROWFACTS the deserving */
-
- if (crowFactsSubscribers.Contains(response.user) && randomSeed.Next(10) < 8) {
- IRCClientMessage send = new IRCClientMessage();
- int location = randomSeed.Next(crowFacts.Length);
- send.PrivMsg(crowFacts[location],response.user);
- _connection.Write(send);
+ /* CROWFACTS the deserving */
+ if (crowFactsSubscribers.Contains(response.user) && randomSeed.Next(10) < 8) {
+ IRCClientMessage send = new IRCClientMessage();
+ int location = randomSeed.Next(crowFacts.Length);
+ send.PrivMsg(crowFacts[location],response.user);
+ _connection.Write(send);
+ }
}
- }
-
}
}
diff --git a/ravencommand.csharp b/ravencommand.csharp
index 3eedb15..24242c9 100644
--- a/ravencommand.csharp
+++ b/ravencommand.csharp
@@ -34,19 +34,19 @@ namespace AniNIX.TheRaven {
/* COMMON Commands everyone can use */
switch (command) {
case "r.raven":
- send.ActionMsg("quoth, \"Nevermore!\"",incoming.target);
+ send.ActionMsg("quoth, \"Nevermore!\"",(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
connection.Write(send);
return;
case "r.help":
- send.PrivMsg(theRaven.helpText,incoming.target);
+ send.PrivMsg(theRaven.helpText,(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
connection.Write(send);
return;
case "r.magic8":
if (theRaven.magic8 == null) {
- send.PrivMsg("Magic8 not loaded",incoming.target);
+ send.PrivMsg("Magic8 not loaded",(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
} else {
int location = theRaven.randomSeed.Next(theRaven.magic8.Length);
- send.PrivMsg(theRaven.magic8[location],incoming.target);
+ send.PrivMsg(theRaven.magic8[location],(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
}
connection.Write(send);
return;
@@ -56,9 +56,9 @@ namespace AniNIX.TheRaven {
} else {
try {
int result = theRaven.randomSeed.Next(Int32.Parse(bySpace[1]));
- send.PrivMsg(String.Format("{0}",result+1),incoming.target);
+ send.PrivMsg(String.Format("{0}",result+1),(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
} catch (Exception e) {
- send.PrivMsg("Bad formatting.",incoming.target);
+ send.PrivMsg("Bad formatting.",(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
}
}
connection.Write(send);
@@ -68,10 +68,10 @@ namespace AniNIX.TheRaven {
send.PrivMsg(theRaven.helpText,incoming.user);
} else {
try {
- send.PrivMsg(RavenExecute.Command(String.Format("wget -q -O - \"http://tiny-url.info/api/v1/create?format=text&apikey=\"$(api-keys tinyurl)\"&provider=x_co&url={0}\"",bySpace[1])),incoming.target);
+ send.PrivMsg(RavenExecute.Command(String.Format("wget -q -O - \"http://tiny-url.info/api/v1/create?format=text&apikey=\"$(api-keys tinyurl)\"&provider=x_co&url={0}\"",bySpace[1])),(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
} catch (Exception e) {
ReportMessage.Log(Verbosity.Error,e.ToString());
- send.PrivMsg("TinyURL error. Could not get link.",incoming.target);
+ send.PrivMsg("TinyURL error. Could not get link.",(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
}
}
connection.Write(send);
@@ -114,10 +114,10 @@ namespace AniNIX.TheRaven {
return;
case "r.uptime":
try {
- send.PrivMsg(RavenExecute.Command("uptime"),incoming.target);
+ send.PrivMsg(RavenExecute.Command("uptime"),(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
} catch (Exception e) {
e.ToString();
- send.PrivMsg("Can't get uptime",incoming.target);
+ send.PrivMsg("Can't get uptime",(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
}
connection.Write(send);
return;
@@ -145,7 +145,7 @@ namespace AniNIX.TheRaven {
continue;
}
if (byPipe[0].Equals(command)) {
- send.PrivMsg(FormatSearch(byPipe[1],incoming.message,byPipe[2]),incoming.target);
+ send.PrivMsg(FormatSearch(byPipe[1],incoming.message,byPipe[2]),(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
connection.Write(send);
return;
}
@@ -166,62 +166,61 @@ namespace AniNIX.TheRaven {
connection.Write(send);
}
send.PrivMsg("End subscribers",incoming.user);
-
- send.PrivMsg(theRaven.helpText,incoming.target);
+ send.PrivMsg(theRaven.helpText,(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
} else if (theRaven.crowFacts == null) {
- send.PrivMsg("CrowFacts not loaded.",incoming.target);
+ send.PrivMsg("CrowFacts not loaded.",(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
} else {
if (!theRaven.crowFactsSubscribers.Contains(bySpace[1])) {
theRaven.crowFactsSubscribers.Add(bySpace[1]);
- send.PrivMsg(String.Format("{0} has been subscribed to CrowFacts!",bySpace[1]),incoming.target);
+ send.PrivMsg(String.Format("{0} has been subscribed to CrowFacts!",bySpace[1]),(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
} else {
- send.PrivMsg("Subscriber already added",incoming.target);
+ send.PrivMsg("Subscriber already added",(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
}
}
connection.Write(send);
return;
case "r.us":
if (bySpace.Length < 2) {
- send.PrivMsg(theRaven.helpText,incoming.target);
+ send.PrivMsg(theRaven.helpText,(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
} else {
if (theRaven.crowFactsSubscribers.Contains(bySpace[1])) {
theRaven.crowFactsSubscribers.Remove(bySpace[1]);
- send.PrivMsg(String.Format("{0} has been unsubscribed.",bySpace[1]),incoming.target);
+ send.PrivMsg(String.Format("{0} has been unsubscribed.",bySpace[1]),(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
} else {
- send.PrivMsg("No such subscriber",incoming.target);
+ send.PrivMsg("No such subscriber",(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
}
}
connection.Write(send);
return;
case "r.join":
if (bySpace.Length < 2) {
- send.PrivMsg(theRaven.helpText,incoming.target);
+ send.PrivMsg(theRaven.helpText,(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
} else {
if (!theRaven.channels.Contains(bySpace[1])) {
theRaven.channels.Add(bySpace[1]);
send.CreateJoinMessage(bySpace[1]);
} else {
- send.PrivMsg("Already joined channel",incoming.target);
+ send.PrivMsg("Already joined channel",(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
}
}
connection.Write(send);
return;
case "r.part":
if (bySpace.Length < 2) {
- send.PrivMsg(theRaven.helpText,incoming.target);
+ send.PrivMsg(theRaven.helpText,(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
} else {
if (theRaven.channels.Contains(bySpace[1])) {
theRaven.channels.Remove(bySpace[1]);
send.CreatePartMessage(bySpace[1]);
} else {
- send.PrivMsg("No such channel",incoming.target);
+ send.PrivMsg("No such channel",(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
}
}
connection.Write(send);
return;
case "r.say":
if (bySpace.Length < 3 || !bySpace[1].StartsWith("#")) {
- send.PrivMsg(theRaven.helpText,incoming.target);
+ send.PrivMsg(theRaven.helpText,(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
} else {
StringBuilder newMsg = new StringBuilder(bySpace[2]);
for (int i = 3; i < bySpace.Length; i++) {
@@ -234,7 +233,7 @@ namespace AniNIX.TheRaven {
return;
case "r.act":
if (bySpace.Length < 3 || !bySpace[1].StartsWith("#")) {
- send.PrivMsg(theRaven.helpText,incoming.target);
+ send.PrivMsg(theRaven.helpText,(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
} else {
StringBuilder newAction = new StringBuilder(bySpace[2]);
for (int i = 3; i < bySpace.Length; i++) {
@@ -285,7 +284,7 @@ namespace AniNIX.TheRaven {
return;
case "r.greylist":
if (bySpace.Length < 2) {
- send.PrivMsg(theRaven.helpText,incoming.target);
+ send.PrivMsg(theRaven.helpText,(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
} else {
if (theRaven.whitelist.Contains(bySpace[1])) {
theRaven.whitelist.Remove(bySpace[1]);
diff --git a/ravenexecute.csharp b/ravenexecute.csharp
index ad24027..aec2e08 100644
--- a/ravenexecute.csharp
+++ b/ravenexecute.csharp
@@ -27,6 +27,7 @@ namespace AniNIX.TheRaven {
proc.StartInfo.FileName = "/bin/bash";
proc.StartInfo.Arguments = String.Format("-c \'{0}\'",command);
proc.StartInfo.UseShellExecute=false;
+ ReportMessage.Log(Verbosity.Verbose,String.Format("{0} {1}",proc.StartInfo.FileName,proc.StartInfo.Arguments));
//Redirect input
proc.StartInfo.RedirectStandardOutput=true;