@@ -41,6 +41,7 @@ TIRCLogBot = class(TObject)
4141 procedure Help (const ATarget: String);
4242 procedure Version (const ATarget: String);
4343 procedure Replay (const ATarget: String; ACount: Integer);
44+ procedure Search (const ATarget, AQuery: String);
4445 protected
4546 public
4647 constructor Create(const AConfig: TBotConfig);
@@ -73,7 +74,7 @@ procedure TIRCLogBot.OnDisconnected(Sender: TObject);
7374procedure TIRCLogBot.OnNotice (ASender: TIdContext; const ANickname, AHost,
7475 ATarget, ANotice: String);
7576begin
76- debug (' >> NOTICE: <%s:%s> (%s) "%s".' , [
77+ info (' >> NOTICE: <%s:%s> (%s) "%s".' , [
7778 ANickname,
7879 AHost,
7980 ATarget,
@@ -84,7 +85,7 @@ procedure TIRCLogBot.OnNotice(ASender: TIdContext; const ANickname, AHost,
8485procedure TIRCLogBot.OnServerQuit (ASender: TIdContext; const ANickname, AHost,
8586 AServer, AReason: String);
8687begin
87- debug (' >> QUIT: <%s:%s> %s "%s".' ,[
88+ info (' >> QUIT: <%s:%s> %s "%s".' ,[
8889 ANickname,
8990 AHost,
9091 AServer,
@@ -95,7 +96,7 @@ procedure TIRCLogBot.OnServerQuit(ASender: TIdContext; const ANickname, AHost,
9596procedure TIRCLogBot.OnJoin (ASender: TIdContext; const ANickname, AHost,
9697 AChannel: String);
9798begin
98- debug (' >> JOIN: <%s:%s> %s.' , [
99+ info (' >> JOIN: <%s:%s> %s.' , [
99100 ANickname,
100101 AHost,
101102 AChannel
@@ -114,7 +115,7 @@ procedure TIRCLogBot.OnPrivateMessage(ASender: TIdContext; const ANickname,
114115 strings: TStringArray;
115116 count: Integer;
116117begin
117- debug (' >> PRIVMSG: <%s:%s>(%s) "%s".' , [
118+ info (' >> PRIVMSG: <%s:%s>(%s) "%s".' , [
118119 ANickname,
119120 AHost,
120121 ATarget,
@@ -169,6 +170,19 @@ procedure TIRCLogBot.OnPrivateMessage(ASender: TIdContext; const ANickname,
169170 end ;
170171 exit;
171172 end ;
173+ if Pos(' .search' , Trim(AMessage)) = 1 then
174+ begin
175+ strings:= AMessage.Split([' ' ]);
176+ if Length(strings[1 ]) > 2 then
177+ begin
178+ Search(ANickname, strings[1 ]);
179+ end
180+ else
181+ begin
182+ FIRC.Say(ANickname, ' I will only search if query is 3 characters or more.' );
183+ end ;
184+ exit;
185+ end ;
172186 end
173187 else
174188 begin
@@ -185,13 +199,18 @@ procedure TIRCLogBot.Help(const ATarget: String);
185199 FIRC.Say(ATarget, ' Commands:' );
186200 FIRC.Say(ATarget, ' .help - This help information.' );
187201 FIRC.Say(ATarget, ' .version - Version and info about the bot.' );
188- FIRC.Say(ATarget, ' .replay [count] - Raplays last <count> lines. Default is last 10 lines.' );
202+ FIRC.Say(ATarget, ' .replay [count] - Replays last <count> lines. Default is last 10 lines.' );
203+ Sleep(5000 );
204+ FIRC.Say(ATarget, ' .search [query] - Searches for <query> in the logs.' );
205+ FIRC.Say(ATarget, ' Will only search if <query> is 3 characters or more.' );
206+ FIRC.Say(ATarget, ' Will only use the first word after the command. No multi word search(yet?).' );
207+ FIRC.Say(ATarget, ' Returns the last 10 lines with the searched <query>.' );
189208end ;
190209
191210procedure TIRCLogBot.Version (const ATarget: String);
192211begin
193212 debug(' Version command.' );
194- FIRC.Say(ATarget, Format(' Version: %s, %s' ,[
213+ FIRC.Say(ATarget, Format(' Version: %s; Source: %s' ,[
195214 cVersion,
196215 cRepoURL
197216 ]));
@@ -208,10 +227,27 @@ procedure TIRCLogBot.Replay(const ATarget: String; ACount: Integer);
208227 lines.Free;
209228end ;
210229
230+ procedure TIRCLogBot.Search (const ATarget, AQuery: String);
231+ var
232+ lines: TStringList;
233+ begin
234+ debug(' Search command: "%s"' , [AQuery]);
235+ lines:= FDB.Search(AQuery);
236+ if lines.Count > 0 then
237+ begin
238+ FReplay.Add(ATarget, lines);
239+ end
240+ else
241+ begin
242+ FIRC.Say(ATarget, ' Your query returned no lines.' );
243+ end ;
244+ lines.Free;
245+ end ;
246+
211247procedure TIRCLogBot.Run ;
212248begin
213249 try
214- debug (' Connecting...' );
250+ info (' Connecting...' );
215251 FIRC.Connect;
216252 except
217253 on e:Exception do
@@ -220,7 +256,7 @@ procedure TIRCLogBot.Run;
220256 end ;
221257 end ;
222258 try
223- debug (' Joining channel: "%s"...' , [FConfig.Channel]);
259+ info (' Joining channel: "%s"...' , [FConfig.Channel]);
224260 FIRC.Join(FConfig.Channel);
225261 except
226262 on e:Exception do
@@ -234,13 +270,13 @@ procedure TIRCLogBot.Run;
234270
235271procedure TIRCLogBot.Shutdown ;
236272begin
237- debug (' Terminating Replay Thread.' );
273+ info (' Terminating Replay Thread.' );
238274 FReplay.Terminate;
239- debug (' Waiting for Replay Thread to terminate...' );
275+ info (' Waiting for Replay Thread to terminate...' );
240276 FReplay.WaitFor;
241277 if FIRC.Connected then
242278 begin
243- debug (' Disconnecting...' );
279+ info (' Disconnecting...' );
244280 try
245281 if FJoinedChannel then FIRC.Say(FConfig.Channel, ' Boss sais I need to have a wee nap. See Y'' All later...' );
246282 FIRC.Disconnect(' ZzZzZzZzZzZzZzZz...' );
0 commit comments