Database Nodes
Manage and query user data within your bot. These nodes let you search, update, and retrieve user information stored in BotGami's database.
Why Database Nodes?
Use Cases:
- 🔍 Search for users by criteria (location, sign-up date, tags)
- 📊 Build admin dashboards (user lists, statistics)
- 🔄 Update user metadata (tags, scores, custom fields)
- 📤 Broadcast to specific user segments

🔍 Search Users (db.search_users)
Find users matching specific criteria from your bot's database.
Configuration
| Setting | Description |
|---|---|
| Filter | Query conditions (e.g., tags contains "premium") |
| Limit | Max results (default: 100) |
| SortBy | Field to sort by |
| SortOrder | asc or desc |
Inputs
| Input | Type | Description |
|---|---|---|
In | FLOW | Trigger execution |
Filter | String | Dynamic filter expression |
Limit | Number | Max results |
Outputs
| Output | Type | Description |
|---|---|---|
NEXT | FLOW | Search complete |
Users | Array | List of user objects |
Count | Number | Total results found |
Error | FLOW | Query failed |
Filter Syntax
Field Operator Value
Examples:
- signup_date > "2024-01-01"
- tags contains "vip"
- last_active < "7 days ago"
- city == "New York"
- age >= 18 and verified == true
User Object Fields
Each user object contains:
user_id— Telegram User IDfirst_name,last_name,usernamesignup_date— When they started the botlast_active— Last interaction timestamptags— Array of tagsmetadata— Custom fields (object)
Example: Find VIP Users
[db.search_users]
Filter: tags contains "vip" and last_active > "30 days ago"
Limit: 50
SortBy: last_active
SortOrder: desc
↓ Users output
[For Each user in Users]
↓
[Send Message to user.user_id]
Text: "Hey {{user.first_name}}, we miss you! 🎉"
[Screenshot: db.search_users node showing filter configuration]
Example: Admin Dashboard
Command: /admin stats
[db.search_users]
Filter: signup_date > "this month"
↓ Count
[Send: "📊 New users this month: {{Count}}"]
✏️ Update User (db.update_user)
Modify user data — add tags, update custom fields, or change metadata.
Configuration
| Setting | Description |
|---|---|
| UserID | Which user to update |
| Updates | Fields to modify |
Inputs
| Input | Type | Description |
|---|---|---|
In | FLOW | Trigger |
UserID | Number | Target user ID |
Updates | Object | Fields to update |
Outputs
| Output | Type | Description |
|---|---|---|
Success | FLOW | Updated |
Error | FLOW | Failed |
User | Object | Updated user object |
Updatable Fields
{
"tags": ["premium", "verified"], // Replace tags array
"metadata": { // Merge into metadata
"score": 150,
"level": 5,
"subscribed": true
}
}
Example: Add VIP Tag
User completes purchase
[db.update_user]
UserID: {{user.id}}
Updates: {
"tags": ["vip", "paying"],
"metadata": {
"plan": "premium",
"upgraded_at": "{{$now()}}"
}
}
↓ Success
[Send: "✅ Upgraded to VIP!"]
Example: Leaderboard Score
User wins game
[data.transform]
Expression: var.score + 10
↓
[db.update_user]
UserID: {{user.id}}
Updates: {
"metadata": {
"score": {{transformed_value}}
}
}
[Screenshot: db.update_user showing metadata update]
📥 Get User (db.get_user)
Retrieve complete user data by User ID.
Inputs
| Input | Type | Description |
|---|---|---|
In | FLOW | Trigger |
UserID | Number | User to fetch |
Outputs
| Output | Type | Description |
|---|---|---|
Found | FLOW | User exists |
NotFound | FLOW | User doesn't exist |
User | Object | Full user object |
Example: Check User Status
Admin: Check user 123456
[db.get_user]
UserID: 123456
↓ Found
[Send: "User: {{User.first_name}}
Tags: {{User.tags}}
Last active: {{User.last_active}}"]
↓ NotFound
[Send: "User not found in database"]
Common Patterns
Pattern 1: Segment Broadcast
Send announcement to all premium users
[db.search_users]
Filter: tags contains "premium"
Limit: 1000
↓ Users
[For Each user in Users]
↓
[action.send]
ChatID: {{user.user_id}}
Text: "🎉 Premium-only announcement!"
Pattern 2: User Scoring System
User answers correctly
[db.get_user]
UserID: {{user.id}}
↓ Found
[data.transform]
Input: {{User.metadata.score}}
Expression: ($ or 0) + 10 // Default to 0 if no score
↓
[db.update_user]
Updates: { "metadata": { "score": {{result}} } }
↓
[Send: "✅ +10 points! Total: {{result}}"]
Pattern 3: Tag Management
Command: /tag add vip @username
[Extract username from command]
↓
[db.search_users]
Filter: username == "{{extracted_username}}"
↓ Users[0]
[db.get_user]
UserID: {{Users[0].user_id}}
↓ Tags
[data.array_push]
Array: {{Tags}}
Item: "vip"
↓
[db.update_user]
Updates: { "tags": {{new_array}} }
↓
[Send: "✅ Tagged {{username}} as VIP"]
Pattern 4: Activity Report
Admin command: /report
[db.search_users]
Filter: last_active > "7 days ago"
↓ Count as active_count
[db.search_users]
Filter: signup_date > "this month"
↓ Count as new_count
[Send: "📊 Activity Report:
Active (7d): {{active_count}}
New (month): {{new_count}}"]
Filter Examples
Time-Based
signup_date > "2024-01-01"
last_active < "30 days ago"
last_active > "this week"
Tag-Based
tags contains "premium"
tags not contains "banned"
tags in ["vip", "moderator"]
Metadata
metadata.score > 100
metadata.verified == true
metadata.plan == "premium"
Combined
tags contains "active" and last_active > "7 days ago" and metadata.score >= 50
Best Practices
1. Limit Results
✅ Limit: 100 // Reasonable batch size
❌ Limit: 10000 // May timeout
2. Index Important Fields
Common search fields (tags, signup_date) are pre-indexed for fast queries.
3. Batch Processing
For large user lists, use pagination:
[db.search_users] Limit: 100, Offset: 0
Process batch
[db.search_users] Limit: 100, Offset: 100
Process batch
...
4. Error Handling
[db.update_user]
↓ Success
[Confirm]
↓ Error
[Log error + Notify admin]
5. Tags Strategy
✅ tags: ["premium", "active", "verified"]
❌ tags: ["premium_2024_01_15_user_123"] // Too specific
Use metadata for detailed info:
metadata: {
"plan": "premium",
"plan_start": "2024-01-15",
"features": ["feature1", "feature2"]
}
Security Notes
⚠️ Important: Database nodes should typically be restricted to admin commands or protected flows
Recommended Pattern:
[Command /admin]
↓
[logic.condition]
Expression: user.id in [ADMIN_ID_1, ADMIN_ID_2]
↓ True
[Allow database operations]
↓ False
[Send: "⛔ Admin access only"]
Quick Reference
| Node | Use For |
|---|---|
db.search_users | Find users by criteria, build segments |
db.update_user | Add tags, update scores/metadata |
db.get_user | Retrieve full user data by ID |
Next Steps
- Data Nodes → — Process search results
- Flow Control → — Loop through users
- Actions → — Send to user segments