Fixes for URL titling and chat timeouts
This commit is contained in:
parent
9da156fced
commit
b329ea276b
@ -4,6 +4,7 @@ using System.Net.Sockets;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
using AniNIX.Shared;
|
||||||
|
|
||||||
namespace AniNIX.TheRaven {
|
namespace AniNIX.TheRaven {
|
||||||
|
|
@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using AniNIX.Shared;
|
||||||
|
|
||||||
namespace AniNIX.TheRaven {
|
namespace AniNIX.TheRaven {
|
||||||
|
|
||||||
@ -49,7 +50,7 @@ namespace AniNIX.TheRaven {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public override string ToString() {
|
public override string ToString() {
|
||||||
if (Raven.verbosity == Verbosity.Explicit) {
|
if (ReportMessage.verbosity == Verbosity.Explicit) {
|
||||||
return String.Format(">>> {0}\nUser: {1}\nServer: {2}\nmsgCode: {3}\nTarget: {4}\nMessage: {5}\n",incomingIRCString,user,server,msgCode,target,message);
|
return String.Format(">>> {0}\nUser: {1}\nServer: {2}\nmsgCode: {3}\nTarget: {4}\nMessage: {5}\n",incomingIRCString,user,server,msgCode,target,message);
|
||||||
} else {
|
} else {
|
||||||
return String.Format(">>> {0}",incomingIRCString);
|
return String.Format(">>> {0}",incomingIRCString);
|
38
Makefile
38
Makefile
@ -1,32 +1,40 @@
|
|||||||
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
|
CONFDIR := /usr/local/etc/TheRaven
|
||||||
mcs -out:raven.mono reportmessage.csharp *exception.csharp irc*message.csharp connection.csharp raven*.csharp
|
|
||||||
|
compile: /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
|
||||||
|
if [ ! -d ../Djinni ]; then git clone -C '..' https://aninix.net/foundation/Djinni; fi
|
||||||
|
git -C ../Djinni pull
|
||||||
|
if [ ! -d ../SharedLibraries ]; then git clone -C '..' https://aninix.net/foundation/SharedLibraries; fi
|
||||||
|
git -C ../SharedLibraries pull
|
||||||
|
mcs -out:raven.mono ../SharedLibraries/CSharp/*.csharp *.csharp
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
if [ "$$(ls ./*~ 2>/dev/null | wc -l)" -gt 0 ]; then rm -Rf *~; fi
|
if [ "$$(ls ./*~ 2>/dev/null | wc -l)" -gt 0 ]; then rm -Rf *~; fi
|
||||||
if [ "$$(ls ./*.mono 2>/dev/null | wc -l)" -gt 0 ]; then rm -Rf *.mono; fi
|
if [ "$$(ls ./*.mono 2>/dev/null | wc -l)" -gt 0 ]; then rm -Rf *.mono; fi
|
||||||
if [ "$$(ls ./\#* 2>/dev/null | wc -l)" -gt 0 ]; then rm -Rf \#*; fi
|
if [ "$$(ls ./\#* 2>/dev/null | wc -l)" -gt 0 ]; then rm -Rf \#*; fi
|
||||||
if [ -f raven.mono ]; then rm raven.mono; fi
|
|
||||||
|
|
||||||
edit:
|
edit:
|
||||||
emacs -nw raven.csharp
|
emacs -nw raven.csharp
|
||||||
|
|
||||||
test: raven.mono
|
test: compile
|
||||||
script -c "mono ./raven.mono -c /usr/local/etc/TheRaven-Test -v" /tmp/raven-test.log
|
script -c "mono ./raven.mono -c ${CONFDIR}-Test -v" /tmp/raven-test.log
|
||||||
|
|
||||||
check-for-verbosity:
|
check-for-verbosity:
|
||||||
grep Console.WriteLine *.csharp | egrep -v 'verbosity|raven.csharp'; echo
|
grep Console.WriteLine *.csharp | egrep -v 'verbosity|raven.csharp'; echo
|
||||||
|
|
||||||
install: raven.mono
|
install: compile
|
||||||
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
|
cp raven.mono /opt/raven.mono
|
||||||
[ ! -d /usr/local/etc/TheRaven ] || mkdir -p /usr/local/etc/TheRaven
|
if [ ! -d ${CONFDIR} ]; then (mkdir -p /usr/local/etc/TheRaven; cp ./sample-conf/* ${CONFDIR}); fi
|
||||||
chown -R raven:raven /opt/raven.mono /usr/local/etc/TheRaven*
|
if ! getent passwd raven; then useradd -M -G git,ircd,api -d ${CONFDIR} raven; fi
|
||||||
chmod 0600 /opt/raven.mono /usr/local/etc/TheRaven*/*
|
make checkperm
|
||||||
chmod 0700 /usr/local/etc/TheRaven*
|
|
||||||
cp ./raven.service /usr/lib/systemd/system/raven.service
|
cp ./raven.service /usr/lib/systemd/system/raven.service
|
||||||
/usr/bin/bash make-conf-dir.bash /usr/local/etc/TheRaven
|
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
systemctl enable raven
|
systemctl enable raven
|
||||||
|
|
||||||
|
reverse: /usr/lib/systemd/system/raven.service
|
||||||
|
cp /usr/lib/systemd/system/raven.service .
|
||||||
|
|
||||||
|
checkperm: /opt/raven.mono
|
||||||
|
chown -R raven:raven /opt/raven.mono ${CONFDIR}*
|
||||||
|
chmod 0600 /opt/raven.mono ${CONFDIR}*/*
|
||||||
|
chmod 0700 ${CONFDIR}*
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using AniNIX.Shared;
|
||||||
|
|
||||||
namespace AniNIX.TheRaven {
|
namespace AniNIX.TheRaven {
|
||||||
|
|
||||||
@ -33,8 +34,6 @@ namespace AniNIX.TheRaven {
|
|||||||
|
|
||||||
public Dictionary<String,int> MailerCount = new Dictionary<String,int>(); // Messages may only be sent up to a maximum to the admins.
|
public Dictionary<String,int> MailerCount = new Dictionary<String,int>(); // Messages may only be sent up to a maximum to the admins.
|
||||||
|
|
||||||
public static Verbosity verbosity { get; private set; } // This is the level to which this and all Raven instances will log.
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Show the settings used by this Raven.
|
/// Show the settings used by this Raven.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -48,7 +47,7 @@ namespace AniNIX.TheRaven {
|
|||||||
sb.Append("NickServPass: ****\n");
|
sb.Append("NickServPass: ****\n");
|
||||||
sb.Append(String.Format("Auto: {0}\n",_autoSend));
|
sb.Append(String.Format("Auto: {0}\n",_autoSend));
|
||||||
sb.Append(String.Format("Conf: {0}\n",configDir));
|
sb.Append(String.Format("Conf: {0}\n",configDir));
|
||||||
sb.Append(String.Format("Verbosity: {0}\n",Raven.verbosity));
|
sb.Append(String.Format("Verbosity: {0}\n",ReportMessage.verbosity));
|
||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -141,10 +140,10 @@ namespace AniNIX.TheRaven {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "-v":
|
case "-v":
|
||||||
Raven.verbosity = Verbosity.VeryVerbose;
|
ReportMessage.verbosity = Verbosity.VeryVerbose;
|
||||||
break;
|
break;
|
||||||
case "-q":
|
case "-q":
|
||||||
Raven.verbosity = Verbosity.Quiet;
|
ReportMessage.verbosity = Verbosity.Quiet;
|
||||||
break;
|
break;
|
||||||
case "-P":
|
case "-P":
|
||||||
if (i < args.Length-1) _nickServPass = args[++i];
|
if (i < args.Length-1) _nickServPass = args[++i];
|
||||||
@ -186,7 +185,7 @@ namespace AniNIX.TheRaven {
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Populate the name recognition
|
/// Populate the name recognition
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Create a raven with default settings.
|
/// Create a raven with default settings.
|
||||||
@ -198,7 +197,7 @@ namespace AniNIX.TheRaven {
|
|||||||
_nickServPass = nickServPass;
|
_nickServPass = nickServPass;
|
||||||
_autoSend = autoSend;
|
_autoSend = autoSend;
|
||||||
this.configDir = configDir;
|
this.configDir = configDir;
|
||||||
Raven.verbosity = verbosity;
|
ReportMessage.verbosity = verbosity;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -261,7 +260,7 @@ namespace AniNIX.TheRaven {
|
|||||||
if (notifications.TryGetValue(response.target,out result)) {
|
if (notifications.TryGetValue(response.target,out result)) {
|
||||||
if (response.message.Contains(result)) {
|
if (response.message.Contains(result)) {
|
||||||
try {
|
try {
|
||||||
RavenExecute.Command(String.Format("/usr/local/bin/djinni admin \"Found {1} in {0}\"",response.target,result));
|
ExecuteCommand.Run(String.Format("/usr/local/bin/djinni admin \"Found {1} in {0}\"",response.target,result));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
ReportMessage.Log(Verbosity.Error,e.ToString());
|
ReportMessage.Log(Verbosity.Error,e.ToString());
|
||||||
}
|
}
|
||||||
@ -273,17 +272,32 @@ namespace AniNIX.TheRaven {
|
|||||||
// TODO Create a local instance instead
|
// 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)))) {
|
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();
|
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);
|
try {
|
||||||
|
send.PrivMsg(ExecuteCommand.Run(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);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.ToString();
|
||||||
|
send.PrivMsg("Cannot talk right now.",(response.target.Equals(Nick))?response.user:response.target);
|
||||||
|
}
|
||||||
_connection.Write(send);
|
_connection.Write(send);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* CROWFACTS the deserving */
|
/* CROWFACTS the deserving */
|
||||||
if (crowFactsSubscribers.Contains(response.user) && randomSeed.Next(10) < 8) {
|
else if (crowFactsSubscribers.Contains(response.user) && randomSeed.Next(10) < 8) {
|
||||||
IRCClientMessage send = new IRCClientMessage();
|
IRCClientMessage send = new IRCClientMessage();
|
||||||
int location = randomSeed.Next(crowFacts.Length);
|
int location = randomSeed.Next(crowFacts.Length);
|
||||||
send.PrivMsg(crowFacts[location],response.user);
|
send.PrivMsg(crowFacts[location],response.user);
|
||||||
_connection.Write(send);
|
_connection.Write(send);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (WebPageAPI.URLRegEx.Match(response.message).Success) {
|
||||||
|
try {
|
||||||
|
IRCClientMessage send = new IRCClientMessage();
|
||||||
|
send.PrivMsg(String.Format("Web page title: {0}",WebPageAPI.GetPageTitle(WebPageAPI.URLRegEx.Match(response.message).Value)),(response.target.Equals(Nick))?response.user:response.target);
|
||||||
|
_connection.Write(send);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.ToString();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -3,6 +3,7 @@ using System.IO;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using AniNIX.Shared;
|
||||||
|
|
||||||
namespace AniNIX.TheRaven {
|
namespace AniNIX.TheRaven {
|
||||||
|
|
||||||
@ -58,6 +59,7 @@ namespace AniNIX.TheRaven {
|
|||||||
int result = theRaven.randomSeed.Next(Int32.Parse(bySpace[1]));
|
int result = theRaven.randomSeed.Next(Int32.Parse(bySpace[1]));
|
||||||
send.PrivMsg(String.Format("{0}",result+1),(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
|
send.PrivMsg(String.Format("{0}",result+1),(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
e.ToString();
|
||||||
send.PrivMsg("Bad formatting.",(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
|
send.PrivMsg("Bad formatting.",(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -68,7 +70,7 @@ namespace AniNIX.TheRaven {
|
|||||||
send.PrivMsg(theRaven.helpText,incoming.user);
|
send.PrivMsg(theRaven.helpText,incoming.user);
|
||||||
} else {
|
} else {
|
||||||
try {
|
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.Equals(theRaven.Nick))?incoming.user:incoming.target);
|
send.PrivMsg(ExecuteCommand.Run(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) {
|
} catch (Exception e) {
|
||||||
ReportMessage.Log(Verbosity.Error,e.ToString());
|
ReportMessage.Log(Verbosity.Error,e.ToString());
|
||||||
send.PrivMsg("TinyURL error. Could not get link.",(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
|
send.PrivMsg("TinyURL error. Could not get link.",(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
|
||||||
@ -103,7 +105,7 @@ namespace AniNIX.TheRaven {
|
|||||||
ReportMessage.Log(Verbosity.Error,"Make sure user raven can write to /var/log/r.msg.log");
|
ReportMessage.Log(Verbosity.Error,"Make sure user raven can write to /var/log/r.msg.log");
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
RavenExecute.Command(String.Format("djinni admin \"Page from {0}\"",incoming.user));
|
ExecuteCommand.Run(String.Format("djinni admin \"Page from {0}\"",incoming.user));
|
||||||
send.PrivMsg("Sent!",incoming.user);
|
send.PrivMsg("Sent!",incoming.user);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
ReportMessage.Log(Verbosity.Error,e.ToString());
|
ReportMessage.Log(Verbosity.Error,e.ToString());
|
||||||
@ -114,7 +116,7 @@ namespace AniNIX.TheRaven {
|
|||||||
return;
|
return;
|
||||||
case "r.uptime":
|
case "r.uptime":
|
||||||
try {
|
try {
|
||||||
send.PrivMsg(RavenExecute.Command("uptime"),(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
|
send.PrivMsg(ExecuteCommand.Run("uptime"),(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.ToString();
|
e.ToString();
|
||||||
send.PrivMsg("Can't get uptime",(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
|
send.PrivMsg("Can't get uptime",(incoming.target.Equals(theRaven.Nick))?incoming.user:incoming.target);
|
||||||
@ -123,7 +125,7 @@ namespace AniNIX.TheRaven {
|
|||||||
return;
|
return;
|
||||||
case "r.heartbeat":
|
case "r.heartbeat":
|
||||||
try {
|
try {
|
||||||
String[] byLine = RavenExecute.Command("heartbeat-client").Split('\n');
|
String[] byLine = ExecuteCommand.Run("heartbeat-client").Split('\n');
|
||||||
for (int i = 0; i < byLine.Length; i++) {
|
for (int i = 0; i < byLine.Length; i++) {
|
||||||
send.PrivMsg(byLine[i],incoming.user);
|
send.PrivMsg(byLine[i],incoming.user);
|
||||||
connection.Write(send);
|
connection.Write(send);
|
@ -2,6 +2,7 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using AniNIX.Shared;
|
||||||
|
|
||||||
namespace AniNIX.TheRaven {
|
namespace AniNIX.TheRaven {
|
||||||
|
|
@ -1,16 +0,0 @@
|
|||||||
#!/usr/bin/bash
|
|
||||||
|
|
||||||
mkdir -p $1
|
|
||||||
touch $1/blacklist.txt
|
|
||||||
touch $1/crowfacts.txt
|
|
||||||
touch $1/crowfacts.txt.bak
|
|
||||||
touch $1/hangman.txt
|
|
||||||
touch $1/keepalive-loginDefaults.txt
|
|
||||||
touch $1/magic8.txt
|
|
||||||
touch $1/todo.txt
|
|
||||||
touch $1/whitelist.txt
|
|
||||||
touch $1/loginDefaults.txt
|
|
||||||
touch $1/rooms.txt
|
|
||||||
touch $1/searches.txt
|
|
||||||
touch $1/helptext.txt
|
|
||||||
|
|
@ -1,59 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.IO;
|
|
||||||
using System.Text;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
|
|
||||||
namespace AniNIX.TheRaven {
|
|
||||||
|
|
||||||
public static class RavenExecute {
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// This method allows TheRaven to execute a command on the OS.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name=command>The command string to run as the string argument to "bash -c 'command'"</param>
|
|
||||||
/// <param name=input>The effective replacement for the command's stdin</param
|
|
||||||
/// <return>The stdout of the command</return>
|
|
||||||
/// </summary>
|
|
||||||
public static String Command(String command, String input) {
|
|
||||||
//Sanitize inputs.
|
|
||||||
if (command.Contains("\'")) {
|
|
||||||
throw new Exception("Command strings cannot include \'.");
|
|
||||||
}
|
|
||||||
|
|
||||||
//Create process.
|
|
||||||
Process proc = new Process();
|
|
||||||
proc.StartInfo.CreateNoWindow = true;
|
|
||||||
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;
|
|
||||||
proc.StartInfo.RedirectStandardInput=true;
|
|
||||||
|
|
||||||
//Start process
|
|
||||||
proc.Start();
|
|
||||||
|
|
||||||
//Add input and read output.
|
|
||||||
proc.StandardInput.Write(input);
|
|
||||||
proc.StandardInput.Close();
|
|
||||||
proc.WaitForExit();
|
|
||||||
if (proc.ExitCode != 0) {
|
|
||||||
throw new Exception(String.Format("Failed to exit command with return code {0}",proc.ExitCode));
|
|
||||||
}
|
|
||||||
String stdoutString = proc.StandardOutput.ReadToEnd();
|
|
||||||
|
|
||||||
//Close up and return
|
|
||||||
proc.Close();
|
|
||||||
return stdoutString;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Add polymorphism to allow no stdin
|
|
||||||
public static String Command(String command) {
|
|
||||||
return Command(command,null);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,45 +0,0 @@
|
|||||||
using System;
|
|
||||||
|
|
||||||
namespace AniNIX.TheRaven {
|
|
||||||
|
|
||||||
public enum Verbosity {
|
|
||||||
Always = -2,
|
|
||||||
Error,
|
|
||||||
Quiet = 0,
|
|
||||||
Verbose,
|
|
||||||
VeryVerbose,
|
|
||||||
Explicit,
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class ReportMessage {
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Log a new message for the user.
|
|
||||||
/// </summary>
|
|
||||||
public static void Log(Verbosity level,String message) {
|
|
||||||
|
|
||||||
if (level == Verbosity.Error) {
|
|
||||||
Console.Error.WriteLine(message);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Raven.verbosity == Verbosity.Quiet) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (level == Verbosity.Always
|
|
||||||
|| (Raven.verbosity == Verbosity.Verbose && level == Verbosity.Verbose)
|
|
||||||
|| (Raven.verbosity == Verbosity.VeryVerbose && (level == Verbosity.Verbose || level == Verbosity.VeryVerbose))
|
|
||||||
|| (Raven.verbosity == Verbosity.Explicit && (level == Verbosity.Verbose || level == Verbosity.VeryVerbose || level == Verbosity.Explicit))
|
|
||||||
) {
|
|
||||||
Console.WriteLine(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void Log(String message) {
|
|
||||||
Log(Verbosity.VeryVerbose,message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
1
sample-conf/blacklist.txt
Normal file
1
sample-conf/blacklist.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
TheRaven
|
52
sample-conf/crowfacts.txt
Normal file
52
sample-conf/crowfacts.txt
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
There's an old nonsense song called the Old Carrion Crow.
|
||||||
|
From 2000 to 2003 the world's best wooden roller coaster was called The Raven.
|
||||||
|
The average raven has a four-foot wingspan.
|
||||||
|
The average crow has a three-foot wingspan.
|
||||||
|
Crows and ravens are members of the corvid family, the most adaptable and intelligent family of birds in the world.
|
||||||
|
Crows and ravens can mimic sounds and associate sounds with events.
|
||||||
|
Crows roost in flocks of several thousand in the winter.
|
||||||
|
Crows are omnivorous, making them capable scavangers and opportunistic hunters.
|
||||||
|
Crows prefer coniferous trees to build their homes at least 60 feet above the ground.
|
||||||
|
Paired males and females share in the raising of the four to six eggs.
|
||||||
|
One crow baby will frequently remain in the nest to assist in the caring for the next nestlings.
|
||||||
|
While crows have a reputation for eating corn, they often eat the bugs that plague crops.
|
||||||
|
Crows and ravens are territorial when young are in the nest, dive-bombing passersby.
|
||||||
|
The Sioux have a story of a white crow warning buffalo of approaching hunting parties. The bird turned black when a hunter threw it into the fire in rage.
|
||||||
|
Crows have been hunted and even had bounties placed on them by several governments, including by Kings of England.
|
||||||
|
Crows can use a number of calls to communicate situations and emotions.
|
||||||
|
Crows mate for life and share the care of nestlings.
|
||||||
|
Crows are often challenged by larger hunting birds, like owls and hawks; they use superior numbers when outmatched.
|
||||||
|
Crows only migrate long distances in harsh winters.
|
||||||
|
A group of crows or ravens is called a murder.
|
||||||
|
Crows live everywhere except Antarctica.
|
||||||
|
Crows are susceptible to West Nile Virus, which has felled many of them since 1999.
|
||||||
|
Crows' association with death comes from their scavenger natures -- they are often seen near the dead on battlefields.
|
||||||
|
Ravens are acrobatic fliers on par with hawks and falcons. In mating season, they put on acrobatic shows for potential mates.
|
||||||
|
Native Americans often honor ravens in their stories for their playful nature.
|
||||||
|
Ravens hunt in groups to bring down prey too large for a single bird.
|
||||||
|
Ravens range from the Arctic to the Mediterranean, building large stick nests.
|
||||||
|
Ravens have an average wild lifespan of 13 years.
|
||||||
|
Common ravens range from 24 to 30 inches long with up to a 5 foot (1.5m) wingspan, weighing in at 2.3 pounds.
|
||||||
|
Legend has it that if ravens leave the Tower of London, the fortress will fall and the British kingdom along with it.
|
||||||
|
Ravens are the largest passerine (perching) birds in North America.
|
||||||
|
Ravens can live up to 40 years in captivity or protected conditions.
|
||||||
|
https://upload.wikimedia.org/wikipedia/commons/9/92/Krummi_1.jpg
|
||||||
|
Ravens have one of the largest bills of perching birds.
|
||||||
|
Common ravens have quarrelsome family lives, but they are extremely devoted to their families.
|
||||||
|
Common ravens (Corvus corax) store food, hiding it from other ravens.
|
||||||
|
A group of ravens is commonly called a flock.
|
||||||
|
Ravens don't migrate except in the harshest winters.
|
||||||
|
In addition to their bills, ravens may drop rocks as weapons.
|
||||||
|
Young ravens are fascinated with all things new, but older ravens become more cautious and neophobic with experience.
|
||||||
|
Ravens are known to play, sliding down snowdrifts for fun and play games with wolves and other animals.
|
||||||
|
Ravens are one of only a few species known to make toys, breaking off branches for social play.
|
||||||
|
The raven is the national bird of Bhutan and the official bird of the Yukon.
|
||||||
|
The raven was the first bird sent forth by Noah but didn't return until the flood waters receded.
|
||||||
|
Ravens feed the prophet Elijah in 1 Kings 17:1 and are a subject of a parable in Luke 12:24, as a sign for man not to be materialistic.
|
||||||
|
The Native Americans saw the Raven as a creator and world-shaper.
|
||||||
|
Native American mythology holds that Raven brought the sun, moon, stars, and fire into the world.
|
||||||
|
The Norse god Odin had two ravens Huginn and Muninn (Thought and Mind) to serve as his eyes in the world.
|
||||||
|
The raven is the symbol of the Celtic figure Morrigan and the namesake of Lugh, the god responsible for creating arts and science.
|
||||||
|
The raven appears in the Quran but once, only to teach man to bury the dead in the story of Cain and Abel.
|
||||||
|
GI_Auditore finds Mutated Ravens in Prototype 2 extremely annoying.
|
||||||
|
Lost_Fragment will lose in a fight with TheRaven.
|
1
sample-conf/helptext.txt
Normal file
1
sample-conf/helptext.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
Available commands are r.raven, r.magic8, r.msg <Memo for DarkFeather>, r.google <Google search>, r.sound <Soundcloud search>, r.image <Image search>, r.wiki <Wikipedia search>, r.dict <Dictionary search>, r.yt <youtube search>, r.urban <Urban dictionary search>, r.hoogle <Haskell Hoogle search>, r.so <StackOverflow search>, r.man <manpage search>, and r.tropes <TV Tropes search>
|
4
sample-conf/loginDefaults.txt
Normal file
4
sample-conf/loginDefaults.txt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
localhost
|
||||||
|
6667
|
||||||
|
TheRaven-Test
|
||||||
|
somepass
|
20
sample-conf/magic8.txt
Normal file
20
sample-conf/magic8.txt
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
It is certain
|
||||||
|
It is decidedly so
|
||||||
|
Without a doubt
|
||||||
|
Yes definitely
|
||||||
|
You may rely on it
|
||||||
|
As I see it yes
|
||||||
|
Most likely
|
||||||
|
Outlook good
|
||||||
|
Yes
|
||||||
|
Signs point to yes
|
||||||
|
Reply hazy try again
|
||||||
|
Ask again later
|
||||||
|
Better not tell you now
|
||||||
|
Cannot predict now
|
||||||
|
Concentrate and ask again
|
||||||
|
Don't count on it
|
||||||
|
My reply is no
|
||||||
|
My sources say no
|
||||||
|
Outlook not so good
|
||||||
|
Very doubtful
|
1
sample-conf/notifications.txt
Normal file
1
sample-conf/notifications.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
TheRaven|Surprise
|
3
sample-conf/rooms.txt
Normal file
3
sample-conf/rooms.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
TheRafters
|
||||||
|
lobby
|
||||||
|
#thisisacomment
|
11
sample-conf/searches.txt
Normal file
11
sample-conf/searches.txt
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
r.google|http://google.com/search?q=|+
|
||||||
|
r.images|http://images.google.com/search?tbm=isch&q=%s|+
|
||||||
|
r.wiki|http://en.wikipedia.org/wiki/|_
|
||||||
|
r.sound|http://www.soundcloud.com/search?q=|%20
|
||||||
|
r.dict|http://www.merriam-webster.com/dictionary/|+
|
||||||
|
r.tropes|http://tvtropes.org/pmwiki/search_result.php?cx=partner-pub-6610802604051523%3Aamzitfn8e7v&cof=FORID%3A10&ie=ISO-8859-1&siteurl=&ref=&ss=&siteurl=tvtropes.org%2F&ref=www.google.com%2F&ss=5135j1581675j28&q=|+
|
||||||
|
r.yt|https://www.youtube.com/results?search_query=|+
|
||||||
|
r.urban|http://www.urbandictionary.com/define.php?term=|+
|
||||||
|
r.man|http://www.die.net/search/?q=|+
|
||||||
|
r.hoogle|https://www.haskell.org/hoogle/?hoogle=|+
|
||||||
|
r.so|http://stackoverflow.com/search?q=|+
|
1
sample-conf/whitelist.txt
Normal file
1
sample-conf/whitelist.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
DarkFeather
|
Loading…
Reference in New Issue
Block a user