Added RandomChance parameter to AutoRespond
This commit is contained in:
parent
b8abc50703
commit
4d6bd13e03
2 changed files with 36 additions and 4 deletions
|
@ -13,6 +13,7 @@ namespace Noikoio.RegexBot.Module.AutoRespond
|
|||
class ConfigItem
|
||||
{
|
||||
public enum ResponseType { None, Exec, Reply }
|
||||
private static Random ChangeRng = new Random();
|
||||
|
||||
string _label;
|
||||
IEnumerable<Regex> _regex;
|
||||
|
@ -20,12 +21,14 @@ namespace Noikoio.RegexBot.Module.AutoRespond
|
|||
string _rbody;
|
||||
private FilterList _filter;
|
||||
private RateLimitCache _limit;
|
||||
private double _random;
|
||||
|
||||
public string Label => _label;
|
||||
public IEnumerable<Regex> Regex => _regex;
|
||||
public (ResponseType, string) Response => (_rtype, _rbody);
|
||||
public FilterList Filter => _filter;
|
||||
public RateLimitCache RateLimit => _limit;
|
||||
public double RandomChance => _random;
|
||||
|
||||
public ConfigItem(JProperty definition)
|
||||
{
|
||||
|
@ -119,6 +122,24 @@ namespace Noikoio.RegexBot.Module.AutoRespond
|
|||
throw new RuleImportException("Rate limit value is invalid" + errorpfx);
|
||||
}
|
||||
}
|
||||
|
||||
// random chance
|
||||
string randstr = data["RandomChance"]?.Value<string>();
|
||||
if (string.IsNullOrWhiteSpace(randstr))
|
||||
{
|
||||
_random = double.NaN;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!double.TryParse(randstr, out _random))
|
||||
{
|
||||
throw new RuleImportException("Random value is invalid (unable to parse)" + errorpfx);
|
||||
}
|
||||
if (_random > 1 || _random < 0)
|
||||
{
|
||||
throw new RuleImportException("Random value is invalid (not between 0 and 1)" + errorpfx);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -145,6 +166,15 @@ namespace Noikoio.RegexBot.Module.AutoRespond
|
|||
// Rate limit check - currently per channel
|
||||
if (!RateLimit.AllowUsage(m.Channel.Id)) return false;
|
||||
|
||||
// Random chance check
|
||||
if (!double.IsNaN(RandomChance))
|
||||
{
|
||||
// Fail if randomly generated value is higher than the parameter
|
||||
// Example: To fail a 75% chance, the check value must be between 0.75000...001 and 1.0.
|
||||
var chk = ChangeRng.NextDouble();
|
||||
if (chk > RandomChance) return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -18,7 +18,8 @@ Sample within a [server definition](serverdef.html):
|
|||
"dumb",
|
||||
"productive conversation"
|
||||
],
|
||||
"exec": "python /home/bot/did-someone-say-botspam.py"
|
||||
"exec": "python /home/bot/did-someone-say-botspam.py",
|
||||
"RandomChance": 0.5
|
||||
}
|
||||
}
|
||||
```
|
||||
|
@ -26,8 +27,9 @@ Sample within a [server definition](serverdef.html):
|
|||
### Definition structure
|
||||
The following is a list of accepted members within an AutoRespond definition:
|
||||
* regex (*string* or *string array*) - **Required.** Regular expression pattern(s) that will invoke the response.
|
||||
* reply *(string)* - The message to send out to the channel in which the response was invoked.<sup>1</sup>
|
||||
* exec *(string)* - Command line path and optional parameters to an external program. The program's output will be sent to the channel in which the response was invoked.<sup>1</sup>
|
||||
* ratelimit *(integer)* - The amount of time in seconds in which the response may not be triggered again within the same channel. Defaults to 20.
|
||||
* reply (*string*) - The message to send out to the channel in which the response was invoked.<sup>1</sup>
|
||||
* exec (*string*) - Command line path and optional parameters to an external program. The program's output will be sent to the channel in which the response was invoked.<sup>1</sup>
|
||||
* ratelimit (*integer*) - The amount of time in seconds in which the response may not be triggered again within the same channel. Defaults to 20.
|
||||
* RandomChance (*number*) - A value between 0 and 1 representing the percent chance for the bot to respond to the corresponding trigger. Defaults to 1.0 (100%).
|
||||
|
||||
<sup>1</sup> It is **required** to have either *reply* or *exec* specified in a definition.
|
Loading…
Reference in a new issue