Виртуальная валюта в сообществе ВКонтакте

Этот поток создает виртуальную валюту (баллы) в сообществе ВКонтакте.

  • Когда пользователь оставляет свой первый комментарий под постом, ему зачисляются 5 баллов с оповещением через диалог с сообществом;
  • Если пользователь оставляет второй комментарий под тем же постом, баллы не зачисляются;
  • Когда пользователь пишет кодовое слово в диалоге с сообществом:
    • БАЛАНС - ему приходит ответ с общим количеством баллов;
    • СКИДКА - списываются 20 баллов и отправляется купон на скидку;
    • СЕРТИФИКАТ - списываются 100 баллов и приходит ответ с подтверждением, а менеджеру сообщества отправляется оповещение о пользователе, купившем подарочный сертификат, используя баллы;
  • Если у пользователя недостаточно баллов при списании, ему приходит сообщение о нехватке баллов;

Поток виртуальной валюты в сообществе ВКонтакте

JSON потока#

[
{
"id": "a692825f.b4976",
"type": "tab",
"label": "VK Баллы",
"disabled": false,
"info": ""
},
{
"id": "f841d7f0.d65118",
"type": "drom-vk-bots-long-poll",
"z": "a692825f.b4976",
"name": "",
"property": "vkEvent",
"client": "b1f965a9.7d72c8",
"x": 110,
"y": 660,
"wires": [
[
"63261493.ca3b2c"
]
]
},
{
"id": "63261493.ca3b2c",
"type": "drom-vk-switch-c-event",
"z": "a692825f.b4976",
"name": "Какое событие?",
"vkEvent": "vkEvent",
"property": "vkEventObj",
"events": [
"message_new",
"wall_reply_new"
],
"outputs": 2,
"x": 330,
"y": 660,
"wires": [
[
"4480c7c0.8a1218"
],
[
"55b3302e.eec62"
]
]
},
{
"id": "4480c7c0.8a1218",
"type": "drom-switch-str",
"z": "a692825f.b4976",
"name": "Какое сообщение?",
"inString": "vkEventObj.message.text",
"inStringType": "msg",
"rules": [
{
"t": "eq",
"v": "БАЛАНС",
"vt": "str",
"case": false
},
{
"t": "eq",
"v": "СКИДКА",
"vt": "str",
"case": false
},
{
"t": "eq",
"v": "СЕРТИФИКАТ",
"vt": "str",
"case": false
}
],
"outputs": 3,
"property": "payload",
"x": 610,
"y": 540,
"wires": [
[
"f084b50f.c3f988"
],
[
"6c99933c.8a5c3c"
],
[
"7066cce7.22f2e4"
]
]
},
{
"id": "b7cad5ce.b5f5f8",
"type": "inject",
"z": "a692825f.b4976",
"name": "Запустить настройку",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "",
"payloadType": "date",
"x": 160,
"y": 200,
"wires": [
[
"370107c7.af1548",
"83afe37.819412"
]
]
},
{
"id": "425de9c4.951148",
"type": "comment",
"z": "a692825f.b4976",
"name": "Администрирование",
"info": "",
"x": 140,
"y": 100,
"wires": []
},
{
"id": "1d228aea.2cfa25",
"type": "inject",
"z": "a692825f.b4976",
"name": "Очистить баллы",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "",
"payloadType": "date",
"x": 140,
"y": 340,
"wires": [
[
"6c398a52.7fea04"
]
]
},
{
"id": "5b7ea037.64b19",
"type": "drom-data-counter-num",
"z": "a692825f.b4976",
"storage": "6c999ed1.7d41f",
"action": "inc",
"counter": "points",
"counterType": "storId",
"key": "vkEventObj.from_id",
"keyType": "msg",
"keys": "user_ids",
"keysType": "msg",
"value": "5",
"valueType": "num",
"defValue": "0",
"defValueType": "num",
"maxValue": "",
"maxValueType": "undef",
"minValue": "",
"minValueType": "undef",
"limitRes": "20",
"limitResType": "num",
"offsetRes": "0",
"offsetResType": "num",
"dataIn": "data",
"dataInType": "msg",
"returnNewVal": true,
"name": "Зачисл баллы",
"property": "totalPoints",
"x": 1020,
"y": 780,
"wires": [
[
"7cc17126.b4e58"
]
]
},
{
"id": "370107c7.af1548",
"type": "drom-data-counter-num",
"z": "a692825f.b4976",
"storage": "6c999ed1.7d41f",
"action": "setup-counter",
"counter": "points",
"counterType": "storId",
"key": "user_id",
"keyType": "msg",
"keys": "user_ids",
"keysType": "msg",
"value": "10",
"valueType": "num",
"defValue": "",
"defValueType": "undef",
"maxValue": "",
"maxValueType": "undef",
"minValue": "",
"minValueType": "undef",
"limitRes": "20",
"limitResType": "num",
"offsetRes": "0",
"offsetResType": "num",
"dataIn": "data",
"dataInType": "msg",
"returnNewVal": true,
"name": "",
"property": "payload",
"x": 480,
"y": 200,
"wires": [
[]
]
},
{
"id": "6c398a52.7fea04",
"type": "drom-data-counter-num",
"z": "a692825f.b4976",
"storage": "6c999ed1.7d41f",
"action": "clear-counter",
"counter": "points",
"counterType": "storId",
"key": "user_id",
"keyType": "msg",
"keys": "user_ids",
"keysType": "msg",
"value": "10",
"valueType": "num",
"defValue": "",
"defValueType": "undef",
"maxValue": "",
"maxValueType": "undef",
"minValue": "",
"minValueType": "undef",
"limitRes": "20",
"limitResType": "num",
"offsetRes": "0",
"offsetResType": "num",
"dataIn": "data",
"dataInType": "msg",
"returnNewVal": true,
"name": "",
"property": "payload",
"x": 470,
"y": 340,
"wires": [
[]
]
},
{
"id": "fce022de.c136c",
"type": "drom-template",
"z": "a692825f.b4976",
"name": "Сообщение о зачислении",
"field": "apiData.message",
"fieldType": "msg",
"syntax": "handlebars",
"htmlEscape": false,
"template": "Вам начислено 5 Баллов.\nВсего у Вас {{plural totalPoints s1='% Балл' s2='% Балла' s5='% Баллов'}}.",
"x": 1380,
"y": 780,
"wires": [
[
"ec876039.005b"
]
]
},
{
"id": "ec876039.005b",
"type": "change",
"z": "a692825f.b4976",
"name": "Данные vk api",
"rules": [
{
"t": "set",
"p": "apiData.random_id",
"pt": "msg",
"to": "",
"tot": "date"
},
{
"t": "set",
"p": "apiData.user_id",
"pt": "msg",
"to": "vkEventObj.from_id",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 1360,
"y": 820,
"wires": [
[
"447b54b8.edce5c"
]
]
},
{
"id": "447b54b8.edce5c",
"type": "drom-vk-api-call",
"z": "a692825f.b4976",
"name": "Отправ оповещение",
"data": "apiData",
"dataType": "msg",
"method": "messages.send",
"methodType": "str",
"property": "payload",
"client": "b1f965a9.7d72c8",
"apiV": "5.126",
"x": 1380,
"y": 860,
"wires": [
[]
]
},
{
"id": "83afe37.819412",
"type": "drom-data-relationships-num",
"z": "a692825f.b4976",
"storage": "6c999ed1.7d41f",
"action": "setup-rels",
"rels": "post_commenter",
"relsType": "storId",
"value1": "inviter",
"value1Type": "msg",
"value2": "invitee",
"value2Type": "msg",
"value1Req": "inviter",
"value1ReqType": "msg",
"value2Req": "invitee",
"value2ReqType": "msg",
"limitRes": "20",
"limitResType": "num",
"offsetRes": "0",
"offsetResType": "num",
"name": "",
"property": "payload",
"x": 530,
"y": 140,
"wires": [
[]
]
},
{
"id": "55b3302e.eec62",
"type": "drom-data-relationships-num",
"z": "a692825f.b4976",
"storage": "6c999ed1.7d41f",
"action": "has",
"rels": "post_commenter",
"relsType": "storId",
"value1": "inviter",
"value1Type": "msg",
"value2": "invitee",
"value2Type": "msg",
"value1Req": "vkEventObj.post_id",
"value1ReqType": "msg",
"value2Req": "vkEventObj.from_id",
"value2ReqType": "msg",
"limitRes": "20",
"limitResType": "num",
"offsetRes": "0",
"offsetResType": "num",
"name": "Получ наличие в комментаторах поста",
"property": "isCommented",
"x": 680,
"y": 800,
"wires": [
[
"f09a9653.57edc8"
]
]
},
{
"id": "f09a9653.57edc8",
"type": "switch",
"z": "a692825f.b4976",
"name": "Уже комментировал?",
"property": "isCommented",
"propertyType": "msg",
"rules": [
{
"t": "false"
},
{
"t": "else"
}
],
"checkall": "false",
"repair": false,
"outputs": 2,
"x": 740,
"y": 840,
"wires": [
[
"5b7ea037.64b19"
],
[]
],
"outputLabels": [
"Нет",
"Да"
]
},
{
"id": "7cc17126.b4e58",
"type": "drom-data-relationships-num",
"z": "a692825f.b4976",
"storage": "6c999ed1.7d41f",
"action": "add",
"rels": "post_commenter",
"relsType": "storId",
"value1": "inviter",
"value1Type": "msg",
"value2": "invitee",
"value2Type": "msg",
"value1Req": "vkEventObj.post_id",
"value1ReqType": "msg",
"value2Req": "vkEventObj.from_id",
"value2ReqType": "msg",
"limitRes": "20",
"limitResType": "num",
"offsetRes": "0",
"offsetResType": "num",
"name": "Запомн комментатора поста",
"property": "isCommented",
"x": 1070,
"y": 860,
"wires": [
[
"fce022de.c136c"
]
]
},
{
"id": "c5dabc1c.244ca",
"type": "comment",
"z": "a692825f.b4976",
"name": "БАЛАНС",
"info": "",
"x": 900,
"y": 380,
"wires": []
},
{
"id": "e982e245.45287",
"type": "comment",
"z": "a692825f.b4976",
"name": "СКИДКА",
"info": "",
"x": 900,
"y": 500,
"wires": []
},
{
"id": "a7531b56.e85aa8",
"type": "comment",
"z": "a692825f.b4976",
"name": "СЕРТИФИКАТ",
"info": "",
"x": 920,
"y": 620,
"wires": []
},
{
"id": "1a33f25c.4d23ee",
"type": "comment",
"z": "a692825f.b4976",
"name": "КОММЕНТАРИЙ К ПОСТУ",
"info": "",
"x": 640,
"y": 740,
"wires": []
},
{
"id": "49e30eb4.01ec3",
"type": "comment",
"z": "a692825f.b4976",
"name": "ВХОД. СООБЩЕНИЕ",
"info": "",
"x": 620,
"y": 480,
"wires": []
},
{
"id": "70f4c558.435aec",
"type": "drom-template",
"z": "a692825f.b4976",
"name": "Баланс",
"field": "apiData.message",
"fieldType": "msg",
"syntax": "handlebars",
"htmlEscape": false,
"template": "На данный момент у Вас {{plural totalPoints s1='% Балл' s2='% Балла' s5='% Баллов'}}.",
"x": 1120,
"y": 420,
"wires": [
[
"5bfcfc7f.12a354"
]
]
},
{
"id": "5bfcfc7f.12a354",
"type": "change",
"z": "a692825f.b4976",
"name": "Данные vk api",
"rules": [
{
"t": "set",
"p": "apiData.random_id",
"pt": "msg",
"to": "",
"tot": "date"
},
{
"t": "set",
"p": "apiData.user_id",
"pt": "msg",
"to": "vkEventObj.message.from_id",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 1420,
"y": 400,
"wires": [
[
"2d75ea0d.ce1776"
]
]
},
{
"id": "2d75ea0d.ce1776",
"type": "drom-vk-api-call",
"z": "a692825f.b4976",
"name": "Отправка ответа",
"data": "apiData",
"dataType": "msg",
"method": "messages.send",
"methodType": "str",
"property": "payload",
"client": "b1f965a9.7d72c8",
"apiV": "5.126",
"x": 1430,
"y": 440,
"wires": [
[]
]
},
{
"id": "f084b50f.c3f988",
"type": "drom-data-counter-num",
"z": "a692825f.b4976",
"storage": "6c999ed1.7d41f",
"action": "get-by-key",
"counter": "points",
"counterType": "storId",
"key": "vkEventObj.message.from_id",
"keyType": "msg",
"keys": "user_ids",
"keysType": "msg",
"value": "5",
"valueType": "num",
"defValue": "0",
"defValueType": "num",
"maxValue": "",
"maxValueType": "undef",
"minValue": "",
"minValueType": "undef",
"limitRes": "20",
"limitResType": "num",
"offsetRes": "0",
"offsetResType": "num",
"dataIn": "data",
"dataInType": "msg",
"returnNewVal": true,
"name": "Получ баллы",
"property": "totalPoints",
"x": 920,
"y": 420,
"wires": [
[
"70f4c558.435aec"
]
]
},
{
"id": "6c99933c.8a5c3c",
"type": "change",
"z": "a692825f.b4976",
"name": "Данные продукта",
"rules": [
{
"t": "set",
"p": "price",
"pt": "msg",
"to": "20",
"tot": "num"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 930,
"y": 540,
"wires": [
[
"97cea47a.b61d68"
]
]
},
{
"id": "7066cce7.22f2e4",
"type": "change",
"z": "a692825f.b4976",
"name": "Данные продукта",
"rules": [
{
"t": "set",
"p": "price",
"pt": "msg",
"to": "100",
"tot": "num"
},
{
"t": "set",
"p": "notifyManager",
"pt": "msg",
"to": "true",
"tot": "bool"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 930,
"y": 660,
"wires": [
[
"87671eb9.483e4"
]
]
},
{
"id": "65b43475.12eacc",
"type": "drom-data-counter-num",
"z": "a692825f.b4976",
"storage": "6c999ed1.7d41f",
"action": "get-by-key",
"counter": "points",
"counterType": "storId",
"key": "vkEventObj.message.from_id",
"keyType": "msg",
"keys": "user_ids",
"keysType": "msg",
"value": "5",
"valueType": "num",
"defValue": "0",
"defValueType": "num",
"maxValue": "",
"maxValueType": "undef",
"minValue": "",
"minValueType": "undef",
"limitRes": "20",
"limitResType": "num",
"offsetRes": "0",
"offsetResType": "num",
"dataIn": "data",
"dataInType": "msg",
"returnNewVal": true,
"name": "Получ баллы",
"property": "totalPoints",
"x": 1420,
"y": 600,
"wires": [
[
"5312d3c5.97616c"
]
]
},
{
"id": "5312d3c5.97616c",
"type": "switch",
"z": "a692825f.b4976",
"name": "Хватает ли баллов?",
"property": "totalPoints",
"propertyType": "msg",
"rules": [
{
"t": "gte",
"v": "price",
"vt": "msg"
},
{
"t": "else"
}
],
"checkall": "false",
"repair": false,
"outputs": 2,
"x": 1660,
"y": 600,
"wires": [
[
"75544e0f.a8b69"
],
[
"9365569b.398478"
]
],
"outputLabels": [
"Да",
"Нет"
]
},
{
"id": "75544e0f.a8b69",
"type": "drom-data-counter-num",
"z": "a692825f.b4976",
"storage": "6c999ed1.7d41f",
"action": "dec",
"counter": "points",
"counterType": "storId",
"key": "vkEventObj.message.from_id",
"keyType": "msg",
"keys": "user_ids",
"keysType": "msg",
"value": "price",
"valueType": "msg",
"defValue": "0",
"defValueType": "num",
"maxValue": "",
"maxValueType": "undef",
"minValue": "",
"minValueType": "undef",
"limitRes": "20",
"limitResType": "num",
"offsetRes": "0",
"offsetResType": "num",
"dataIn": "data",
"dataInType": "msg",
"returnNewVal": true,
"name": "Вычет баллов",
"property": "totalPoints",
"x": 1900,
"y": 560,
"wires": [
[
"3d0dc448.2ba97c"
]
]
},
{
"id": "3d0dc448.2ba97c",
"type": "drom-template",
"z": "a692825f.b4976",
"name": "Продукт",
"field": "apiData.message",
"fieldType": "msg",
"syntax": "handlebars",
"htmlEscape": false,
"template": "Вы использовали {{plural price s1='% Балл' s2='% Балла' s5='% Баллов'}}.\n\n{{productInfo}}",
"x": 2100,
"y": 560,
"wires": [
[
"6b60bef5.a8388",
"e59a20b3.3639d"
]
]
},
{
"id": "9365569b.398478",
"type": "drom-template",
"z": "a692825f.b4976",
"name": "Не хватает баллов",
"field": "apiData.message",
"fieldType": "msg",
"syntax": "handlebars",
"htmlEscape": false,
"template": "У Вас недостаточно Баллов.\n\nВсего у Вас {{plural totalPoints s1='% Балл' s2='% Балла' s5='% Баллов'}}. Для покупки нужно {{price}}.",
"x": 1910,
"y": 640,
"wires": [
[
"6b60bef5.a8388"
]
]
},
{
"id": "97cea47a.b61d68",
"type": "drom-template",
"z": "a692825f.b4976",
"name": "Купон на скидку",
"field": "productInfo",
"fieldType": "msg",
"syntax": "handlebars",
"htmlEscape": false,
"template": "Ваш купон на скидку: СКИДКА10",
"x": 1150,
"y": 540,
"wires": [
[
"65b43475.12eacc"
]
]
},
{
"id": "87671eb9.483e4",
"type": "drom-template",
"z": "a692825f.b4976",
"name": "Сертификат",
"field": "productInfo",
"fieldType": "msg",
"syntax": "handlebars",
"htmlEscape": false,
"template": "Скоро наш менеджер пришлет Вам информацию о подарочном сертификате.",
"x": 1130,
"y": 660,
"wires": [
[
"65b43475.12eacc"
]
]
},
{
"id": "6b60bef5.a8388",
"type": "change",
"z": "a692825f.b4976",
"name": "Данные vk api",
"rules": [
{
"t": "set",
"p": "apiData.random_id",
"pt": "msg",
"to": "",
"tot": "date"
},
{
"t": "set",
"p": "apiData.user_id",
"pt": "msg",
"to": "vkEventObj.message.from_id",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 2500,
"y": 580,
"wires": [
[
"30212348.e2191c"
]
]
},
{
"id": "30212348.e2191c",
"type": "drom-vk-api-call",
"z": "a692825f.b4976",
"name": "Отправка ответа",
"data": "apiData",
"dataType": "msg",
"method": "messages.send",
"methodType": "str",
"property": "payload",
"client": "b1f965a9.7d72c8",
"apiV": "5.126",
"x": 2510,
"y": 620,
"wires": [
[]
]
},
{
"id": "9e8f818b.fdd3b",
"type": "change",
"z": "a692825f.b4976",
"name": "Данные vk api",
"rules": [
{
"t": "set",
"p": "apiData.random_id",
"pt": "msg",
"to": "",
"tot": "date"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 2500,
"y": 440,
"wires": [
[
"5a4245ea.7f1e6c"
]
]
},
{
"id": "5a4245ea.7f1e6c",
"type": "drom-vk-api-call",
"z": "a692825f.b4976",
"name": "Отправка оповещения",
"data": "apiData",
"dataType": "msg",
"method": "messages.send",
"methodType": "str",
"property": "payload",
"client": "b1f965a9.7d72c8",
"apiV": "5.126",
"x": 2530,
"y": 480,
"wires": [
[]
]
},
{
"id": "33e1ebef.24ba04",
"type": "drom-template",
"z": "a692825f.b4976",
"name": "Оповещение менеджеру",
"field": "apiData.message",
"fieldType": "msg",
"syntax": "handlebars",
"htmlEscape": false,
"template": "[ПОКУПКА СЕРТИФИКАТА]\nСсылка на сообщение: https://vk.com/gim{{vkEvent.group_id}}?sel={{vkEventObj.message.peer_id}}&msgid={{vkEventObj.message.id}}",
"x": 2530,
"y": 360,
"wires": [
[
"3fe9ecad.5502f4"
]
]
},
{
"id": "3fe9ecad.5502f4",
"type": "change",
"z": "a692825f.b4976",
"name": "👨‍💼 Id менеджера",
"rules": [
{
"t": "set",
"p": "apiData.user_id",
"pt": "msg",
"to": "1",
"tot": "num"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 2510,
"y": 400,
"wires": [
[
"9e8f818b.fdd3b"
]
]
},
{
"id": "e59a20b3.3639d",
"type": "switch",
"z": "a692825f.b4976",
"name": "Нужно оповестить менеджера?",
"property": "notifyManager",
"propertyType": "msg",
"rules": [
{
"t": "true"
}
],
"checkall": "false",
"repair": false,
"outputs": 1,
"x": 2180,
"y": 420,
"wires": [
[
"33e1ebef.24ba04"
]
],
"outputLabels": [
"Да"
]
},
{
"id": "8dee1b17.7fdb38",
"type": "inject",
"z": "a692825f.b4976",
"name": "Забыть комментаторов",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "",
"payloadType": "date",
"x": 170,
"y": 280,
"wires": [
[
"e3cb966a.792ef8"
]
]
},
{
"id": "e3cb966a.792ef8",
"type": "drom-data-relationships-num",
"z": "a692825f.b4976",
"storage": "6c999ed1.7d41f",
"action": "clear-rels",
"rels": "post_commenter",
"relsType": "storId",
"value1": "inviter",
"value1Type": "msg",
"value2": "invitee",
"value2Type": "msg",
"value1Req": "inviter",
"value1ReqType": "msg",
"value2Req": "invitee",
"value2ReqType": "msg",
"limitRes": "20",
"limitResType": "num",
"offsetRes": "0",
"offsetResType": "num",
"name": "",
"property": "payload",
"x": 530,
"y": 280,
"wires": [
[]
]
},
{
"id": "b1f965a9.7d72c8",
"type": "drom-vk-api-config",
"apiV": "5.126",
"name": "Мое сообщество VK"
},
{
"id": "6c999ed1.7d41f",
"type": "drom-data-config",
"name": "",
"dbType": "sqlite",
"sqliteFile": "my-data.sqlite"
}
]

Настройка#

  1. Скопируйте JSON потока и импортируйте в ваш Ботодром - у вас появится новая вкладка "VK Баллы"
  2. Откройте боковую панель узлов конфигурации и настройте конфиг-узлы:
    • Мое сообщество VK - Введите токен вашего сообщества ВКонтакте. Инструкции по получению токена сообщества вы можете найти на боковой панели справки, в документации к узлу drom-vk-api-config. При настройке Long Poll API в вашем сообществе выберите версию API "5.126", и убедитесь, что в типах события включены опции "Входящее сообщение" и "Добавление" комментария на стене.
    • Файл my-data.sqlite - Для хранения данных используется файл my-data.sqlite. При желании можно выбрать другой файл.
  3. Найдите в потоке узел под названием "👨‍💼 Id менеджера", щелкните дважды по нему мышью и введите ваши данные:
    • apiData.user_id - Замените значение 1 на id пользователя ВКонтакте, которому будет приходить оповещение о пользователе, купившем подарочный сертификат.
  4. Нажмите Готово.
  5. Нажмите Развернуть.
  6. В потоке найдите секцию "Администрирование" (верхняя левая часть потока). Нажмите кнопку узла "Запустить настройку", чтобы настроить хранилища данных о баллах и комментаторах постов.
  7. Готово. Попробуйте теперь оставить комментарий к посту и написать баланс в диалоге с сообществом.
Совет

В секции "Администрирование" также есть узлы "Очистить баллы" и "Забыть комментаторов". Они могут пригодиться при тестировании. Нажатие по кнопке узла "Очистить баллы" сбрасывает баллы участников. А нажатие по кнопке узла "Забыть комментаторов" сбрасывает данные о пользователях написавших комментарии к постам.