[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[tyndur-devel] kirc: Input-Parsing
+ kirc.pas: Befehle werden nun geparsed
+ kirc.pas: Kürzel wie /cs oder /voice implementiert
+ kirc.pas: Direkte Befehle können nur noch via /irc geschickt werden
! kirc.pas: Server auf irc.euirc.net geändert
+ kirc.pas: Channel-Frage hinzugefügt (#lost als Standardchannel)
+ kirc.pas: Bei Ende des MOTD wird der gewollte Channel gejoint
Signed-off-by: Alexander H. Kluth <hartmut@xxxxxxxxxx>
---
src/modules/pas/kirc/kirc.pas | 65
+++++++++++++++++++++++++++++++++++++----
1 files changed, 59 insertions(+), 6 deletions(-)
diff --git a/src/modules/pas/kirc/kirc.pas b/src/modules/pas/kirc/kirc.pas
index 7b6ad9b..a44a228 100644
--- a/src/modules/pas/kirc/kirc.pas
+++ b/src/modules/pas/kirc/kirc.pas
@@ -74,6 +74,12 @@ begin
ReadLn(nick);
until NickIsValid(nick);
+ Write('Channel :');
+ ReadLn(channel);
+ if channel = '' then begin
+ channel := '#lost';
+ end;
+
conn := FileOpen('tcpip:/'+server+':'+port, fmOpenReadWrite);
if conn = -1 then begin
@@ -213,6 +219,11 @@ begin
+ msg, 7);
end;
end
+
+ // 376 leutet das Ende des MOTD ein
+ else if command = '376' then begin
+ WriteConn(conn, 'JOIN ' + channel);
+ end
else if command = 'ERROR' then begin
theIRCWindow.Incoming(line, 12);
end
@@ -238,12 +249,56 @@ begin
theIRCWindow.Incoming('Ungueltiger Befehl: ' + line, 12);
end;
end else begin
- if line[1] = '/' then begin
- WriteConn(conn, Copy(line, 2, length(line)) + #10);
+ // Wir brauchen so etwas wie TStringList in der RTL
+ // Höhö, das kennen wir doch aus kedit: Wir prüfen
+ // per LeftStr, ob es ein (uns bekanntest) Kommando ist
+ if LeftStr(line, 3) = '/ns' then begin
+ command := 'PRIVMSG NickServ :' + Copy(line, 5, length(line))
+ + #10;
+ end else if LeftStr(line, 3) = '/cs' then begin
+ command := 'PRIVMSG ChanServ :' + Copy(line, 5, length(line)) +
+ #10;
+ end else if LeftStr(line, 6) = '/voice' then begin
+ // mit Copy(line, 7...) spare ich mir ein zusätzliches + " " +
+ command := 'MODE ' + channel + ' +v ' + Copy(line, 8,
+ length(line)) + #10;
+ end else if LeftStr(line, 8) = '/devoice' then begin
+ command := 'MODE ' + channel + ' -v ' + Copy(line, 8,
+ length(line)) + #10;
+ end else if LeftStr(line, 3) = '/op' then begin
+ command := 'MODE ' + channel + ' +o ' + Copy(line, 8,
+ length(line)) + #10;
+ end else if LeftStr(line, 5) = '/deop' then begin
+ command := 'MODE ' + channel + ' -o ' + Copy(line, 8,
+ length(line)) + #10;
+ end else if LeftStr(line, 6) = '/admin' then begin
+ command := 'MODE ' + channel + ' +a ' + Copy(line, 8,
+ length(line)) + #10;
+ end else if LeftStr(line, 8) = '/deadmin' then begin
+ command := 'MODE ' + channel + ' -a ' + Copy(line, 8,
+ length(line)) + #10;
+ end else if LeftStr(line, 5) = '/kick' then begin
+ space := Pos(' ', Copy(line, 7, length(line)));
+
+ command := 'KICK ' + channel + ' ' + Copy(line, 7, space-1) +
+ ' :' + Copy(line, space+1, length(line)) + #10;
+ end else if LeftStr(line, 4) = '/ban' then begin
+ command := 'MODE ' + channel + ' +b ' + Copy(line, 6,
+ length(line)) + '!*@*' + #10;
+ end else if LeftStr(line, 6) = '/unban' then begin
+ command := 'MODE ' + channel + ' -b ' + Copy(line, 8,
+ length(line)) + '!*@*' + #10;
+ end else if LeftStr(line, 6) = '/42' then begin
+ theIRCWindow.title := 'The Answer to Life, the Universe,
and Everything is ... 42';
+ end else if LeftStr(line, 4) = '/irc' then begin
+ command := Copy(line, 6, length(line));
end else begin
- theIRCWindow.Incoming('<' + nick + '> ' + line+#10, 7);
- WriteConn(conn, 'PRIVMSG '+channel+' :'+line+#10);
+ space := Pos(' ', line);
+
+ theIRCWindow.Incoming('Unbekannter Befehl ' + Copy(line,
0, space), 12);
end;
+
+ WriteConn(conn, command);
end;
end;
@@ -260,8 +315,6 @@ begin
theIRCWindow.commandHandler := @EvaluateIRCCommand;
theIRCWindow.Draw(false);
- channel := '';
-
inBuffer := '';
outBuffer := '';
while not FileEof(conn) do begin
--
1.6.5.1.1367.gcd48