mIRC Bot Delay for mIRC

Hello,

I have a question. Im using Nightbot for my commands. uptime, spam Protection etc. But I have my own Bot on mIRC. If someone type !commands, my Bot will respond to it. Its just a normal mIRC script with:

on :TEXT::*: {
if ($chan == #channelname) {
if ($1 == !commands) { msg $chan !uptime; !stream }

for example. How can I build in an DELAY so like this command, can only write every 5 seconds and the bot respond to it every 5 seconds? Since this is an own bot, it doesnt have any webinterface like Nightbot where you can change the delay with a slider.

Hope someone can help me.

Psuedo Code:
ON TEXT ā€œ!commandsā€ IN CHANNEL #matt_thomas DO

CHECK VARIABLE %flood.matt_thomas, IF THERE RETURN <-RETURN - halts a currently executing script and allows the calling routine to continue processing.

set -uTIME %variable VALUE" <-will set a variable that decays over TIME in seconds

msg CHANNEL MESSAGE

Actual script:

ON *:TEXT:!commands:#matt_thomas: {
if (%flood.matt_thomas) { return }
set -u10 %flood.matt_thomas On
msg $chan !uptime; !stream
}

Notes, you can leave the variable as %flood with no channel name after it to have a ā€œglobalā€ delay in all channels, or you can do a channel specific variable that will only limit it per channel.

Change 10 to any value. I usually find around 6-8 seconds to work out ok, depending on speed of chat and amount of lines you do, you may want to tweak it.

Hey Mat,
I suggest you wrap you code in a code block;

like this.

Otherwise great code, but Iā€™d like to offer an alternative.
Getting lots of timers can slow down mIRC if you ever think about expanding, making them per command, or thought this would be a great way to do something per user basis.

ON *:TEXT:!commands:#matt_thomas: {
  if (%flood.matt_thomas == $null || %flood.matt_thomas + 5000 < $ticks) {
    set %flood.matt_thomas $ticks
    msg $chan !uptime; !stream
  }
}

This wil not use timers, but instead just check the local time and compare it (in miliseconds).
the 5000 says 5 second delay.
If you want a per command basis Iā€™d suggest creating an easily expandable script like this;

ON *:TEXT:*:#matt_thomas: {

  // for easy naming - defines the the "response" for command $1
  var %command= %command. [ $+ [ $1 ] ] 

  // stores the last use of command $1
  var %floodcommand = %flood.matt_thomas. [ $+ [ $1 ] ] 


  // checks if %command exists, that is, the command var has a 'response' in it.
  // then checks if the %floodcommand (of that specific command) is non existant or far enough back
  if (%command && (%floodcommand == $null || %floodcommand + 5000 < $ticks)) {
    //sets the flood command time to $ticks
    set %flood.matt_thomas. [ $+ [ $1 ] ]  $ticks 

    // sends the response
    msg $chan %command
  }
}

With that script, every command has a 5 Seconds own delay. You can now add commands by going into your variables and creating a command like this:
%command.!NAME ANSWER
for example:
%command.!commands !youtube, !Stream,!uptime

You donā€™t have to add anything to the function for more commands.
IE: hardcoding your ā€˜commandsā€™ into the script isnā€™t nessecary. with this you can even let mods add commands.

1 Like

Thanks for the tips!

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.