Исходник Биндер на Python (SAMP)

donaks.

Активный
Автор темы
101
67
Чекал я бласт хак и наткнулся на запрос сделать биндер на питоне. Без понятия зачем это ему было нужно. Через пару десятков минут он был готов. Хз зачем это надо, но пусть это будет здесь. Работает не хуже ахк, только нужно подгрузить библиотеки.

Для работы нужна библиотека keyboard (pip install keyboard) и еще pywin32, чтобы бинды не срабатывали, когда самп свернут (pip install pywin32).
keyboard.add_hotkey("1", fun) - при нажатии на единичку, выполнится функция fun (бинд на клавишу).
keypress(key) - нажимает на клавишу key (зажимает и через 100 миллисекунд отжимает).
is_samp_active() - возвращает True, если окно сампа активно.
send_to_chat(message) - отправляет строку message в чат, если окно сампа активно.
send_messages_to_chat(messages_list, delay) - отправляет список строк messages_list в чат с задержкой delay в секундах (по умолчанию = 0)
Обязательно в конце нужно прописать бесконечный цикл. Либо же keyboard.wait(), чтобы скрипт не прекратил работу.
Если скрипт запущен в консоли, остановить его можно сочетанием клавиш Ctrl+C.
Python:
from time import sleep

import keyboard
from win32gui import GetWindowText, GetForegroundWindow

def keypress(key):
    keyboard.press(key)
    sleep(0.1)
    keyboard.release(key)

def is_samp_active():
    return GetWindowText(GetForegroundWindow()) == "GTA:SA:MP"

def send_to_chat(message):
    if is_samp_active():
        keypress("F6")
        keyboard.write(message)
        keypress('Enter')

def send_messages_to_chat(messages_list, delay=0):
    for message in messages_list:
        send_to_chat(message)
        sleep(delay)


keyboard.add_hotkey("Ctrl + 1", lambda: send_to_chat("/me упал, отжался."))
keyboard.add_hotkey("Ctrl + 2", lambda: send_messages_to_chat(
    ["Приветствую, меня зовут Даниил.", "Чем могу быть полезен?"], 2
))

while True:
    pass
 
Последнее редактирование:

Rei

Известный
Друг
1,589
1,617
Зачем вот, например, для проверки на самп отдельная функция?
 
  • Нравится
Реакции: winten

kin4stat

mq-team
Всефорумный модератор
2,730
4,710
Зачем вот, например, для проверки на самп отдельная функция?
Зачем вот, например, для работы со штукатуркой шпатель? Зачем вот, например, для готовки нужны сковороды и кастрюли? Зачем вот например для стирки стиральная машина? Зачем вот, например, для мойки посуды посудомоечная Машина?

Удобно, проще и быстрее потому что. Не?
 
Последнее редактирование:

Rei

Известный
Друг
1,589
1,617
Зачем вот, например, для работы со штукатуркой шпатель? Зачем вот, например, для готовки нужны сковороды и кастрюли? Зачем вот например для стирки стиральная машина? Зачем вот, например, для мойки посуды посудомоечная Машина?

Удобно, проще и быстрее потому что. Не?
Удобно, проще и быстрее одну строчку, использующуюся 1 раз, совать в отдельную функцию?
Про сравнения твои охуительные я вообще молчу
 

donaks.

Активный
Автор темы
101
67
Удобно, проще и быстрее одну строчку, использующуюся 1 раз, совать в отдельную функцию?
Про сравнения твои охуительные я вообще молчу
Может мне весь код сжать в одно лямбда выражение?)
 

winten

Потрачен
409
182
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

kin4stat

mq-team
Всефорумный модератор
2,730
4,710
Кстати если есть коллбэк на кнопки то можно и без while True вроде
Удобно, проще и быстрее одну строчку, использующуюся 1 раз, совать в отдельную функцию?
Про сравнения твои охуительные я вообще молчу
Вдруг потом пригодится лол. На питоне нет инлайн функций к сожалению
 

donaks.

Активный
Автор темы
101
67
Он про то, что у тебя код, который один раз используется зачем то вынесен в отдельную функцию
И что? Сделано для удобства и понимания. Когда посмотришь на имя функции сразу понимаешь что она делает. Если код придется расширять или переписывать данная функция пригодится. И код более высокоуровневый получается.
 
  • Нравится
Реакции: Neon3333

Issaychik

Известный
194
35
Вам лишь бы обосрать. Сделайте лучше если не так тем более бесплатно!
 

clrn1w

Известный
317
146
Вам лишь бы обосрать. Сделайте лучше если не так тем более бесплатно!
Прикол в том, что будет эмуляция текста во все окна. Лучше было бы использовать адреса памяти(можно найти в инете)
Кстати если есть коллбэк на кнопки то можно и без while True вроде

Вдруг потом пригодится лол. На питоне нет инлайн функций к сожалению
есть лямбда если что
 

kin4stat

mq-team
Всефорумный модератор
2,730
4,710
Прикол в том, что будет эмуляция текста во все окна. Лучше было бы использовать адреса памяти(можно найти в инете)

есть лямбда если что
Лямбда это не внедрение кода в место вызова, держу в курсе