Ответы пользователя по тегу Python
  • Как мне проверить, что монеты на разных биржах одинаковые?

    Buchachalo
    @Buchachalo
    Межбиржевой арбитраж. Штука интересная.
    Можно потратить некоторое количество денег и провалидировать все монеты между биржами тупо пересылая минимальное количество с адреса на адрес. Потеряешь на fee чуть чуть. Этот процесс можно автоматизировать.
    Ну нужно учесть что сети вывода и ввода (и вообще возможность такая) на каждой бирже разная. У кого то есть только ввод без вывода. У кого то есть только сеть эфириума, она по моему очень дорогая и долгая. Там подводных камней миллион.
    По названию токена только не сравнивай, есть куча монет с одним и тем же названием но по факту смарт-контракты разные.
    Ответ написан
    Комментировать
  • Как сделать чтобы после выполнения команды, значения анулировались?

    Buchachalo
    @Buchachalo
    @bot.message_handler(commands=['selection'])
    def bujet(message):
        is_age = False
        if not is_age:
            bot.send_message(message.chat.id, "Ваш бюджет:")
            age = 0;
            @bot.message_handler(content_types=['text'])
            def selection(message):   
                try:
                    age = int(message.text) #проверяем, что возраст введен корректно
                    bot.send_message(message.from_user.id, age)
                    is_age = True
                except Exception:
                    bot.send_message(message.from_user.id, 'Цифрами, пожалуйста')


    Вот прям если в лоб.
    Будет просто молчать. Но через else можно и вывести подсказку вида "Возраст уже введен". Хотя такое себе, так как пользователь может и ошибиться при вводе
    Ответ написан
    Комментировать
  • Почему find не находит значения в БД?

    Buchachalo
    @Buchachalo
    Может быть ему не нравится формат id? Или тип id?
    И как то странно выглядит формат userfrac = factions.find_one({'serverid': int(i)})
    factions это коллекция серверов? И вы там ищите id? Почему тогда {'serverid': int(i)} а не int(i)?
    Не силен в монге, но выглядит странно.
    Ответ написан
    Комментировать
  • Как правильно организовать подключение к множеству серверов по websocket?

    Buchachalo
    @Buchachalo Автор вопроса
    "Ну вот и всё! Неплохая получилась история. Интересная, весёлая, порой, немного грустная, а главное-поучительная! Она научила быть смелыми и не бояться вызовов, которые готовит нам жизнь. Помогала нам добиваться поставленных целей, несмотря ни на что. Но самое главное что у это истории счастливый конец!"


    Как обычно в воспаленном мозгу инженера рождаются странные мысли об оверинженеренге!!! Нужно придумать какого менеджера сокетов, или ФАБРИКУ сокетов! Или поднимать для каждого драйвера свой докер-образ. И все это было сделано, и все это работало, но оставалось чувство что делается все не правильно. Все как обычно проще) Нужно было 2 бокала белого рислинга что бы наступило прозрение...

    async def foo_srv2(dvs: list):
        url = '********************'
        
        async def create_ws(url: str, dvs: list):
            async with websockets.connect(url) as ws:
                await ws.send(f'{{"op": "subscribe", "args": {dvs}}}')
                async for message in ws:
                    message = json.loads(message)
                    print(message)
    
        futures = list()
        for i in range(0, len(dvs), 10):
            slice_dvs = dvs[i:i + 10]
            futures.append(asyncio.create_task(create_ws(slice_dvs)))
        await asyncio.gather(*futures, return_exceptions=True)

    Все просто и все прекрасно полетело. Не гарантирую что это единственно правильный подход, но все отлично поднялось и бегает. Отмасштабировал до прослушивания 44 серверов, прилетают пакеты каждые 10 миллисекунд в среднем, количество пакетов не считал, но там не мало. Все отлично работает и не жужжит)
    Всем спасибо за внимание!
    Ответ написан
    Комментировать
  • Почему Python не очищает процессы после выполнения?

    Buchachalo
    @Buchachalo
    А в коде я не заметил процессов. Вы хотите параллельные вычисления? В данном случаи все вычисления последовательны.
    Ответ написан
    Комментировать
  • Как сделать отправление сообщений через потоки?

    Buchachalo
    @Buchachalo
    Тут стоит конечно использовать синхронный клиент для телеги. Так как исполнение ты все равно запускаешь в каждом потоке свое, то профита от асинхронного клиента не получить в данном случаи. И обязательно правильно закрывай поток, не бросай его на произвол судьбы.
    Ответ написан
    Комментировать
  • Как с помощью Aiogram запросить у юзера настоящее месположение?

    Buchachalo
    @Buchachalo
    JaxWill запросить через стандартную геопозицию. Но пользователь может передвинуть точку и фейкануть. К сожалению через телегу не реализовать. Можно через нативное приложение.
    Ответ написан
  • Как работать с подобным списком json на python?

    Buchachalo
    @Buchachalo
    _dict = {"Oleg":{"act":0,"total":0},"Vitya":{"act":2,"total":4}}
    result = [_.get('act') for _ in _dict.values()]
    
    # [0, 2]


    Выше парни все верно написали, но с точки зрения утилизации ресурсов не верно. Если я верно понимаю то алгоритм что в первом что во втором случаи O(n), мой будет O(1)
    Ответ написан
    Комментировать
  • Как искать подстроку в callback данных?

    Buchachalo
    @Buchachalo
    Тут вариантов масса. И еще зависит от версии aigramm которой пользуешься.

    Для 3 версии есть переработанная CDF
    https://docs.aiogram.dev/ru/latest/dispatcher/filt...

    Для 2+ версии aigramm, можно по старым схемам:
    task_cb = CallbackData("task_menu", "task_type", "task_num")
    
    # array = [{name: 'task_name_1', type: 'c', num: 123456}]
    
    def task_keyboard(array):
        markup = InlineKeyboardMarkup(row_width=2)
        for task in array:
            markup.insert(InlineKeyboardButton(text=task.get('name'),
                                               callback_data=task_cb.new(task_type=task.get("type"),
                                                                           task_num= task.get("num"))))
        return markup
    
    # Ловим колбэк
    @dp.callback_query_handler(task_cb.filter())
    async def show_task(callback: types.CallbackQuery, callback_data: dict):
        type = callback_data.get("task_type")
        num = callback_data.get("task_num")


    Ну либо лови колбэк как ты и описал и парси как обычный str.
    type = callback[:1]
    num= callback[1:]
    Ответ написан
    Комментировать
  • По нажатию inline кнопки удалить все сообщения в переписке с ботом?

    Buchachalo
    @Buchachalo
    Можно взять любую NoSQL базу, полегче которая. И хранить там словари с id сообщений. {"12345":[123,456,789,..]}.
    Тык по инлайну, и в цикле перебрал все id. Только не спамь команду, api телеги может тебя наругать за частые обращения.
    Ответ написан
    Комментировать
  • Как добавить кнопки в бота, через телеграм в Aiogram?

    Buchachalo
    @Buchachalo
    Да все возможно.
    Реализовать генератор кнопок.
    Записать в БД url своих ресурсов. В том числе и возможность добавления в БД url через бота.
    В генератор кнопок стравливать все записи из своей БД.
    Заранее предусмотреть пагинацию на кнопках, так как url у тебя будет не мало со временем.
    Ответ написан
    Комментировать
  • Как создать фильтр в aiogram?

    Buchachalo
    @Buchachalo
    str = str.lower()
    if "гол" in str:
        ....

    Ну если прям в лоб.
    Если принципиально только сначала строки то можно дополнить.
    Ответ написан
    Комментировать
  • Как вывести данные с postgresql в телеграм бота на postgresql?

    Buchachalo
    @Buchachalo
    Круто бы получить хотя бы трейслог ошибки
    Ответ написан
    Комментировать
  • Как при редактировании сообщения прикрепить к нему клавиатурную кнопку?

    Buchachalo
    @Buchachalo
    А если удалить прошлое и создать новое сообщение уже с кнопкой?
    Ответ написан
    Комментировать
  • Как удалить неиспользуемую клавиатуру aiogram?

    Buchachalo
    @Buchachalo
    Попробуй использовать await callback.message.delete_reply_markup()
    Если нужно через время удалить то используй таймер, но не забывай что нужно использовать асинхронный. Но он тебе в теории и не даст обычный использовать.
    Ответ написан
    4 комментария
  • Как сделать так, чтобы бот запоминал имя?

    Buchachalo
    @Buchachalo
    async with state.proxy() as data: вот такой конструкцией четно говоря для хранения данных не пользовался. Пойдите по пути который описан в стандартных мануалах.

    Для записи и хранения данных
    await state.update_data(name=message.text)

    Для извлечения
    state_data = await state.get_data()
    name = state_data.get('name')
    Ответ написан
    Комментировать
  • Сallback_query_handler не улавливает событие. В чем проблема?

    Buchachalo
    @Buchachalo
    Покажите фрагмент кода где вы делаете клавиатуру инлайн
    Ответ написан
    Комментировать
  • Пытаюсь сделать так чтобы бот вк мог делать скришот командой но что-то не выходит?

    Buchachalo
    @Buchachalo
    Что то ты с асинхронщиной ИМХО перемудрил тут. Но ладно, работать будет в теории.

    Подскажи, у тебя site это глобальная переменная? Вернее глобальный массив, раз ты применяешь к нему .pop
    Если это просто строка то конкатенируй её без всяких .pop
    Ответ написан
    Комментировать
  • Как переопределить функцию в библиотеке?

    Buchachalo
    @Buchachalo
    Я работаю в большинстве своем с http api, вашего кейса полностью не знаю. Но возможно вам поможет некая реализация middleware. Когда вы переподготавливаете входные данные. Условно сереализуете ваше файлы для работы библиотеки ААА
    Ответ написан