Iterations. How to reduce theys?
All iterations on Bots.Business are paid. You can choose payment plan with different iterations count.

What it is - "iteration"?

Each payment plan has its own iteration limit.
1 iteration it is:
  • income message to bot
  • ​Bot.runCommand(command) or Bot.run in the BJS spend 1 iteration
  • Pressing the keyboard button
  • Pressing the inline keyboard button
  • 1 Auto Retry - it is 1 iteration
  • 1 received webhook - it is 1 iteration
  • 5 chats in Bot.runAll command - 1 iteration
  • 5 sended message on mass broadcasting - 1 iteration
  • 5 chats on Information refreshing (in Bot dashboard) - spend 1 iteration
  • 100 incoming messages in blocked chat with method Bot.blockChat(chat.id)
​
5 iterations it is:
​
Single command execution - 1 iteration
Iterations are restored every month. Each payment plan has its own iteration limit.

Extra Points

  • If you do not have enough iterations, Extra Points are spent.
  • Unused Extra Points remain for the next month.
  • You can get Extra Points for πŸ’Ž BB Points or buy them.
​

How to get more iterations?

You can upgrade your Plan, buy Extra Points or order BB Cloud with unlimited iterations.
​

How to reduce iterations count?

Reduce income messages to bot:
  • remove it from super groups
  • remove un useful commands
Reduce Bot.runCommand in BJS
Reduce Auto Retry calls

Beware of endless loops

Use Bot.runCommand, Bot.run, Bot.runAll carefully.
Example 1
Bad code example. Command /check
1
Bot.runCommand("/task")
Copied!
Command /task
1
...
2
Bot.runCommand("/check")
3
...
Copied!
So we have now scheduled /task in /check. But /task also have run for /check
You will end up in an infinite loop and your iterations will quickly end
Example 2
Bad code example. Command /check
1
Bot.run(command: "/task", run_after: 60*60) // 1 hour delay
2
​
3
​
Copied!
Command /task
1
...
2
Bot.runCommand("/check")
3
...
Copied!
So we have now scheduled /task in /check with delay for 1 hour. But /task also have run for /check
But here we have delay for 1 hour. So we have 1 task per hour (and per user!). Is it good?
No! Because user can run /check command several times. For example 6 times in one minute. You will be have 6 background tasks during 1 hour instead of 1 tasks. Also any users can execute this command for several times.
You will end up in an infinite loop and your iterations will quickly end
Be very careful with Bot.run methods
​

Beware of big loops

Very bad example:
Command check:
1
var user = options.result.status
2
User.setProperty("status", user, "string")
3
if ((user == "member") | (user == "administrator") | (user == "creator")) {
4
Bot.runCommand("join2")
5
User.addToGroup("user")
6
}
7
​
8
if (user == "left") {
9
Bot.sendMessage("*⚠️ Not Joined :- @Kjtricks_Official *")
10
}
Copied!
Command join2
1
var channel = "@MyChanell1"
2
let id = user.telegramid;
3
​
4
Api.getChatMember({ chat_id: channel, user_id: id, on_result: "check2" })
Copied!
​
Command check2
1
var user = options.result.status
2
User.setProperty("status", user, "string")
3
if ((user == "member") | (user == "administrator") | (user == "creator")) {
4
Bot.runCommand("join3")
5
User.addToGroup("user")
6
}
7
​
8
if (user == "left") {
9
Bot.sendMessage("*⚠️ Not Joined :- @Kjtricks_Official *")
10
}
Copied!
and etc!
join1 > check1 > join2 > check2 > .... join10 > check10
What is problem?
  • each Api.getChatMember spent 1 - 3 sec for execution
  • Bot.runCommand run new BJS immediately!
We have 10 join + 10 check. So it will be 10 - 30 secs per 1 message from 1 user.
  • On Nano Cloud second user must wait this 30 secs! Also even Business Cloud is completely down!
  • each Bot.runCommand burn 1 iterations. We have 20 iterations here!
Fix
  • Use MCLib​
  • Use Bot.run with run_after. It run task in background (Users don't have to wait)
  • Do not use Bot.run in chain. It is not good.
Last modified 6mo ago