create account

Steemcleaners API by howo

View this thread on: hive.blogpeakd.comecency.com
· @howo · (edited)
$230.28
Steemcleaners API
<center> ![SteemCleaners.png](https://steemitimages.com/DQmNc5J8wnGVEjoSEt1uFR5ya8E2VoidhuTVHTok49vue94/SteemCleaners.png) </center>

A few weeks ago as I was working on the steempress voting bot I figured it would be a nice idea to implement the steemcleaner blacklist to avoid voting on bad content that will get flagged anyways. So I reached out to @patrice and realized that there wasn't one. But There was an excel spreadsheet. 

So I made a first version which just pulled everything from that spreadsheet and auto updated. But then I realized that while I'm at it I might as well write a complete api for them. 

The needs are relatively simple : 

- An api to perform Create Read Update Delete (CRUD) on the data.

- Authentification via steem accounts to prevent people from editing the data 

- A get function which returns if the user is in the blacklist or low quality list

  ​

But then I wanted to produce a really clean a good product with tons of comprehensive error messages and an easy to read code which took quite some time to get right.  

The code can be found here : https://github.com/drov0/sc-api

## Database architecture :

<center>![](https://steemitimages.com/DQmWfHbg1wDXcqwV7Fy5ezu1PXBQXD9fZxkGKYiWCngFXQo/image.png)</center>

### _group : 

An abuser may have several accounts, this table is here to provide an id that will be put on the lists so that you can easily link accounts to a specific abuser. 

* name : Name of the group (Eg : noganoo)

* Description : Description of the abuser


### blacklist / low quality

Those are the actual lists where we store the account names. 

* name (primary key) : name of the account
* _group (foreign key on the id field from the _group table) : group id of the user. 
  Note that the foreign key has ON DELETE CASCADE, so if you delete the group, all the users that had that id on both lists will be deleted as well.
* category : flag category, it's used to determine at which percent the bot should flag it.
* added_by : username of the person reporting that abuser.

# API Endpoints

All queries must be done on the root (aka /) via a post request with a single variable "data" which will contain a json string with the data.

If you have curl a good way to test it is to use this command :

> curl --data 'data={json_string}' <http://localhost:8080>

If you have trouble reading the json, I encourage you to use https://jsoneditoronline.org/ to set it to a more readable format.

All operations except the get operation require authentication.

if you provide an incorrect json the api will return  :

```
{error:"Invalid json"}
```

If you provide an incorrect action the api will return :

```
{error: "Unknown action"}
```

If the api had an sql error the api will return 

```
{error: "Internal error"}
```

 In that case please contact me with the data you sent this should never happen.

## Add a group 

> curl --data 'data={"data":{"action":"add","list":"group","name":"noganoo","description":"The infamous spammer", "username":"howo", wif:"yourwifhere", "type":"memo"}}' <http://localhost:8080>
> 

Parameters :

{
  "data": {
    "action": "add", // create action
    "list": "group", // Create a new group
    "name": "noganoo", // name of the new group
    "description": "The infamous spammer", // Description of the group
    "username": "howo", // Since it's a create operation you have to authenticate 
    "wif": "yourwifhere", // Your private posting or memo key
    "type": "memo" // memo if you used your private memo key or posting if you used your posting key 
  }
}

### Returns :

```
{ok:"ok"}
```

If all went well 

```
{error: "Group name already defined"}
```

If there is already a group by that name 

```
{error: "invalid name or description"}
```

If you did not provide a name or description parameter or if one of those is empty.

## Add an user to the blacklist/low quality list 

> curl --data 'data={"data":{"action":"add","list":"blacklist","name":"noganoo","group":"noganoo","category":"1","added_by":"patrice", "username":"howo",wif:"yourwifhere", "type":"memo"}}' http://localhost:8080

{
  "data": {
    "action": "add", // Create action
    "list": "blacklist", // Add an user to the blacklist list
    "name": "Spammer123", // account name 
    "group": "noganoo", // group (group must exist)
    "category": "1", // Flag category
    "added_by": "patrice", // User that added it 
    "username": "howo", // Since it's a create operation you have to authenticate 
    "wif": "yourwifhere", // Your private posting or memo key
    "type": "memo" // memo if you used your private memo key or posting if you used your posting key 
  }
}

**Same goes to add an user to the low_quality list except the "list" parameter is to be set to "low_quality"**

example :

> curl --data 'data={"data":{"action":"add","list":"low_quality","name":"noganoo","group":"noganoo","category":"1","added_by":"patrice", "username":"howo",wif:"yourwifhere", "type":"memo"}}' http://localhost:8080

### Returns :

```
{ok: "ok"}
```

If all went well 

```
{error: "User is already in the low_quality list"}
```

If you try to insert an user in the blacklist but he's already in the low_quality list 

```
{error: "User is already in the blacklist list"}
```

If you try to insert an user in the low_quality but he's already in the blacklist 

```
{error: "User is already in the list"}
```

If you try to insert an user in a list and he's already in it.

```
{error: "Group name unknown"}
```

If the group name provided is unknown 

```
{error: "invalid parameters."}
```

If you did not set the parameters correctly. 



## Edit a group

> curl --data 'data={"data":{"action":"edit","list":"group","name":"noganoo","description":"meanie", "username":"howo",wif:"yourwifhere", "type":"memo"}}' http://localhost:8080

{
  "data": {
    "action": "edit", // edit action
    "list": "group", // edit  a  group
    "name": "noganoo", // name of the group to edit
    "description": "Stole my sweet roll.", // Updated description of the group
    "username": "howo", // Since it's an edit operation you have to authenticate 
    "wif": "yourwifhere", // Your private posting or memo key
    "type": "memo" // memo if you used your private memo key or posting if you used your posting key 
  }
}

### Returns

```
{ok: "ok"}
```

If all went well 

```
{error: "group not found"}
```

If you provided a group name that you does not exists 

```
{error: "invalid name or description"}
```

If you did not provide a name or description parameter or if one of those is empty.

### Edit the blacklist/low_quality list

> curl --data 'data={"data":{"action":"edit","list":"blacklist","name":"noganoo","group":"noganoo","category":"1","added_by":"patrice", "username":"howo",wif:"yourwifhere", "type":"memo"}}' http://localhost:8080

{
  "data": {
    "action": "edit", // Edit action
    "list": "blacklist", // edit the entry in the blacklist list
    "name": "spammer123", // account name 
    "group": "noganoo", // group (group must exist)
    "category": "1", // Flag category
    "added_by": "patrice", // User that added it 
    "username": "howo", // Since it's an edit operation you have to authenticate 
    "wif": "yourwifhere", // Your private posting or memo key
    "type": "memo" // memo if you used your private memo key or posting if you used your posting key 
  }
}

**Same goes to edit an user in the low_quality list except the "list" parameter is to be set to "low_quality"**

### Returns :

```
{ok: "ok"}
```

If everything went well 

```
{error: "username not in the list"}
```

If you provided an username that is not in the list.

```
{error: "Group name unknown"}
```

If you provided a group name that is not in the _group table 

```
{error: "invalid parameters."}
```

If you did not set the parameters correctly. 



## Delete a group 

> curl --data 'data={"data":{"action":"delete","list":"group","name":"noganoo", "username":"howo",wif:"yourwifhere", "type":"memo"}}' http://localhost:8080

{
  "data": {
    "action": "delete", // Delete operation
    "list": "group", // Delete from the group table
    "name": "noganoo", // Group name to delete
    "username": "howo", // Since it's a delete operation you have to authenticate 
    "wif": "yourwifhere", // Your private posting or memo key
    "type": "memo"// memo if you used your private memo key or posting if you used your posting key 
  }
}

Note that if you delete the group, all the users that had that id on both lists will be **deleted as well**.

### Returns :

```
{ok: "ok"}
```

If all went well

```
{error: "group not found"}
```

If you provided a group name that doesn't exists

```
{error: "invalid name"}
```

If you did not provide a group name or if the group name is empty.

### Delete from a list 

> curl --data 'data={"data":{"action":"delete","list":"blacklist","name":"spammer123", "username":"howo",wif:"yourwifhere", "type":"memo"}}' http://localhost:8080

{
  "data": {
    "action": "delete", // Delete operation
    "list": "blacklist", // Delete from the backlist 
    "name": "spammer123", // Name of the user to delete
    "username": "howo",  // Since it's a delete operation you have to authenticate 
    "wif": "yourwifhere",  // Your private posting or memo key
    "type": "memo" // memo if you used your private memo key or posting if you used your posting key 
  }
}

### Returns 

```
{ok: "ok"}
```

If all went well.

```
{error: "username not in the list"}
```

If you try to delete an username that is not in the list 

```
{error: "invalid parameters."}
```

If you do not provide a name 

```
{error: "Unknown list"} 
```

If the list parameter is neither group blacklist or low_quality



## Get an user 

> curl --data 'data={"data":{"action":"get","name":"noganoo"}}' http://localhost:8080

{
  "data": {
    "action": "get", // get operation
    "name": "noganoo" // Username that you want to test
  }
}

### Returns :

```{list:"blacklist"}```
If the user is in the blacklist 
```{list:"low_quality"}```
If the user is in the low quality list

```{list:"none"}```

If the user is in neither (yey !)

```{error: "invalid parameters."}```
If the name parameter is not set


# Technology Stack

The tech stack is pretty simple :

* Nodejs with express to receive requests

* Mysql to store the data itself 

* Steemjs to handle authentification

  ​

# Roadmap

If I manage to get some time I'll do  :

* Convert the API to rest 
* write an actual website on top of the api to allow the steemcleaners folks to interact with the api without any technical knowledge
* Do all the //TODO in the code 
* Actually put it in a production server to be used

# How to contribute?

There are a few //TODO comments in the code, you should start by implementing those. Then submitting a pull request. But of course any improvement is welcome :)
👍  , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , and 19 others
properties (23)
authorhowo
permlinksteemcleaners-api
categoryutopian-io
json_metadata"{"community":"utopian","app":"utopian/1.0.0","format":"markdown","repository":{"id":131634600,"name":"sc-api","full_name":"drov0/sc-api","html_url":"https://github.com/drov0/sc-api","fork":false,"owner":{"login":"drov0"}},"pullRequests":[],"platform":"github","type":"development","tags":["utopian-io","steemdev","technology","steem","programming"],"users":["patrice"],"links":["https://github.com/drov0/sc-api","http://localhost:8080","https://jsoneditoronline.org/"],"image":["https://steemitimages.com/DQmNc5J8wnGVEjoSEt1uFR5ya8E2VoidhuTVHTok49vue94/SteemCleaners.png","https://steemitimages.com/DQmWfHbg1wDXcqwV7Fy5ezu1PXBQXD9fZxkGKYiWCngFXQo/image.png"],"moderator":null,"config":{"questions":[{"question":"How would you describe the formatting, language and overall presentation of the post?","question_id":"dev-1","answers":[{"answer":"The post is of very high quality.","answer_id":"dev-1-a-1","value":10},{"answer":"The post is of decent quality, but not spectacular in any way.","answer_id":"dev-1-a-2","value":7},{"answer":"The post is poorly written and/or formatted, but readable.","answer_id":"dev-1-a-3","value":3},{"answer":"The post is really hard to read and the content is barely understandable.","answer_id":"dev-1-a-4","value":0}]},{"question":"How would you rate the impact and significance of the contribution to the project and/or open source ecosystem in terms of uniqueness, usefulness and potential future applications?","question_id":"dev-2","answers":[{"answer":"This contribution adds high value and holds great significance for the project and/or open source ecosystem.","answer_id":"dev-2-a-1","value":35},{"answer":"This contribution adds significant value to the project and/or open source ecosystem. ","answer_id":"dev-2-a-2","value":23},{"answer":"This contribution adds some value to the project and/or open source ecosystem.","answer_id":"dev-2-a-3","value":12.5},{"answer":"This contribution hold no value and is insignificant in impact. ","answer_id":"dev-2-a-4","value":0}]},{"question":"How would you rate the total volume of work invested into this contribution?","question_id":"dev-3","answers":[{"answer":"This contribution appears to have demanded a lot of intensive work.","answer_id":"dev-3-a-1","value":20},{"answer":"This contribution appears to have required an average volume of work.","answer_id":"dev-3-a-2","value":14},{"answer":"This contribution shows some work done.","answer_id":"dev-3-a-3","value":6},{"answer":"This contribution shows no work done.","answer_id":"dev-3-a-4","value":0}]},{"question":"How would you rate the quality of the code submitted?","question_id":"dev-4","answers":[{"answer":"High - it follows all best practices. ","answer_id":"dev-4-a-1","value":20},{"answer":"Average - it follows most best practices.","answer_id":"dev-4-a-2","value":14},{"answer":"Low - it follows some best practices.","answer_id":"dev-4-a-3","value":6},{"answer":"Very low - it doesn't follow any best practices. ","answer_id":"dev-4-a-4","value":0}]},{"question":"How would you rate the knowledge and expertise necessary to fix the bug / implement the added feature(s)?","question_id":"dev-5","answers":[{"answer":"High - a lot of research and specific knowledge was required.","answer_id":"dev-5-a-1","value":7.5},{"answer":"Average - some research and knowledge was required.","answer_id":"dev-5-a-2","value":5.25},{"answer":"Low - not much knowledge or skill were required.","answer_id":"dev-5-a-3","value":2.25},{"answer":"Insignificant - no knowledge or skills were necessary.","answer_id":"dev-5-a-4","value":0}]},{"question":"How would you rate the accuracy and readability of the commit messages?","question_id":"dev-6","answers":[{"answer":"High - they are concise, descriptive and consistent. ","answer_id":"dev-6-a-1","value":2.5},{"answer":"Average - they are mostly concise, descriptive and consistent. ","answer_id":"dev-6-a-2","value":2},{"answer":"Low - they could be more concise, descriptive or consistent.","answer_id":"dev-6-a-3","value":0.75},{"answer":"Very low - they aren't concise, descriptive or consistent at all.","answer_id":"dev-6-a-4","value":0}]},{"question":"How do you rate the quality of the comments in the code?","question_id":"dev-7","answers":[{"answer":"High - everything is well-commented and adds to the readability of the code. ","answer_id":"dev-7-a-1","value":5},{"answer":"Average - most of the code is commented and most if it adds to the readability of the code.","answer_id":"dev-7-a-2","value":3},{"answer":"Low - little of the code is commented, but it still adds to the readability.","answer_id":"dev-7-a-3","value":1.5},{"answer":"Very low - the added comments provide no value or are not present at all.","answer_id":"dev-7-a-4","value":0}]}]},"questions":null,"score":null,"total_influence":null,"staff_pick":null,"staff_pick_by":null}"
created2018-05-03 15:06:12
last_update2018-05-03 15:50:57
depth0
children12
last_payout2018-05-10 15:06:12
cashout_time1969-12-31 23:59:59
total_payout_value179.153 HBD
curator_payout_value51.128 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length10,862
author_reputation515,737,941,459,006
root_title"Steemcleaners API"
beneficiaries
0.
accountutopian.pay
weight1,500
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id53,658,422
net_rshares47,073,575,173,767
author_curate_reward""
vote details (83)
@amosbastian ·
Thanks for the contribution. It has been approved.

----------------------------------------------------------------------
Need help? Write a ticket on https://support.utopian.io.
Chat with us on [Discord](https://discord.gg/uTyJkNm).

**[[utopian-moderator]](https://utopian.io/moderators)**
properties (22)
authoramosbastian
permlinkre-howo-steemcleaners-api-20180505t120251644z
categoryutopian-io
json_metadata{"tags":["utopian-io"],"links":["https://support.utopian.io","https://discord.gg/uTyJkNm","https://utopian.io/moderators"],"app":"steemit/0.1"}
created2018-05-05 12:02:51
last_update2018-05-05 12:02:51
depth1
children0
last_payout2018-05-12 12:02:51
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length292
author_reputation174,473,586,900,705
root_title"Steemcleaners API"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id54,010,669
net_rshares0
@antonsteemit ·
$0.49
Cool, will take a deeper look at it this weekend and hope to find sth I can contribute. 
Really glad that someone did this ;) 
👍  ,
properties (23)
authorantonsteemit
permlinkre-howo-steemcleaners-api-20180503t182412195z
categoryutopian-io
json_metadata{"tags":["utopian-io"],"community":"busy","app":"busy/2.4.0"}
created2018-05-03 18:24:15
last_update2018-05-03 18:24:15
depth1
children1
last_payout2018-05-10 18:24:15
cashout_time1969-12-31 23:59:59
total_payout_value0.472 HBD
curator_payout_value0.020 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length126
author_reputation7,534,465,964,895
root_title"Steemcleaners API"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id53,689,617
net_rshares89,330,359,206
author_curate_reward""
vote details (2)
@howo ·
Thanks ! Feel free to ask me any question :)
properties (22)
authorhowo
permlinkre-antonsteemit-re-howo-steemcleaners-api-20180503t183153244z
categoryutopian-io
json_metadata{"tags":["utopian-io"],"app":"steemit/0.1"}
created2018-05-03 18:31:54
last_update2018-05-03 18:31:54
depth2
children0
last_payout2018-05-10 18:31:54
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length44
author_reputation515,737,941,459,006
root_title"Steemcleaners API"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id53,690,785
net_rshares0
@grammarnazi ·
$0.31
Minor Correction
You have a minor misspelling in the following sentence: <blockquote> Nodejs with express to recieve requests.</blockquote> It should be <i>receive</i> instead of <i>recieve</i>.
👍  , ,
properties (23)
authorgrammarnazi
permlinkre-howo-steemcleaners-api-20180503t150616618z
categoryutopian-io
json_metadata{"app":"steemit"}
created2018-05-03 15:06:15
last_update2018-05-03 15:06:15
depth1
children1
last_payout2018-05-10 15:06:15
cashout_time1969-12-31 23:59:59
total_payout_value0.274 HBD
curator_payout_value0.031 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length177
author_reputation-144,064,903,190
root_title"Steemcleaners API"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id53,658,435
net_rshares55,548,093,795
author_curate_reward""
vote details (3)
@howo ·
Good bot.
👍  
properties (23)
authorhowo
permlinkre-grammarnazi-re-howo-steemcleaners-api-20180503t151255726z
categoryutopian-io
json_metadata{"tags":["utopian-io"],"app":"steemit/0.1"}
created2018-05-03 15:12:57
last_update2018-05-03 15:12:57
depth2
children0
last_payout2018-05-10 15:12:57
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length9
author_reputation515,737,941,459,006
root_title"Steemcleaners API"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id53,659,644
net_rshares541,280,071
author_curate_reward""
vote details (1)
@lemouth ·
$0.48
Now I understand why you are constantly sleepless and tired :)
👍  
properties (23)
authorlemouth
permlinkre-howo-steemcleaners-api-20180504t074144310z
categoryutopian-io
json_metadata{"tags":["utopian-io"],"app":"steemit/0.1"}
created2018-05-04 07:41:45
last_update2018-05-04 07:41:45
depth1
children1
last_payout2018-05-11 07:41:45
cashout_time1969-12-31 23:59:59
total_payout_value0.361 HBD
curator_payout_value0.120 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length62
author_reputation338,011,164,701,274
root_title"Steemcleaners API"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id53,789,827
net_rshares87,391,844,086
author_curate_reward""
vote details (1)
@howo ·
That's one of the reasons :p
properties (22)
authorhowo
permlinkre-lemouth-re-howo-steemcleaners-api-20180504t120743902z
categoryutopian-io
json_metadata{"tags":["utopian-io"],"app":"steemit/0.1"}
created2018-05-04 12:07:45
last_update2018-05-04 12:07:45
depth2
children0
last_payout2018-05-11 12:07:45
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length28
author_reputation515,737,941,459,006
root_title"Steemcleaners API"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id53,826,324
net_rshares0
@samuel9135 ·
wow that is amazing keep up the good work sir
properties (22)
authorsamuel9135
permlinkre-howo-steemcleaners-api-20180507t093704391z
categoryutopian-io
json_metadata{"tags":["utopian-io"],"app":"steemit/0.1"}
created2018-05-07 09:37:09
last_update2018-05-07 09:37:09
depth1
children0
last_payout2018-05-14 09:37:09
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length45
author_reputation2,854,536,469,477
root_title"Steemcleaners API"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id54,348,578
net_rshares0
@steem881 ·
Great idea! I like your thought behind it. Check [my post](https://steemit.com/introduceyourself/@itsadel/reintroducing-myself-plans-getting-ready-for-a-summer-of-photography) as well
properties (22)
authorsteem881
permlinkre-steemcleaners-api-20180503t154015
categoryutopian-io
json_metadata""
created2018-05-03 15:40:15
last_update2018-05-03 15:40:15
depth1
children0
last_payout2018-05-10 15:40:15
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length183
author_reputation-796,876,938,732
root_title"Steemcleaners API"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id53,664,164
net_rshares0
@steem881 ·
Awesome post!! Keep it up and check out [THIS POST](https://steemit.com/introduceyourself/@itsadel/reintroducing-myself-plans-getting-ready-for-a-summer-of-photography) as well as I have something similar.
properties (22)
authorsteem881
permlinkre-steemcleaners-api-20180503t155853
categoryutopian-io
json_metadata""
created2018-05-03 15:58:54
last_update2018-05-03 15:58:54
depth1
children0
last_payout2018-05-10 15:58:54
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length205
author_reputation-796,876,938,732
root_title"Steemcleaners API"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id53,667,203
net_rshares0
@steembottrackerr ·
<center>https://steemitimages.com/200x200/https://s-media-cache-ak0.pinimg.com/originals/81/28/3c/81283c6aed7bdb5b9f8ad73b8ce62c2f.jpg</center>
---
<center>Hello @howo , Congratulations ✅ . Your content began to appear in the hot section.
I am the information account of "SteemBotTracker" site.
</center>
---
<center>
Your Informations
Total SBD: 2.426
Total STEEM: 0.016
</center>
---
<center>
I recommend to increase this;
You can make "Resteem" and advertise to the followers of the whale accounts.
"Resteem Bot" for you;
✅ The most profitable Resteem Whale @hottopic  has 18.500 Followers + 5200 Sp + Upvote with min +45 accounts. 
</center>
---
<center>
You can purchase "upvote" by bid bots.
"Upvote Bot"
✅ The most profitable whale in the last round. @smartsteem
</center>
---
<center>
I'm taking this message once. You need to use the #steembottrackerr tag for more information.
Those who "upvote" this interpretation will be awarded a "UpVote" prize of 100 Sbd per week per person.
I am a bot, I can not answer the comment. I hope I could help. Good luck. Sorry if I disturbed you.
</center>
properties (22)
authorsteembottrackerr
permlink20180515t104603208z
categoryutopian-io
json_metadata{"tags":["advice"],"app":"steemjs/test"}
created2018-05-15 10:46:09
last_update2018-05-15 10:46:09
depth1
children0
last_payout2018-05-22 10:46:09
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length1,129
author_reputation-1,493,369,324,060
root_title"Steemcleaners API"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id55,802,740
net_rshares0
@utopian-io ·
#### Hey @howo
We're already looking forward to your next contribution!

##### Utopian Witness!
<a href="https://v2.steemconnect.com/sign/account-witness-vote?witness=utopian-io&approve=1">Vote for Utopian Witness!</a> We are made of developers, system administrators, entrepreneurs, artists, content creators, thinkers. We embrace every nationality, mindset and belief.

**Want to chat? Join us on Discord https://discord.gg/h52nFrV**
properties (22)
authorutopian-io
permlinkre-howo-steemcleaners-api-20180506t004843238z
categoryutopian-io
json_metadata{"tags":["utopian-io"],"users":["howo"],"links":["https://v2.steemconnect.com/sign/account-witness-vote?witness=utopian-io&approve=1","https://discord.gg/h52nFrV"],"app":"steemit/0.1"}
created2018-05-06 00:48:51
last_update2018-05-06 00:48:51
depth1
children0
last_payout2018-05-13 00:48:51
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length435
author_reputation152,955,367,999,756
root_title"Steemcleaners API"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id54,110,072
net_rshares0