mIRC Home    About    Download    Register    News    Help

Topic Options
#249725 - 12/12/14 10:54 PM Timers on commands
SBDOnslaught Offline
Ameglian cow

Registered: 12/12/14
Posts: 23
Hey guys,
Keep in mind this is for Twitch.
So i need help with "timers". I've looked around and couldn't really find the same problem i was having somewhere else. Anyways, on my scripts a have, as i like to call them, anti-flooders.
Quote:
on *:text:!social:#:{
if ((%floodsocial) || ($($+(%,floodsocial.,$nick),2))) { return }
set -u10 %floodsocial On
set -u30 %floodsocial. $+ $nick On
msg $chan /me KIK Me @SBDO07 Follow me on Twitter & Instagram @YanisMT.
}

So people can't spam the command, well i have other commands that have like hour long antiflooders.. so id like to make an if statement that would tell the person how long they would have to wait before being able to use the command again.

Ex:
Me: !social
Bot: KIK Me @SBDO07 Follow me on Twitter & Instagram @YanisMT.
Me: !social
Bot: Command is ready to use in 10 seconds.
---
That type of thing.

Thank you all! laugh

Top
#249726 - 12/12/14 11:36 PM Re: Timers on commands [Re: SBDOnslaught]
JuanAm Offline
Vogon poet

Registered: 12/11/14
Posts: 149
Try this:
Code:
On *:text:*:#:{
  if ($strip($1) == !social) {
    if (%floodsocial [ $+ [ $nick ] ])  { msg # $nick Command is ready to use in  $duration($calc($ctime - $v1)) | halt }
    set -u10 %floodsocial [ $+ [ $nick ] ] $ctime
    msg # KIK Me @SBDO07 Follow me on Twitter & Instagram @YanisMT. 
  }
}

Top
#249727 - 13/12/14 12:01 AM Re: Timers on commands [Re: SBDOnslaught]
Belhifet Offline
Fjord artisan

Registered: 26/06/14
Posts: 248
Why would you use a msg response for your antispam on a command that sends a message?

Top
#249728 - 13/12/14 12:09 AM Re: Timers on commands [Re: Belhifet]
SBDOnslaught Offline
Ameglian cow

Registered: 12/12/14
Posts: 23
The timer message isn't for that command.. like a said, i have commands that have hour long timers on them and play along side with things, like points.
So when people keep spamming the command to earn points, and let's say there's 30 minutes left, at least they'll stop spamming the command for a sort period. or lets say someone recently join chat and tries to execute the command, they'll know it's already been used and they'll have to wait.

Top
#249729 - 13/12/14 12:13 AM Re: Timers on commands [Re: SBDOnslaught]
JuanAm Offline
Vogon poet

Registered: 12/11/14
Posts: 149
Originally Posted By: SBDOnslaught
The timer message isn't for that command.. like a said, i have commands that have hour long timers on them and play along side with things, like points.
So when people keep spamming the command to earn points, and let's say there's 30 minutes left, at least they'll stop spamming the command for a sort period. or lets say someone recently join chat and tries to execute the command, they'll know it's already been used and they'll have to wait.


SBDOnslaught, it worked my code?
You can change the commands and time in the -u set.

Top
#249730 - 13/12/14 12:15 AM Re: Timers on commands [Re: JuanAm]
SBDOnslaught Offline
Ameglian cow

Registered: 12/12/14
Posts: 23
JuanAm,
Seems to be working, but instead of counting down, it counts up :P

Top
#249732 - 13/12/14 01:25 AM Re: Timers on commands [Re: SBDOnslaught]
JuanAm Offline
Vogon poet

Registered: 12/11/14
Posts: 149
SBDOnslaught removes the code above.


Try this:
Code:
On *:text:*:#channel:{
  if ($strip($1) == !social) {
    if ($timer(AntiFlood [ $+ [ $nick ] ]) == $null) { set %lessnums [ $+ [ $nick ] ] 10 | .timerAntiFlood [ $+ [ $nick ] ] 10 1 dec %lessnums [ $+ [ $nick ] ] }
    else { msg # $nick Command is ready to use in %lessnums [ $+ [ $nick ] ] seconds | return }
  }
  if (%lessnums [ $+ [ $nick ] ] != 0) {
    msg $chan KIK Me @SBDO07 Follow me on Twitter & Instagram @YanisMT.
    halt  
  }
}

