ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Python (https://forum.antichat.xyz/forumdisplay.php?f=205)
-   -   Биндер на Python (SAMP) (https://forum.antichat.xyz/showthread.php?t=1362670)

donaks. 21.08.2020 21:43

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

Для работы нужна библиотека 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


Lil Xean 21.08.2020 21:44

зачем адреса памяти если есть эмуляция нажатия f6?

donaks. 21.08.2020 21:55

Цитата:

Сообщение от Lil Xean

О да моя госпожа 🙂, зачем адреса памяти если есть эмуляция нажатия f6?

Работает он по аналогии с AHK. За адреса памяти не шарю.

Rei 21.08.2020 23:00

Зачем вот, например, для проверки на самп отдельная функция?

kin4stat 22.08.2020 00:20

Цитата:

Сообщение от Rei

Зачем вот, например, для проверки на самп отдельная функция?

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

Удобно, проще и быстрее потому что. Не?

Rei 22.08.2020 01:35

Цитата:

Сообщение от KiN4StAt

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

Удобно, проще и быстрее потому что. Не?

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

Про сравнения твои охуительные я вообще молчу

donaks. 22.08.2020 02:10

Цитата:

Сообщение от Rei

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

Может мне весь код сжать в одно лямбда выражение?)

winten 22.08.2020 02:14

Цитата:

Сообщение от donaks.

Может мне весь код сжать в одно лямбда выражение?)

Он про то, что у тебя код, который один раз используется зачем то вынесен в отдельную функцию

kin4stat 22.08.2020 09:07

Кстати если есть коллбэк на кнопки то можно и без while True вроде

Цитата:

Сообщение от Rei

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

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

donaks. 22.08.2020 10:08

Цитата:

Сообщение от winten

Он про то, что у тебя код, который один раз используется зачем то вынесен в отдельную функцию

И что? Сделано для удобства и понимания. Когда посмотришь на имя функции сразу понимаешь что она делает. Если код придется расширять или переписывать данная функция пригодится. И код более высокоуровневый получается.


Время: 12:54