Задать вопрос
  • Pynput как обрабатывать сочетания клавиш?

    Lord_of_Rings
    @Lord_of_Rings Куратор тега Python
    Дунадан - северный странник. Злой, но очень добрый
    В вашем коде вы обрабатываете нажатия и отпускания клавиш по отдельности, но какие клавиши нажаты одновременно не проверяете.
    Как-то так должно быть
    from pynput.mouse import Listener as MouseListener
    from pynput import keyboard
    import logging
    import time
    import pydirectinput
    
    mode = input("1 - Record TAS\n2 - Replay TAS\nChoice: ")
    
    if mode == "1":
        filename = f"{input('Name for record: ')}.tas"
        file = open(filename, 'w')
        file.close()
        file = open(filename, 'r+')
        print("Record will start in 3 seconds...")
        time.sleep(3)
    
        presstime = 0
        releasetime = 0
        movetime = time.time()
        keytime = {}
        pressed_keys = set()
    
        def on_move(x, y):
            global movetime
            file.write(f"sleep {time.time() - movetime}\n")
            file.write(f"move {x} {y}\n")
            movetime = time.time()
            file.flush()
    
        def on_click(x, y, button, pressed):
            global presstime
            global releasetime
            if pressed:
                file.write(f'press {x} {y} {button}\n')
                presstime = time.time()
                file.flush()
            else:
                releasetime = time.time()
                file.write(f"sleep {releasetime - presstime}\n")
                file.write("release\n")
                file.flush()
    
        def on_scroll(x, y, dx, dy):
            file.write(f'scroll ({x}, {y})({dx}, {dy})\n')
            file.flush()
    
        def on_press(key):
            global pressed_keys
            pressed_keys.add(key)
            file.write(f"pkey {key}\n")
            file.flush()
    
        def on_release(key):
            global pressed_keys
            pressed_keys.remove(key)
            file.write(f"prelease {key}\n")
            file.flush()
    
        with keyboard.Listener(on_press=on_press, on_release=on_release) as klistener:
            with MouseListener(on_move=on_move, on_click=on_click, on_scroll=on_scroll) as listener:
                klistener.join()
                listener.join()
    
    elif mode == "2":
        filename = input("Enter TAS name: ")+".tas"
        file = open(filename, 'r')
        script = file.readlines()
        print("Replay will start in 3 seconds...")
        time.sleep(3)
        for task in script:
            if "sleep" in task:
                task = task.replace("sleep ", "").replace("\n", "")
                time.sleep(float(task))
            elif "move" in task:
                task = task.replace("move ", "").replace("\n", "")
                task = task.split(" ")
                x = int(task[0])
                y = int(task[1])
                pydirectinput.moveTo(x, y, duration=0.0, _pause=False)
            elif "press" in task and "left" in task:
                task = task.replace("press ", "").replace("\n", "")
                task = task.split(" ")
                x = int(task[0])
                y = int(task[1])
                pydirectinput.moveTo(x, y, duration=0.0, _pause=False)
                pydirectinput.mouseDown(_pause=False)
            elif "press" in task and "right" in task:
                task = task.replace("press ", "").replace("\n", "")
                task = task.split(" ")
                x = int(task[0])
                y = int(task[1])
                pydirectinput.moveTo(x, y, duration=0.0, _pause=False)
                pydirectinput.mouseDown(button='right', _pause=False)
            elif "release" in task and "prelease" not in task:
                pydirectinput.mouseUp(_pause=False)
                pydirectinput.mouseUp(button='right', _pause=False)
            elif "pkey" in task:
                task = task.replace("pkey ", "").replace("\n", "").replace("Key.", "").replace("_l", "").replace("_r", "").replace("'", "")
                pydirectinput.keyDown(task, _pause=False)
            elif "prelease" in task:
                task = task.replace("prelease ", "").replace("\n", "").replace("Key.", "").replace("_l", "").replace("_r", "").replace("'", "")
                pydirectinput.keyUp(task, _pause=False)
        print("Replay ended...")
    Ответ написан
    Комментировать
  • Как подключить 2 клиента друг ко другу?

    Lord_of_Rings
    @Lord_of_Rings Куратор тега Python
    Дунадан - северный странник. Злой, но очень добрый
    2 комментария
  • Как запустить js скрипт перед загрузкой сайта?

    @CuriousLynx
    Судя по всему, вам сначала нужно блокировать загрузку скрипта /exam/js/main.module_9dae9.js с помощью API webRequest
    https://developer.chrome.com/docs/extensions/refer...
    а затем уже добавлять на страницу скрипт 127.0.0.1:8000/main.module_9dae9.js
    Ответ написан
    Комментировать
  • Как реализовать в Телеграме общий чат для менеджеров?

    Lord_of_Rings
    @Lord_of_Rings
    Дунадан - северный странник. Злой, но очень добрый
    Вам сюда
    Ответ написан
    Комментировать
  • Как сделать графику на fasm?

    TrueBers
    @TrueBers
    Гуглю за еду
    Учить ассемблер и писать свою ОС это примерно как учиться сварке и строить космический корабль.
    Ассемблер это только 1% от всего, что нужно изучить.
    Тебе нужно решить кучу архитектурных проблем сначала, а потом уже думать о графике.

    Посмотри вот сюда. Там описаны фазы создания операционной системы. Согласно этому туториалу, графика это уже третья фаза. Так что тебе ещё первые две предстоит осилить, прежде чем приступать к графике.
    Ответ написан
    7 комментариев
  • Как узнать message id?

    EPIDEMIASH
    @EPIDEMIASH
    Человек швейцарский нож
    Комментарии на посты канала фактически создаются в отдельной группе, связанной с этим каналом. Там и получайте.

    async def main():
        # получите канал
        channel = await client.get_entity(channel_username)
        
        # получите привязанную группу
        linked_chat = await client.get_entity(channel.linked_chat_id)
        
        # перебирите сообщения
        async for message in client.iter_messages(linked_chat):
            print(f"Message ID: {message.id}, Text: {message.text}")
    Ответ написан
    Комментировать
  • Как разблокировать телефон без пароля?

    CityCat4
    @CityCat4
    Дома с переломом ноги
    Здесь точно не помогут, иди на 4pda, там если не помогут (что вполне может быть) то хотя бы направят в нужную сторону.
    Ответ написан
    Комментировать
  • Как убрать inline клавиатуру aiogram?

    @SashaN69
    Школота
    Можно просто удалять сообщение
    import asyncio
    from contextlib import suppress
    
    from aiogram import types
    from aiogram.utils.exceptions import (MessageToEditNotFound, MessageCantBeEdited, MessageCantBeDeleted,
                                          MessageToDeleteNotFound)
    
    async def delete_message(message: types.Message, sleep_time: int = 0):
        await asyncio.sleep(sleep_time)
        with suppress(MessageCantBeDeleted, MessageToDeleteNotFound):
            await message.delete()


    msg = await message.reply("Я удалюсь через 30 секунд")
        asyncio.create_task(delete_message(msg, 30)
    Ответ написан
    Комментировать
  • Aiogram Bot: как отправить несколько медиа одним фотоколлажом?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    media = types.MediaGroup()
    media.attach_photo(types.InputFile('media/Starbucks_Logo.jpg'), 'Превосходная фотография')
    media.attach_photo(types.InputFile('media/Starbucks_Logo_2.jpg'), 'Превосходная фотография 2')
    await bot.send_media_group(call.message.chat.id, media=media)


    Есть в примерах по библиотеке
    https://github.com/aiogram/aiogram/blob/dev-2.x/ex...
    Ответ написан
    Комментировать
  • Как убрать подробности в проводнике?

    Zettabyte
    @Zettabyte
    Проф. восстановление данных ▪ Вопрос? См. профиль
    Я что то нечаянно нажал

    Могу ошибаться, но мне такое представляется маловероятным - обычно действия в контекстное меню добавляет каждая программа сама по себе, независимо.

    кроме базовых "копировать, вырезать, вставить, переименовать, винрар"

    Правильный и корректный подход - заходить в каждую из программ и в её настройках либо убирать интеграцию в контекстное меню, либо там же выбирать какие пункты показывать.
    У того же WinRAR в опциях такое точно есть.

    Можно также в свойствах проводника отключить ассоциацию с типом файлов, но это более дубово.

    Если хорошо ориентируетесь в реестре, то большинство из этих пунктов сидит в HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers

    Также можете воспользоваться вот этими программами:
    1. Сначала этой: https://www.nirsoft.net/utils/shell_menu_view.html
    2. Если она что-то не уберёт, то вот этой: https://www.nirsoft.net/utils/shexview.html
    Ответ написан
    4 комментария
  • Как сделать globbing строки в php?

    @rPman
    Ответ - регулярные выражения, синтаксис чуть сложнее чем * и ? но возможности выше
    preg_replace для однобайтовых кодировок или mb_ereg_replace для любых.

    регулярное выражение для твоей задачи будет выглядеть примерно так /word.*/ если после слова может присутствовать любое количество любых символов, включая нулевое (иначе использовать .+). Тут точка - это любой символ, а следующий за ним * или + - любое их количество

    upd. совсем забыл, preg_replace с модификатором /u понимает utf8 строки
    Ответ написан
    4 комментария
  • Как исправить ошибку?

    NetworkSounds netsound= new NetworkSounds();
    //Дальше обращайтесь к экземпляру класса
    netsound.tellSound(/*передаёте аргументы*/);
    Ответ написан
    1 комментарий
  • Как не запрашивать логин / пароль Linux?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как это исправить?

    добавить -f в опции login:
    login -f test

    Но вообще, пользоваться командой login для этого странно, когда есть su.
    Ответ написан
    Комментировать
  • Как добавить систему аккаунтов в Linux Kernel?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Авторизация в линукс идет через модуль pam
    в /etc/pam.d и должны быть конфиги какие библиотеки вы используете. Локальных юзеров (/etc/passwd) или ldap или active directory или что-то еще подключили.
    Ответ написан
    2 комментария
  • Как добавить систему аккаунтов в Linux Kernel?

    Bermut
    @Bermut
    Жертва домашней лаборатории
    Признать честно, когда я собирал свой образ, я натыкался на такую ошибку, но непомню как ее решил, насколько помню, просто полностью перекачал рут, но самый удобный вариант сборки своего образа - использования rootfs, созданный через deboostrap/pacstrap, там тебе будет и ядро, и все файловое окружение, может только чутка напильником поработать чтобы удалить ненужные файлы, но это самый простой и лучший вариант.
    Ответ написан
    1 комментарий
  • 3X-UI конфиг - изменение адреса прослушивания панели, в чём ошибка?

    @Drno
    Ну во первых ненадо делать того, чего Вы не понимаете.
    Во вторых - у Вас что то работает на порту 8080 либо веб сервер какой то, либо входящий порт 3x-ui

    Просто используйте другой любой порт, например ssh -L 8081:localhost:2053 your_server_ip

    Конфиг 3x-ui хранится в sqlite, путь можно посмотреть в гитхабе (могу ошибаться, но вроде как в папке /etc/x-ui/)
    https://github.com/MHSanaei/3x-ui#default-settings
    Как работать с sqlite это уже отдельная тематика...

    По ойму у них есть консольное меню, вызываемое по команде 3x-ui в консоли. там можно сделать "сброс" настроек
    Ответ написан
    3 комментария
  • Как организовать одновременную работу RDP и AnyDesk?

    @Drno
    Чего надо добиться? Несколько одновременных юзеров, каждый под своим логином? Тогда - rdpWrapper
    Ответ написан
    2 комментария
  • Не работает цикл, что делать?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Цикл работает, но вам надо перенести в цикл ветвление с выводом, и предусмотреть запрос - продолжить или выйти из цикла.
    Ответ написан
    2 комментария
  • Не работает цикл, что делать?

    Цикл работает ровно так, как ты и написал:
    while True: # условие 
         b = random.randint(1, 2) # тело
    
    # а эти if-ы уже идут после цикла, но тк цикл вечный - до сюда выполнение не дойдёт
    if b == 1:
        print("Поздравляем! Вы получили 1 btc :)")
        btc = btc + 1
        sp(0.1)
    
    if b == 2:
        print("Не повезло :( попробуй подождать")
        btc = btc * 1
        sp(0.1)


    В итоге он мне пишет приветствие, которое я написал ранее и застывает.

    Ещё возможно, что он ждёт, что ты что-то напишешь в консоли:
    print("Привет! Чтобы начать майнить напиши 'да' ")
    a = input()
    Ответ написан
    Комментировать
  • Как сделать постоянную запись с новой строки Python?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Он не меняет первую строку, а переписывает файл. Режим открытия файла w подразумевает под собой сначала очистку файла, а потом запись в него. Если хотите дозаписывать данные, есть режим a, соответственно, он и нужен
    test = open("save.txt", 'a', encoding = 'utf-8')

    копипаста режимов

    r - открывает файл только для чтения,
    w - открыт для записи (перед записью файл будет очищен),
    x - эксклюзивное создание, бросается исключение FileExistsError, если файл уже существует.
    a - открыт для добавления в конец файла (на некоторых Unix-системах пишет в конец файла вне зависимости от позиции курсора)
    + - символ обновления (чтение + запись).
    t - символ текстового режима.
    b - символ двоичного режима (для операционных систем, которые различают текстовые и двоичные файлы).
    Ответ написан
    1 комментарий