You have to change the #channel where this bot and time is set to 10 seconds, which also can change.
On *:text:*:#channel:{
Quote:
if ($timer(AntiFlood [ $+ [ $nick ] ]) == $null) { set %lessnums [ $+ [ $nick ] ] 10 | .timerAntiFlood [ $+ [ $nick ] ] 10 1 dec %lessnums [ $+ [ $nick ] ]



You can also add multiple commands at once:

Code:
if ($strip($1) == !social) || ($strip($1) == !command2) || ($strip($1) == !command3) || ($strip($1) == !command4) {

Top
#249735 - 13/12/14 03:58 AM Re: Timers on commands [Re: JuanAm]
SBDOnslaught Offline
Ameglian cow

Registered: 12/12/14
Posts: 23
Hey JuanAm,
Would you mind explaining it so i can work with it a bit? smile
and thank you very much for the help! smile

Top
#249739 - 13/12/14 11:39 AM Re: Timers on commands [Re: SBDOnslaught]
JuanAm Offline
Vogon poet

Registered: 12/11/14
Posts: 149
Originally Posted By: SBDOnslaught
Hey JuanAm,
Would you mind explaining it so i can work with it a bit? smile
and thank you very much for the help! smile


SBDOnslaught, I have given all the elements so you can work with the code.

You only need to modify the items marked in red.
#channel = channel where will the bot.
10 = the seconds expected the user running the command to rerun again .

The time must be modified in both places mentioned in the variable %lessnum and the timerAntiFlood.

$strip = ignores the format of colors, bold, underline, etc

[$ [$ Nick]] = customizes the timer for each user running the command.

dec = decrease the variable countdown to 1 second.

Originally Posted By: SBDOnslaught
The timer message isn't for that command.. like a said, i have commands that have hour long timers on them and play along side with things, like points.
So when people keep spamming the command to earn points, and let's say there's 30 minutes left, at least they'll stop spamming the command for a sort period. or lets say someone recently join chat and tries to execute the command, they'll know it's already been used and they'll have to wait.

If you want the antiflood not be customized for each user running the command, being that when executed by a user can not do another user until after the scheduled time, you must remove the code, all identifiers [$ [$ Nick]].
30 minutes = 1800 seconds

Example:
Code:
On *:text:*:#channel:{
  if ($strip($1) == !point) {
    if ($timer(AntiFlood) == $null) { set %lessnums 1800 | .timerAntiFlood 1800 1 dec %lessnums }
    else { msg # $nick the command has already been used, will be ready to use in $int($calc(%lessnums / 60)) minutes | return }
  }
  if (%lessnums != 0) {
    msg $chan You can now use the !point.
    halt  
  }
}


$int($calc(%lessnums / 60))= returns the integer part of the result of the arithmetic operation of dividing seconds between 60, to return me the minutes.

If you want to add more commands to antiflood, eg commands !play, !stats, you must change line 2.

Code:
if ($strip($1) == !point) || ($strip($1) == !play) || ($strip($1) == !stats) {


|| = or

I think it has all the elements to work with the code.

To learn how this code is assembled, I advise you to enter in your mIRC:
/help if then else
/help on text
/help timers
/help variables
/help identifiers


Edited by JuanAm (13/12/14 12:57 PM)

Top
#249742 - 13/12/14 03:05 PM Re: Timers on commands [Re: SBDOnslaught]
Loki12583 Online
Hoopy frood

Registered: 22/01/04
Posts: 1244
This functionality all exists in /set and $duration.

Code:
on *:text:!social:#:{ 
  if (%floodsocial) || (%floodsocial. [ $+ [ $nick ] ]) {
    var %max = $iif(%floodsocial > %floodsocial. [ $+ [ $nick ] ],$v1,$v2)
    msg # Command cannot be used for $duration(%max)
    return
  }
  set -z %floodsocial 10
  set -z %floodsocial. $+ $nick 30
  msg $chan /me KIK Me @SBDO07 Follow me on Twitter & Instagram  @YanisMT.
}

Top
#249750 - 13/12/14 11:19 PM Re: Timers on commands [Re: Loki12583]
SBDOnslaught Offline
Ameglian cow

Registered: 12/12/14
Posts: 23
You guys were a great help! Thank you so much! laugh <3

Top