Код и описание как с ним работать, чтобы запустить самостоятельно лежит на
https://github.com/ksantoprotein/tipbots
Голосовать за заявку - https://golos.id/workers#
Так как далее начну добавлять свои фишки, то оставляю основной каркас бота на растерзание всех желающих. Масштабируйте как хотите, используйте в своих группах, добавляйте новый функционал. Кароч продвигайте голос и его донаты на телеграм пространстве.
Если прям совсем совсем не понимаете питон, но хотите запустить - держите мое видео по установке питона с некоторыми секретами.
GOLOS
В папке golos располагается бот для блокчейна Golos
About
Основная функция бота это автоклейминг дивидендов ваших аккаунтов на единый тип баланс. Далее в групповых чатах где добавлен бот вы можете донатить участников подключеных (если нет, то в боте бесплатная регистрация) посредством ответа на его сообщения либо плюсиками (до пяти штук) где каждый плюсик это 1% от вашего текущего тип-баланса, либо осуществить прямой донат ответом tipXXX где XXX целое число.
При этом если бот определит ссылку на пост на голосе (идентификаторы 'golos.in' 'golos.id' 'golos.today'), то донат уйдет не автору комментария, а автору поста.
Так же если есть сторонняя ссылка и кто-то оставил свою голосовую метку (GOLOS:login где login - это ваш аккаунт на голосе), то бот так же отправит донат не автору поста, а владельцу метки на стороннем ресурсе (к примеру youtube).
При желании вы можете отключить отчеты бота по донатам и клеймам.
Installation
Необходимые библиотеки для работы бота:
https://github.com/ksantoprotein/thallid-golos.git
https://github.com/ksantoprotein/thallid-tg.git
Их нужно установить, а папку golos скачать
Редактируем файл storage.py
переменной token присваиваем токен вашего бота который вы получаете у @BotFather
maska - любая текстовая строка позволяющая вам просто визуально идентифицировать какой бот работает
в golos_reg указываете необходимое для регистрации новых пользователей, так указываете аккаунт бота на блокчейне GOLOS (account) и указываете приватный активный ключ (wif) необходимые для регитрации. В поле fee вводите значение ликвидных токенов которые перепадают новичку а так же его долг вам по реферальной программе.
Перед запуском bot.py отредактируйте help
вместо моих msg укажите ссылки на ваи посты с описанием как регаться в боте и о чем в целом бот и для чего.
Далее запускаете файл bot.py и если все корректно начнется работа.
Documentation
Основное сердце ботов это библиотека Menu из телеграмм библиотеки. Она позволяет вам конструировать чат диалог с ботом посредством кнопочек и реакций на них. Бот запоминает состояние каждого юнита и даже если вы перезапустите бота диалог продолжится с последней точки.
В основе лежит файл menu.py в котором прописывается необходимая информация.
Так в словаре menu перечисляются уровни диалога с ботом (start, menu, setting) - это идентификаторы куда необходимо перейти в последствии. К примеру после start в поле action прописываются три кнопки (label) и в конце обозначаются to_level - на какой уровень диалога в последствии боту необходимо перейти. Регулировать количество кнопок можно просто добавлением записей в списке action. Если кнопок слишком много то вы можете расставить перенос кнопой на следующие строчки параметром row. Если он True, то следующие кнопки будут располагаться на след строке в меню телеграмм бота.
В поле label обозначается имя кнопки для удобства их можно выделить в отдельные переменные, на примере back. Это словарь в котором один из ключей это "label". Удобно редактировать и менять так как кнопка возврата (Back) используется постоянно. Следующий ключ это message - указываете сообщения которое выдаст бот юниту при нажатии на выбранную кнопку. Библиотека позволяет поддерживать любое кол-во языков, поэтому в переменной back есть ключ message который содержит в себе и русский вариант (Russian) и английский (English), при желании бот может переключаться между языками.
Таким образом используя файл menu.py вы можете редактировать menu как вам угодно создавая и удаляя кнопки и выстраивая логику перехода от уровня к уровню. Старайтесь делать название уровней осмысленно (а не 1 2 3 4 5), чтобы не запутываться далее.
К сожалению это часть так называемой статики, только шаблоны и каркас. Так как при нажатии кнопок или введения каких-то сообщений боту бот должен как то реагировать, то это прописывается отдельно, при этом вы сами указываете когда необходимо выполнить что-то еще боту помимо перехода по каркасу который вложен в класс Menu.
В теле самого бота необходимо исполнить два момента.
Первый это прописать все активные события исходя из названий прописанных вами уровней диалога.
Первые строчки определяют поведение бота когда происходит личная или групповая переписка, прямое сообщение или ответ на итд итд
а в переменную self.commands грузится поведение бота в тех или иных ситуациях.
К примеру ключ help:Intro указывает что необходимо выполнить когда юнит нажмет кнопку Intro в уровне диалога help. А функция self.help_intro как раз получит управление (при этом текст message боту будет как раз Intro). Если же просто указать уровень без двоеточия, к примеру golosreg - это значит что после того как юнит что то введет (отличное от нажатия кнопок) то исполится функция self.golosreg в message которого будет передан тот самы вводимый текст.
Другими словами бот отслеживает действия юнита и если это кнопки то он проверяет нужно ли что-то еще выполнить по активации кнопки или можно просто последовать на след уровень, так же отслеживает было ли что-то введено конкретное или просто нажата кнопка на переход.
И после того как вы прописали команды в каркас кнопок и диалогов необходимо провести инициализацию класса Menu
self.bot_menu = Menu(menu.menu, self.commands, self.tg)
Первое это каркас из кнопок и переходов, второе это активные действия бота, а второе собственно сама оболочка бота с необходимым внутренними командами. (Можно даже несколько ботов одновременно запустить таким образом)
Код на уровне джуна, слабовато для библиотеки.
@vvk так без дипломов и все работает
Более конструктивно.
if __name__ == '__main__'
внутри модулей???В общем, расти и расти.
@vvk
от табуляции отказываться не буду в 4 пробела. это не прям уж отче наш... благо код меняется в 1 секунду на 4 пробела кому надо (равно как и наоборот)
с логгером так же нет времени дружить. когда мою либу брали для енгина то их кодер спокойно заменил все мои принты на логгер и не парился. у меня пока отслеживание визуальное и посмотриваю на экран. не критично для исполнения
линтеры не юзаю как раз по причине табуляции. по сути у меня не такой сложный и запутанный код. не дорос до такой необходимости
докстриг юзаю. но только в критичных классах которые необходимы мне самому для дальнейшей работы. все подряд описывать пока смысла не вижу.
-6 пайпитон наскоком не получилось освоить, а когда понял что модули ставят из архива с гита, то и не видело смысла разбираться с тем что требует дополнительных усилий. так же и с тестами. у себя то есть набор файлов чтобы прогнать на исполнение все функции, но опять таки не такая сложность либ
про геттекст не слышал, понятное дело что кастомные словари чисто проба пера, про это обязательно почитаю
рефакторинг дело нужное, но профессиональное, оставлю это для тех кто получает 40 долларов в час, а мне еще расти и расти в этом направлении
в тех модулях которые они нужны такое есть. в либах которые имеют зависимости они бесполезны так как не запустятся
10 верисионирование обязательно почитаю. чуть позже, есть такая необходимость
@ksantoprotein как нехорошо... ломаем систему и просим за это оплату?
@raldin какую систему?
@ksantoprotein как называется такое
@raldin там прямым текстом написано. что-то непонятно?