this.localip = rdr.GetString("bindip");
this.local = new IPEndPoint(IPAddress.Parse(this.localip), 0);
}
-
this.server = rdr.GetString("server");
this.serverport = rdr.GetInt32("serverport");
+
+ rdr.Close();
+
+ // TODO move this part into a 001 hook.
+ MySqlDataReader rdr = Info.db.queryReader("SELECT authname, authpass FROM m_id_quakenet WHERE botid = @id", new object[] { "@id", id });
+ rdr.Read();
+ this.authname = rdr.GetString("authname");
+ this.authpass = rdr.GetString("authpass");
+ rdr.Close();
}
public string connect() {
s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
s.Bind(local);
s.Connect(server, serverport);
-
- register();
+
+ register();
Stator rcvstate = new Stator();
s.BeginReceive(rcvstate.buffer, 0, 1, SocketFlags.None, new AsyncCallback(dataIn), rcvstate);
s.EndReceive(ar);
if (rcvstate.buffer[0] == '\n') {
- string linein = rcvstate.buffersb.ToString();
- processData(linein);
+ string linein = rcvstate.buffersb.ToString();
+ processData(linein);
rcvstate = new Stator();
} else if (rcvstate.buffer[0] != '\r') {
rcvstate.buffersb.Append(Encoding.ASCII.GetString(rcvstate.buffer, 0, 1));
private void processData(string data) {
log.info("<<< " + data);
- string[] parts;
- string source = null;
- if (data.StartsWith(":")) {
- parts = data.Split((char[])null, 2, StringSplitOptions.RemoveEmptyEntries);
- source = parts[0].Substring(1);
- data = parts[1];
- }
-
- parts = data.Split((char[])null, 2, StringSplitOptions.RemoveEmptyEntries);
- if (parts[0] == "PRIVMSG") {
- processMsg(source, parts[1]);
- } else if (parts[0] == "376") {
- send("JOIN #jobbig.kelsier");
- } else if (parts[0] == "PING") {
- send("PONG "+parts[1]);
- }
+ string[] parts;
+ string source = null;
+ if (data.StartsWith(":")) {
+ parts = data.Split((char[])null, 2, StringSplitOptions.RemoveEmptyEntries);
+ source = parts[0].Substring(1);
+ data = parts[1];
+ }
+
+ parts = data.Split((char[])null, 2, StringSplitOptions.RemoveEmptyEntries);
+ if (parts[0] == "PRIVMSG") {
+ processMsg(source, parts[1]);
+ } else if (parts[0] == "376") {
+ send("AUTH "+this.authname+" "+this.authpass); // TODO 001 hook
+ send("MODE "+this.nick+" +x-w");
+ send("JOIN #jobbig");
+ } else if (parts[0] == "PING") {
+ send("PONG "+parts[1]);
+ }
+ }
+ // processMsg("DimeCadmium!dime@jobbig.eu", "#mustis :hi");
+ private void processMsg(string source, string data) {
+ string[] dataparts = data.Split((char[])null, 2, StringSplitOptions.RemoveEmptyEntries);
+
+ string nick = (source.Split(new char[] { '!' }))[0];
+ string target = dataparts[0];
+ string message = dataparts[1];
+ if (message.StartsWith(":"))
+ message = message.Substring(1);
+ string[] msgparts = message.Split((char[])null, StringSplitOptions.RemoveEmptyEntries);
+
+ // TODO check msgparts[0] first char for trigger
+ string cmdstr = msgparts[0].Substring(1);
+ string[] args;
+ bool chanmsg;
+ Channel chan;
+ if (target.StartsWith("#")) {
+ chanmsg = true;
+ args = new string[msgparts.Length - 1];
+ Array.Copy(msgparts, 1, args, 0, msgparts.Length - 1);
+ chan = new Channel(target);
+ } else {
+ chanmsg = false;
+ args = new string[msgparts.Length - 2];
+ Array.Copy(msgparts, 2, args, 0, msgparts.Length - 2);
+ chan = new Channel(msgparts[1]);
+ }
+
+ User user = new User(nick);
+
+ Command cmd = new Command(this, cmdstr, args, user, chan, chanmsg);
}
- // processMsg("DimeCadmium!dime@jobbig.eu", "#mustis :hi");
- private void processMsg(string source, string data) {
- string[] dataparts = data.Split((char[])null, 2, StringSplitOptions.RemoveEmptyEntries);
-
- string nick = (source.Split(new char[] { '!' }))[0];
- string target = dataparts[0];
- string message = dataparts[1];
- if (message.StartsWith(":"))
- message = message.Substring(1);
- string[] msgparts = message.Split((char[])null, StringSplitOptions.RemoveEmptyEntries);
-
- // TODO check msgparts[0] first char for trigger
- string cmdstr = msgparts[0].Substring(1);
- string[] args;
- bool chanmsg;
- Channel chan;
- if (target.StartsWith("#")) {
- chanmsg = true;
- args = new string[msgparts.Length - 1];
- Array.Copy(msgparts, 1, args, 0, msgparts.Length - 1);
- chan = new Channel(target);
- } else {
- chanmsg = false;
- args = new string[msgparts.Length - 2];
- Array.Copy(msgparts, 2, args, 0, msgparts.Length - 2);
- chan = new Channel(msgparts[1]);
- }
-
- User user = new User(nick);
-
- Command cmd = new Command(this, cmdstr, args, user, chan, chanmsg);
- }
private void register() {
send(String.Format("NICK {0}", nick));
using System;
namespace Kelsier.Common {
- public class Command {
+ public class Command {
public Bot bot { get; private set; }
- public string cmd { get; private set; }
- public string[] args { get; private set; }
- public User user { get; private set; }
- public Channel chan { get; private set; }
- public bool chanmsg { get; private set; }
- public string replyTo { get; private set; }
-
- public Command(Bot bot, string cmd, string[] args, User user, Channel chan, bool chanmsg) {
+ public string cmd { get; private set; }
+ public string[] args { get; private set; }
+ public User user { get; private set; }
+ public Channel chan { get; private set; }
+ public bool chanmsg { get; private set; }
+ public string replyTo { get; private set; }
+
+ public Command(Bot bot, string cmd, string[] args, User user, Channel chan, bool chanmsg) {
this.bot = bot;
- this.cmd = cmd;
- this.args = args;
- this.user = user;
- this.chan = chan;
- this.chanmsg = chanmsg;
- if (chanmsg)
- this.replyTo = chan.name;
- else
- this.replyTo = user.nick;
- }
- }
+ this.cmd = cmd;
+ this.args = args;
+ this.user = user;
+ this.chan = chan;
+ this.chanmsg = chanmsg;
+ if (chanmsg)
+ this.replyTo = chan.name;
+ else
+ this.replyTo = user.nick;
+ }
+ }
}
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
+DROP TABLE IF EXISTS `bots`;
CREATE TABLE `bots` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `nick` varchar(40) NOT NULL,
+ `nick` varchar(30) NOT NULL,
`ident` varchar(10) NOT NULL DEFAULT 'kelsier',
- `realname` varchar(100) NOT NULL DEFAULT 'Kelsier IRC Bot',
+ `realname` varchar(100) NOT NULL DEFAULT 'Kelsier',
`bindip` varchar(15) DEFAULT NULL,
`server` varchar(100) NOT NULL DEFAULT 'irc.quakenet.org',
`serverport` smallint(5) unsigned NOT NULL DEFAULT '6667',
- PRIMARY KEY (`id`)
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `nick` (`nick`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
INSERT INTO `bots` VALUES (1,'Kelsier','kelsier','Kelsier IRC Bot',NULL,'irc.quakenet.org',6667);
+
+DROP TABLE IF EXISTS `m_id_quakenet`;
+CREATE TABLE `m_id_quakenet` (
+ `botid` int(10) unsigned NOT NULL,
+ `authname` varchar(15) NOT NULL,
+ `authpass` varchar(10) NOT NULL,
+ PRIMARY KEY (`botid`),
+ CONSTRAINT `m_id_quakenet_ibfk_1` FOREIGN KEY (`botid`) REFERENCES `bots` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+
+-- mysqldump -ukelsier -p kelsier --compact --add-drop-table >dbdump.sql