Всем привет!
Ещё со времен первого знакомства со steemit, я испытывал проблему, когда пропускал все посты и комментарии, в которых меня упоминали как @phenom. Не было никаких уведомлений, и как итог, важные дискуссии, в которых я по идее должен был участвовать, проходили мимо. Узнавал я об этих комментариях либо случайно наткнувшись на них спустя несколько месяцев, либо от других людей в rocket chat, которые кидали ссылку со словами - "Чувак, посмотри, там вовсю обсуждают твою последнюю статью". И конечно же было поздно вступать в дискуссию, в которой уже пару дней как всё было обсуждено без тебя. Конечно было и есть много сервисов, которые уведомляли, если твою статью апнули, или же кто-то ее прокомментировал, но если тебя упоминули с тегом @ в какой-то сторонней статье, то это почти всегда оставалось вне зоны твоей видимости.
Почувствовал эту проблему я и со старта голоса и почти сразу решил, что пора сделать сервис, который будет уведомлять пользователей о комментариях прямо на уровне блокчейна. А в силу того, что я являюсь активным делегатом и уже давно хотел разобраться, как работать с python библиотеками нашего блокчейна, эта задача вышла на первый план.
Итак, представляю вашему внимаю своего бота. Теперь он не даст Вам остаться не у дел и будет каждый раз уведомлять, когда кто-то упомянул Ваш никнейм, посылая транзакцию в 0.001 голос прямо в Ваш кошелек вместе со ссылкой на пост. Так что вы теперь не только проинформированы, но и становитесь богаче получая голоса в свой кошелек)
Вот пример комментария/статьи, где используя тег @on0tole я дал ему понять, что это не было сказано "за его спиной":
Вот что видит @on0tole в своем кошельке:
Поэтому если Вы не хотите пропустить какое-то важное обсуждение, просто раз в день заглядывайте в свой кошелек.
Вот исходный код этого бота на языке python. Он подразумевает, что у вас уже установлены библиотки conservatorio, graphene-lib-for-golos, python-steemlib-for-golos. Как правильно их устанавливать для блокчейна Голос расскажу в одном из гайдов.
Также полезная информация - если Вы хотите, чтобы кошелек разблокировался библиотекой piston автоматически, то необходимо задать переменную среды UNLOCK="your_wallet_password"
Скрипт ниже может также использоваться в качестве примера того, как нужно взаимодействовать с нодой Голоса (это если вы решите начать делать свои собственные приложения)
from piston.steem import Steem
from pprint import pprint
import regex
#connect to public web API node
#(don't use your own if it's not adjusted being public)
steem = Steem("ws://" + "golos.steem.ws")
acc_id = 'phenom'
#Set regex version to have recursive Perl like regex and set flag to perform
#multiline search
regex.version='VERSION1'
regex.MULTILINE
#define total spent amount of golos to avoid wallets desolate
total_amount = 0
for c in steem.stream_comments():
pprint(c)
comment_text = c["body"]
#regular expression to fin all mentions
names = regex.findall(r'(?<=\s|^)@\K[^\s@]*\b',comment_text)
#convert to set to leave only unique names
names = set(names)
#skip this comment if there was no mentions
if len(names) == 0:
continue
transfered_amount = 0
#update total spent amount
total_amount += len(names) * 0.001
if (total_amount > 2):
print("There were more than 1k mentions. Probably someone abuse\n")
break
pprint(names)
for nickname in names:
#don't sent if author mentioned itself
if nickname == c["author"]:
continue
#generate memo for transaction
memo = "You have been mentioned by %s " % (c["author"]) + \
"in the post http://golos.io/%s/@%s/%s" % (c["category"], c["author"], c["permlink"])
#try to perform transaction
try:
aa = steem.transfer(nickname,0.001,"GOLOS", memo, acc_id)
except:
pass
transfered_amount += 0.001
#to avoid abuse we set limit to 100 mentions per comment
if (transfered_amount) > 0.1:
break
Ещё одно преимущество этого подхода в том, что всё происходит на уровне блокчейна и нет необходимости устанавливаться/пользоваться сторонние сервисы, которым Вы не доверяете.
В дальнейшем планируются некоторые улучшения:
- Отправка уведомлений на почту. Вы просто посылаете боту в ответ транзакцию , где в memo key добавляете команду "notify [email protected]"
- Если транзакции Вам как-то мешают и вы не хотите получать уведомления, то отправляете команду "stop". Чтобы снова возобновить отправляете "start"
- Уведомление когда кто-то ссылается на вашу статью или комментарий
Ну и конечно, если Вы считаете, что этот сервис будет полезным, то поддержите меня в роли делегата сети Голос по данной ссылке или же из вашего кошелька командной строки cli_wallet:
vote_for_witness your_id phenom true true
Ну и конечно же помните - каждый Голос важен и то, какой будет эта платформа зависит только от нас самих!
С наилучшими пожеланиями,
@phenom
Как человек с классическим инженерным образованием, в любом изобретении сначала ищу кнопку выключить )
Если я не хочу, чтобы мой кошелёк был завален такими сообщениями, куда бежать? )
В посте написано:
В одном из ближайших апдейтов можно будет отключить уведомления
Спасибо,
интересно, что на Стимит никто такого сервиса в массы не запустил, хотя в комментариях я видел упоминания, что некоторые подобных ботов себе запилили
Интересный вопрос) например сейчас обновил свой пост, в котором ссылался на трех ребят, и они снова получили уведомления, было бы не плохо отключить повторные уведомления.
да, знаю об этой проблеме. Ситуация с апдейтом постов будет обработана в одном из ближайших релизов
Еще думаю стоит для этих целей отдельный аккаунт - типа "GolosNotify" чтобы транзы приходили с него а не от тебя
Да, пусть лучше бота блочат за спам)
Сделал мемо транзакцию на русском и перевёл всё на пользователя @mention.bot.
Хорошая штука на данном этапе, но вообще было бы круто увидеть уведомления о том, что "Вас упомянули" в функционале фронт=энда.
Надо затестить уведомления на тестовом клиенте Стима....
P.S. уже тестирую аналогичный функционал для телеграм-бота
Я отстал от жизни - слишком много пустого в чате телеграмма, я не успеваю читать. Будет пост про бота в Телеграмм?
Будет, сейчас уведомления об упоминаниях @on0tole протестирую и в продакшн=))
очень удобно)
Клёвая тема!
Очень нравятся различные автоматические системы которые поддерживают сайт и помогают пользователям в соцсети. Будет время тоже запилю что-то подобное. Спасибо за код!
Хотелось бы сделать что-то вроде автоматической лотереи где будут выбираться лучшие посты и среди них будут разыгрываться голоса, возможно даже с жюри. Может в стимите есть что-то подобное чтобы можно было взять за основу?
@yaski приведи пример прикладной задачи для такого бота, тогда смогу подумать над реализацией
Проведение автоматических розыгрышей. Я попробую для начала сам реализовать такого бота.
Очень ползеная штука! Молодец!
Отличная идея и реализация непосредственно в блокчейне.
Теперь я буду получать уведомления об упоминании себя везде где возможно=)
Можно будет по такой же схеме сделать аналог Linkback бота для уведомлений о ссылках на статьи.
Сейчас кто-нибудь особо хитрый упомянет себя в комментах 1000 раз и заработает целый ГОЛОС=)
В коде эта ситуация обрабатывается. Там есть ограничение на количество упоминаний
Ну вот(
Замечательно, но я не знаю никаких питонов) библиотеки не установлены, очень жду гайда, Алесей!
Так тебе и не надо с питоном знакомиться). @anasya, просто тегай людей используя @
Ааааа! Все поняла =) я думала надо что-то устанавливать
Крутая фича! Протестим - @lehard
Похоже когда сам себя упоминаешь не работает) А так @phenom
да. Это логика такая. Когда человек сам себя упоминает ему врятли нужен нотифай)
Мне кажется вам бы с Толей скооперироваться и интегрировать это в Голос Нотифай
Уже в процессе (для ТГ) код не поможет, но результат будет аналогичным
Мы с @on0tole говорили на этот счет. Он запилит такую фичу ещё и в телеграм бота своего. Код я выложил, надеюсь это как-то поможет ускорить процесс)
Работает!
Правда что ли? @litrbooh