Script Scheduler added a random interval possibility

Script Scheduler added a random interval
This commit is contained in:
Anon 2022-09-25 22:39:54 +00:00 committed by GitHub
commit 4d276ced71
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 37 additions and 4 deletions

View file

@ -20,6 +20,7 @@ namespace MinecraftClient.ChatBots
public bool triggerOnTime = false; public bool triggerOnTime = false;
public bool triggerOnInterval = false; public bool triggerOnInterval = false;
public int triggerOnInterval_Interval = 0; public int triggerOnInterval_Interval = 0;
public int triggerOnInterval_Interval_Max = 0;
public int triggerOnInterval_Interval_Countdown = 0; public int triggerOnInterval_Interval_Countdown = 0;
public List<DateTime> triggerOnTime_Times = new List<DateTime>(); public List<DateTime> triggerOnTime_Times = new List<DateTime>();
public bool triggerOnTime_alreadyTriggered = false; public bool triggerOnTime_alreadyTriggered = false;
@ -75,7 +76,27 @@ namespace MinecraftClient.ChatBots
case "triggerontime": current_task.triggerOnTime = Settings.str2bool(argValue); break; case "triggerontime": current_task.triggerOnTime = Settings.str2bool(argValue); break;
case "triggeroninterval": current_task.triggerOnInterval = Settings.str2bool(argValue); break; case "triggeroninterval": current_task.triggerOnInterval = Settings.str2bool(argValue); break;
case "timevalue": try { current_task.triggerOnTime_Times.Add(DateTime.ParseExact(argValue, "HH:mm", CultureInfo.InvariantCulture)); } catch { } break; case "timevalue": try { current_task.triggerOnTime_Times.Add(DateTime.ParseExact(argValue, "HH:mm", CultureInfo.InvariantCulture)); } catch { } break;
case "timeinterval": int interval = 1; int.TryParse(argValue, out interval); current_task.triggerOnInterval_Interval = interval; break; case "timeinterval":
int interval = 1;
int intervalMax = 0;
if (argValue.Contains("-"))
{
string[] parts = argValue.Split("-");
if (parts.Length == 2)
{
int.TryParse(parts[0].Trim(), out interval);
int.TryParse(parts[1].Trim(), out intervalMax);
}
else interval = 1;
}
else int.TryParse(argValue, out interval);
current_task.triggerOnInterval_Interval = interval;
current_task.triggerOnInterval_Interval_Max = intervalMax;
break;
case "script": current_task.action = "script " + argValue; break; //backward compatibility with older tasks.ini case "script": current_task.action = "script " + argValue; break; //backward compatibility with older tasks.ini
case "action": current_task.action = argValue; break; case "action": current_task.action = argValue; break;
} }
@ -158,7 +179,12 @@ namespace MinecraftClient.ChatBots
{ {
if (task.triggerOnInterval_Interval_Countdown == 0) if (task.triggerOnInterval_Interval_Countdown == 0)
{ {
task.triggerOnInterval_Interval_Countdown = task.triggerOnInterval_Interval; int time = task.triggerOnInterval_Interval;
if (task.triggerOnInterval_Interval_Max != 0)
time = new Random().Next(task.triggerOnInterval_Interval, task.triggerOnInterval_Interval_Max);
task.triggerOnInterval_Interval_Countdown = time;
LogDebugToConsoleTranslated("bot.scriptScheduler.running_inverval", task.action); LogDebugToConsoleTranslated("bot.scriptScheduler.running_inverval", task.action);
PerformInternalCommand(task.action); PerformInternalCommand(task.action);
} }

View file

@ -24,6 +24,13 @@ action=script event.txt
triggerOnFirstLogin=true triggerOnFirstLogin=true
action=script startup.txt action=script startup.txt
# Intervals can be random
# To define a random interval between 2 numbers, use <numer>-<number>, example: 1-100
[Task]
triggerOnInterval=true
timeInterval=1-15
action=send I am triggered!
# Of course, the tasks file can contain as much tasks as you want. # Of course, the tasks file can contain as much tasks as you want.
# Another example triggered on logging in and every night at midnight: # Another example triggered on logging in and every night at midnight: