Bots.Business - Help
  • Welcome
  • Getting started
  • Create bot from Google Table
  • App
    • Reset or Update Your Password
  • Commands
    • Answer
    • Aliases
    • Keyboard
    • Groups
    • Wait for answer
    • Auto Retry (AR)
  • Coding: BJS
    • Variables
    • Bot functions
    • Message broadcasting and editing
    • User functions
    • Properties
    • Always running commands
    • Error command: "!"
    • Lists
      • Migration from properties to list
    • Api functions
    • BB Admin functions
    • Admin Panel
    • Send HTTP request
    • Web App
    • Caching
    • Inline Bot
    • BJS Security
    • Good coding practices
    • Top errors
  • Git
    • Import bot from Git repository
    • Export bot to Git repository
    • Repository structure
    • File: bot.json
    • Automatic importing on Git push
  • Iterations. How to reduce theys?
  • Limitations
  • Cloud
  • Reports
  • Deep Linking - pass any params on Bot starting
  • How to link chat account with BB account?
  • BB Inspection
  • Protected bot
  • VS Code
  • How to...
  • Smart Bot
    • Overview
    • Lang File
    • SmartBot
    • SmartTasker
    • Amount Dialog
  • Libs
    • What it is - Libs?
    • Libs development
    • RefferalLib
    • ResourcesLib
    • Random
    • MembershipChecker (MCL)
    • Cooldown Lib
    • CurrencyConverter
    • Lang
    • TopBoardLib
    • QiwiPayments
    • Coinbase (CB)
    • CoinPayments (CP)
    • OxaPay
    • CryptoJS
    • CurrencyQuote
    • GoogleApp
    • GoogleTableSync
    • Guard
    • Webhooks lib
    • DateTimeFormat Lib
  • Store
    • BB Point Bot
    • Welcome bot
    • Help bot
    • SRB Demo Keyboard Tools
Powered by GitBook
On this page
  • List initialization
  • Create new list
  • Remove list
  • Recount list
  • Calculate the amount of all props and users
  • Properties management
  • Add bot property to bot list
  • Add user property to user list
  • Add user property to bot list
  • Reject property
  • Remove property
  • Reject all properties (and all users)
  • Remove all properties (and reject all users)
  • Users management
  • Add user
  • Reject user
  • Reject all users
  • Getting data
  • Getting props from list
  • Getting users from list
  • Paginating
  • User searching
  • Getting user by id from list
  • Checking the user's existence in the list
  • Statistics

Was this helpful?

  1. Coding: BJS

Lists

PreviousError command: "!"NextMigration from properties to list

Last updated 1 year ago

Was this helpful?

Use Lists to store large amounts of data. List is a quick way to and data. Also list is preferred way for organize .

List - it is a collection of properties or users.

Examples:

  • history (orders history, transactions, payments history, locations history, etc)

  • large price lists

  • table of cities with population

  • results for

  • referrals list

Do not use JSON property to collect a large array. This is a very bad practice.

"Execution timeout" error - it is typical error if you use JSON prop for large data.

Use a List.

List initialization

Before using the list (new or existing), you need to initialize it.

List can be global for Bot:

let list = new List({ name: "MyList" })

Bot.inspect(list.exist) // false for new List, true for already exist list

or can be personal for user:

let list = new List({ name: "MyList", user: user })

// or for user id
let list = new List({ name: "MyList", user_id: user.id })

After it you can perform another list methods

Create new list

// for list saving
if(!list.exist){
  list.create()
}

Remove list

list.remove();

Recount list

Recalculate all statistical data in list.

Can spent 5-30 seconds and more for big list. So you need perform this task on background once in week/day or hour.

if (list.isRecountNeeded()) {
    list.recount({
        // this command will be runned after recount
        // onComplete: 'onCompleteListRecount'
    });
}

you can get delay time in ms:

// total delay in ms
list.recount_delay.total

// need to wait for next recount in ms
list.recount_delay.current_value

recount lag:

// you can change lag for next recount
// it is 1000 ms by default 
// prefer to use 1000 - 2000
list.recount_delay.lag = 1000; 

Calculate the amount of all props and users

list.count;  // integer value

Properties management

Add bot property to bot list

Bot property can be added to List for bot

Example. Bot can have price list.

Bot.setProperty({
  name: 'product1',
  value: 'Nano Cloud',
  type: 'string',
  list: 'PaidPlans'  // bot list will be created if not exist
});

Add user property to user list

User property can be added to List for user

Example. User can have Orders list

User.setProperty({
  name: "order125",
  value: { product_id: "product1", price: 28 },
  type: "json",
  list: "Orders",  // bot list will be created if not exist
});

Add user property to bot list

User property can be added to List for bot

Example. Bot can have top customers list.

let list = new List({ name: "TopCustomers" })
if(!list.exist){ list.create() }

User.setProperty({
  name: "customer" + user.id,
  value: 20, // total income in USD
  type: "float",
  list: list,
  // you can set this prop for other user also:
  // user_id: other_user.id
});

Reject property

Reject property from list without destroying by prop name

list.rejectProperty("stringProp");

Remove property

Reject property from list and destroy it by prop name

list.removeProperty("stringProp");

Reject all properties (and all users)

Reject all properties from list

this method reject all properties and all users from list

list.rejectAll();

Remove all properties (and reject all users)

Remove all properties from list

this method remove all properties and reject all users from list

list.rejectAll();

Users management

Add user

list.addUser(user);

// or if you have id only
// list.addUser({ id: user.id });

Reject user

Reject user from list

list.rejectUser(user);
// or by id
list.rejectUser({ id: user.id });

Reject all users

Reject all users from list

list.rejectAllUsers();

Getting data

Getting props from list

let props = list.get();
Bot.inspect(props[0])

/* result will be like:
  {
    "name": "stringProp",
    "value": "Bad Apple",
    "user": {
      "id": null
    },
    "created_at": "2020-11-09T01:46:52.270Z",
    "updated_at": "2020-11-09T01:46:52.270Z"
  }
*/

Getting users from list

let users = list.getUsers();
Bot.inspect(users[0])

Paginating

We have pages for data. Data is given page by page from the first page.

One page have 100 items by default.

// page 1
let props = list.get();
let users = list.getUsers();

// page 2
list.page = 2
props = list.get();  // getting props from page 2
users = list.getUsers(); // getting users from page 2

// it is possible to change default per page
list.per_page = 10 // 100 by default

// total pages
let total_pages = list.total_pages;

User searching

Getting user by id from list

// getting user from list if exist
list.getUser({ id: user.id })

Checking the user's existence in the list

list.haveUser(user)

// or by id:
list.haveUser({ id: user.id })

Statistics

Is available for integer and float props

list.count  // total props + users count

Need before

Need before

Inline Bot
get
search
statistics
recount
recount