I needed a way to automatically accomplish this so I enlisted the help of my script guru, Andrew Cox. Although I have never met Andrew in person, I can tell you he is a bright guy who is one of the few people I know that truly speaks MikroTik's scripting language. As usual, Andrew rose to the challenge and wrote a few lines of code that function perfectly.
A few notes, first the script uses the user property "credit-price" to determine which package the customer purchased, therefore, you need to have unique prices for each rate limit. For example, if the Gold package is 128k/64k and costs $25, then users that buy the 64k/64k package that costs $25 will get the same rate limit. In this example, just change the price slightly on one of the packages and it will work correctly. For example, make the 128k/64k package $19.95 or something similar.
So, here is the code, past it into a new script item through Winbox, set the scheduler to run it once every minute or so and you will enjoy the benefits of automatic rate limits with self created user accounts.
-- Script---
Code: Select all
#Script to add rate limit's to newly created user-manager accounts.
#Written by Andrew Cox | http://www.mikrotik-routeros.com
:local counter
:local check
#Loop through all users in user-manager
:foreach counter in=[/tool user-manager user find] do={
#Check to see if comment contains "RLA" (short for 'rate limit added'). If it doesn't, this account hasn't had a rate limit set yet.
#We only check the first 3 characters, this means you can continue to use the comment field for whatever you like so long as you leave the 'RLA' untouched (if present)
:set check [:pick [/tool user-manager user get $counter value=comment] 0 3]
:if ($check="RLA") do={
#Has RLA, rate limit is already set so ignore
} else={
#Doesn't have RLA Set rate-limit based on initial purchase pricing
:if ([/tool user-manager user get $counter credit-price] ="1000") do={/tool user-manager user set $counter rate-limit="256k/128k" comment="RLA"}
:if ([/tool user-manager user get $counter credit-price] ="2500") do={/tool user-manager user set $counter rate-limit="256k/128k" comment="RLA"}
:if ([/tool user-manager user get $counter credit-price] ="4500") do={/tool user-manager user set $counter rate-limit="96k/48k" comment="RLA"}
:if ([/tool user-manager user get $counter credit-price] ="6000") do={/tool user-manager user set $counter rate-limit="128k/64k" comment="RLA"}
:if ([/tool user-manager user get $counter credit-price] ="7500") do={/tool user-manager user set $counter rate-limit="256k/128k" comment="RLA"}
}
}