wørkähølics.
Open in Telegram
Ädmîns: @gggutya @wawefiii Çhät - https://t.me/wwworkaholics
Show moreThe country is not specifiedThe category is not specified
238
Subscribers
No data24 hours
No data7 days
No data30 days
Posts Archive
238
Делаем набор
В данный момент с другом делаем фриланс агентство с акцентом на европейских заказчиков. Набираем пока что только людей.
Отрасли: дизайн, it, маркетинг(ещё не точно) . У кого хорошее портфолио, кидайте @wawefiii.
Как наберем минимальную команду для работы, то начнем запускаться. Механизм работы очень простой. Мы находим зарубежный оффер и передаем уже вам, вы обозначаете свою цену за заказ, а мы как посредник ставим свою наценку для заказчика. Получаем win-win.
i-y-k-y-k
wørkähølics. § çhät.
238
Версии:
Python==3.10.11
bitcoinlib==0.6.13
Вопрос: почему метод вверху поста не видит UXTO? Как это исправить?
Бесконечно буду благодарен, если поможете 💞
c-u-l-8-r
wørkähølics. § çhät.
238
New task!
Работа с либой bitcoinlib
Че делает код вкратце: имеется некий базовый класс и наследуются от него дочерние. В дочерних классах написаны методы для создания кошельков и отправки транзакций в сети, для которой создан дочерний класс. В коде что я скинул используется тестовая сеть bitcoin. Я создаю экземпляр класса BTCWalletManager, затем создаю кошелек, а после тестирую отправку транзакции.
Пополнить тестовый кошелек можно на сайте: ЖМЫК
Я пополнил, но почему-то метод:
uxtos = wallet.utxos_update()Не обновляет UXTO, по прежнему остается 0, а необходимо иметь больше 0. По примерам из документации (основные и за 10 минут (тут смотрите пункт Wallets) ) все должно работать. Статья про UXTO: ЖМЯК Сам код:
import json
from abc import ABC, abstractmethod
from bitcoinlib.wallets import Wallet, wallet_create_or_open
from bitcoinlib.mnemonic import Mnemonic
from sqlalchemy import create_engine
from sqlalchemy.orm import Session
DEBUG = True
# Базовый класс
class BaseWalletManager(ABC):
__instance = None
__symbol = 'None'
def __new__(cls):
if cls.__instance is None:
cls.__instance = super().__new__(cls)
return cls.__instance
def __init__(self):
self._db_uri = "sqlite:///./payment/wallets.db" # после /// идет относительный путь до бд
self._db_engine = create_engine(self._db_uri, echo=True)
self._db_session = Session(autoflush=False, bind=self._db_engine)
@abstractmethod
def create_wallet(self, name: str):
pass
@abstractmethod
def send_money(self, from_wallet: str, output_arr: [(str, int)], real_fee: int = None):
pass
class BTCWalletManager(BaseWalletManager):
__symbol = 'testnet'
def create_wallet(self, name: str ='MainTestnetWallet'):
mnemonic = Mnemonic().generate()
wallet = wallet_create_or_open(name=name,
keys=mnemonic,
network=self.__symbol,
db_uri=self._db_uri,
witness_type='segwit')
dict_wallet = wallet.get_key().as_dict(include_private=True)
dict_wallet.update({'seed': mnemonic})
return json.dumps(dict_wallet)
def send_money(self, from_wallet: str = 'MainTestnetWallet', output_arr: [(str, int)] = None, real_fee: int = None):
wallet = Wallet(from_wallet, db_uri=self._db_uri)
print('-------------FROM WALLET-------------')
keys = [key for key in wallet.keys_addresses() if key.name == 'FOR TESTING']
# Если ключа для тестировки нет, то создадим его:
if len(keys) == 0:
wallet.new_key(name='FOR TESTING', network=self.__symbol)
keys = wallet.keys_addresses()
key = keys[0]
wallet.info()
# Установка комиссии
if real_fee is None: fee = 'low'
else: fee = real_fee
uxtos = wallet.utxos_update()
if uxtos:
# для теста я не передаю кошельки, а создаю в скрипте:
if output_arr is None:
test_wallet_2 = wallet_create_or_open('Wallet for test 2', network=self.__symbol, db_uri=self._db_uri, witness_type='segwit')
print('--------------TO WALLET--------------')
test_wallet_2.info()
trans = wallet.send(output_arr=[(test_wallet_2.addresslist()[0], 200)],
input_key_id=key.id,
fee=fee,
network=self.__symbol,
offline=DEBUG)
return trans
else:
print('Деньги еще не пришли')
print('Balance %s' % wallet.balance())
print("UXTO's %s" % wallet.utxos_update())
if __name__ == '__main__':
btc = BTCWalletManager()
wallet_data = btc.create_wallet()
outputs_trans = btc.send_money(real_fee=100)
print('\n------------------\n')238
Решение проблемы:
Так как в пирограме есть отдел с клоунами, то эти самые весельчаки решили поприкалываться и не написать в документации что с чем работает.
Второй способ:
w-u-c-i-w-u-g
wørkähølics. § çhät.
await app_user.promote_chat_member(chat_id=chat.id,
user_id='@wpibu_bot',
privileges=ChatPrivileges(
can_manage_chat = True,
can_delete_messages = True,
can_manage_video_chats = True,
can_restrict_members = True,
can_promote_members = True,
can_change_info = True,
can_post_messages = True,
can_edit_messages = True,
can_invite_users = True,
can_pin_messages = True,
is_anonymous = False))
Этот код работает только для Супер Групп.
Первый способ работает только для каналов.
А для обычных групп ниче не работает🤡
Парам-парам-пам-биц-бау...
238
Гении, просыпаемся, админ балбес..
Работаю с pyrogram.
Че делает код вкратце: подрубается к аккаунту, создает группу и добавляет туда моего бота, меняет разрешения чата, а затем должен сделать бота администратором.
Почему-то выскакивает странная ошибка, которую не могу пофиксить.
Код:
c-u-l-8-r
wørkähølics. § çhät.
from pyrogram import Client
from pyrogram.raw.functions.channels.edit_admin import EditAdmin
from pyrogram.raw.types import ChatAdminRights
from pyrogram.types import ChatPermissions
import asyncio
app_user = Client(name='test_user')
async def main():
print('Я запустился')
await app_user.start()
# Create chat
chat = await app_user.create_group('Group_test2', ['@wpibu_bot'])
chat = chat.id
# Edit chat permissions
await app_user.set_chat_permissions(chat_id=chat,
permissions=ChatPermissions(can_add_web_page_previews=False,
can_change_info=False,
can_invite_users=False,
can_pin_messages=False,
can_send_media_messages=True,
can_send_messages=True,
can_send_other_messages=False,
can_send_polls=False))
channel_data = await app_user.resolve_peer(chat)
user_data = await app_user.resolve_peer('@wpibu_bot')
#Make user Admin
await app_user.invoke(EditAdmin(channel=channel_data,
user_id=user_data,
admin_rights=ChatAdminRights(change_info=True,
post_messages=True,
edit_messages=True,
delete_messages=True,
ban_users=True,
invite_users=True,
pin_messages=True,
add_admins=True,
manage_call=True,
other=True,
manage_topics=True),
rank='Admin'))
await app_user.stop()
print('Кончился')
asyncio.run(main())
Но, почему-то выдает ошибку:
pyrogram.errors.exceptions.bad_request_400.ChannelInvalid: Telegram says: [400 CHANNEL_INVALID] - The channel parameter is invalid (caused by "channels.EditAdmin")
в строке:
await app_user.invoke(EditAdmin(channel=channel_data, ...
Доки читал, стаки оверфлоу смотрел, чатГПТ доставал, ниче не помогает.
Версии:
Pyrogram==2.0.106
TgCrypto==1.2.5
Python==3.10.11
Сразу скажу ЧТО РАБОТАТЬ НЕ БУДЕТ:
1) Если вы в строке «await app_user.invoke(EditAdmin(channel=channel_data» аргументу channel будете пытаться присвоить просто id. Там надо присваивать именно экземпляр класса InputChannel.
2) Если вы будете пытаться подсказать сделать с помощью promote_chat_member. Там тоже аргумент channel должен присваивать экземпляр класса InputChannel. Даже если присваиваю что надо, то вылезает всё та же ошибка, которую я указал.
Бесконечно буду благодарен, если поможете 💞
238
comeback
Я вернулся. В последнее время было мало постов от меня. Последние месяца перед Новым годом выдались у меня самыми скучными и неинтересными за год, но это похуй. Главное, что у нас у всех всё впереди.
Выражаю всем воркаголикам свою благодарность. Потихоньку создаём свою большую, сплоченную и продуктивную команду. Всем удачи, успехов и главное здоровья в следующем году.
c-u-l-8-r
wørkähølics. § çhät.
238
Распределённые системы.
Суть распределённых систем заключается в хранении копий одних и тех же данных на разных компьютерах.
Абстракция: фотография, где каждый шарик - компьютер. Каждый компьютер хранит одно и то же.
Будем эти компьютеры называть узлами (нодами).
Да, на принципе распределенных систем баз данных построен любой блокчейн.
Что еще может быть распр. системой?
- Браузер. А точнее сам интернет. Ведь каждый сайт имеет свой айпи и домен, а если бы все миллиарды сайтов хранились на одном каком-то хранилище, то представьте сколько бы занимал поиск нужного сайта...
Репликация = синхронизация узлов = при добавлении новой ноды каждая из подключенных шлёт немного данных. Нода быстро получает те жесамые данные, что есть у других. Когда на какую-то ноду попадает новая информация, то она рассылает её на ближайшие другие, и так пока все ноды не будут одинаковы.
Статьи:
- Распределённая база данных
- Что такое распределенная система?
- Основные понятия
i-y-k-y-k
wørkähølics. § çhät.
238
Вот меня и нае*?ли.
Или нет?
Завершил очередные доработки заказа и жутко бесился с заказчика. Сначала просил делать все на английском, а потом, будто он под раскумаром, просит сделать странные вещи:
То фулл язык с англ. на рус. просит поменять, то какие-то новые разделы добавить, а после вообще сказал поставить бота на новый сервер.
Оказалось, что я сделал попросту два разных бота по одной (грубо говоря) цене. С одной стороны это ж один заказчик, тот же бот, но просто доработки.
Расклад такой: 2 бота. 1-й > урезанный на английском языке, 2-й > с расширенным функционалом на русском языке.
Честно я даже не расстроен что получил, фактически, в два раза меньше.
За все про все заработал где-то примерно 500$. Так что я не нищий.
Инфа про распределенные системы готовится, изучается, а сайт для кейса делается. Крипто кодинг изучается, а графен делается.
Некст пост, как раз таки, про расп. системы.
c-u-l-8-r
wørkähølics. § çhät.
238
Знаете че еще интересно?
А то, что между мной и заказчиком - аж 2 посредника! 1-й кодерская студия, которая от моей цены накрутила 100$. 2-й англоязычный посредник со своей базой клиентов, который накрутил еще 350$! В итоге бот обошелся заказчику в 700$.
Дорого? -для СНГ скорее всего да.
Большую ли я назвал сумму? -нет.
Нормальную. Однако стоило бы мне сделать чуть больше сетей для пополнения баланса, сделать это автоматически (без отправки id транзакции), а также автовывод средств, то я бы с чистой душой называл бы ценник в 400-450 и даже в 600$ в зависимости от кол-ва и самих сетей.
Однако я не умел, да и щас еще не разобрался как и че куда переводить. У меня были сроки да и цена уже обговорилась, так что смысла изучать не было.
После сдачи проекта я начал разбираться как устроен блокчейн, че такое ноды, сигнатурки, внешние(публичные) и закрытые ключи кошельков и т.п. Скажу так: звучит страшнее чем есть на самом деле. В этом посте я не буду рассказывать обо все этом, в интернете достаточно информации.
Еще узнал, что в крипте, как не странно, на каждом шагу используется криптография. Всякие алгоритмы консенсуса и прочие замудренные штуки стали дико интересными. Думаю купить какую-нибудь книгу, хочется знать ОТ и ДО как работает блокчейн.
Хочу напомнить, что я участвую в предпроф олимпиаде. Так вот, тут я выбрал кейс, где нужно (сам в шоке) написать практически свой блокчейн. Точнее сказать - распределенное хранилище данных. Кто был не в курсе: блокчейн - это разновидность того, что я написал в предыдущем предложении. Во многом наш кейс отличается от классического блокчейна, но у них все равно остается так много общего…
Поставьте вагон реакций, и я расскажу подробнее:
че это такое, как работает, какие статьи почитать, и чем я буду заниматься ближайшие два месяца.
В комментариях я скину ссылку на бота, который работает прямо сейчас.
А также мануал с полной логикой работы(ну почти).
See u l-8-r, m-8!
w-u-c-i-w-u-g
wørkähølics. § çhät.
238
Firśt dęǎl
Я недоделал 1 тг-бот проект, прошел тестовое задание в кодерскую студию, мне нашли заказчика за рубежом, я назвал цену от балды в 250$, выполнил заказ за неделю после занятий, получил свои первые деньги.
Да. Вот так я могу описать свои действия вкратце для первых $$$.
После на вторую неделю я делал правки и заливал на сервер эту машину.
Что же я делал?
Я делал гарант бота.
Кто не в курсе: два рандомных человека хотят провести сделку, но боятся что они обманут друг друга. Для этого есть третья сторона - бот. Покупатель пополняет баланс бота, создает сделку с продавцом, его деньги замораживаются, пока сделка не будет проведена. Продавец отправляет товар покупателю, покупатель подтверждает заказ, деньги размораживаются и идут на баланс продавца. Затем продавец выводит деньги.
Проводить сделки можно только в крипте. Я сделал возможность проводить сделки в USDT TRC-20 и Биткоинах.
w-u-c-i-w-u-g
wørkähølics. § çhät.
238
Graphene. seed phase
Админы по уши в работе.
Один готовит материалы к выступлениям, другой кодит каждую свободную минуту.
Я скоро закончу первый в жизни коммерческий заказ. Именно этим я и занимался прошлую неделю, спав всего по паре часов. Последним не горжусь, это не правильно и такое не поддерживаю, но факт есть факт. На этой неделе я немного отдыхаю и вношу правки от заказчика. Именно по этому я набрался сил и сейчас пишу этот пост.
Совсем скоро я расскажу вам все про заказ.
Пока кину спойлер в виде подключения оплаты криптой, англоязычного заказчика и первого деплоя проекта.
Graphene. растёт. Каждый день, по чуть-чуть, маленькими шагами, кирпичик за кирпичом. Это тот самый режим работы над проектом, который искали на протяжении уже 2-3 лет. Graphene первый, кто нашел его.
@wawefiii делает потрясающую презентацию для выступлений. Очень жаль, что не можем ею с вами поделиться (как минимум пока что).
Совсем скоро увидимcя, m-8 !
c-u-l-8-r
wørkähølics. § çhät.
238
почему так мало постов?
Всё очень просто. Study —> food —> work—> sleep. И так каждый день. Активно работаю над нашим проектом, скоро начну ещё второй проект. Времени очень мало. Но работа идёт, а это самое главное. Думаю на выходных сделать для вас несколько информативных постов. Всем хорошего и продуктивного дня 🆙
c-u-l-8-r
wørkähølics. § çhät.
238
monthly rate for 2 weeks.
Говорил, что за ноябрь должен пройти два блока Django. По факту, я прошел, но за две недели.
Пробегаться по каждому блоку, как в первый раз, я не буду. Мне слишком лень это писать. (Но если вы хорошо попросите, то я могу это сделать.)
Вместо этого в комментариях прикладываю видео моего сайтика, который получился.
Вот github с исходниками сайта.
Хочу поделиться еще тем, что готовлюсь к предпрофессиональной олимпиаде по информатике. Договорился, могу вполне легально пропускать каждый понедельник учебы для подготовки.
Рассказать подробнее про олимпиаду?
c-u-l-8-r
wørkähølics. § çhät.
