2016-06-04 03:49:57 +02:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
|
|
|
import socket
|
|
|
|
import sys
|
|
|
|
import os
|
2016-06-04 19:03:10 +02:00
|
|
|
import struct
|
2016-06-04 03:49:57 +02:00
|
|
|
|
|
|
|
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
|
|
|
sockpath = "/var/tmp/%s/sexiibot.sock" % os.environ["USER"]
|
|
|
|
|
|
|
|
logo = """\
|
|
|
|
.-.
|
|
|
|
(/ \)
|
|
|
|
(\ /) SEXIIBOT : The Bot Of Your Dreams
|
|
|
|
.-'-. Simple EXtensible II Bot
|
|
|
|
/(_Y_)\\ v.0.1.1
|
|
|
|
\\\\) (//
|
|
|
|
/ \ Author: raspbeguy
|
|
|
|
\ Y / raspbeguy@hashtagueule.fr
|
|
|
|
\|/
|
|
|
|
/|\ https://git.hashtagueule.fr/raspbeguy/sexiibot
|
|
|
|
\|/
|
|
|
|
/Y\\
|
|
|
|
"""
|
|
|
|
|
|
|
|
usage = """\
|
|
|
|
usage: %s [-p <path_to_socket>] <command>
|
|
|
|
|
|
|
|
To get a list of possible commands, use command "help"
|
|
|
|
"""
|
|
|
|
|
|
|
|
args = sys.argv
|
|
|
|
|
2016-06-04 19:03:10 +02:00
|
|
|
def send_msg(connexion, msg):
|
|
|
|
# Prefix each message with a 4-byte length (network byte order)
|
|
|
|
msg = struct.pack('>I', len(msg)) + msg
|
|
|
|
connexion.sendall(msg)
|
|
|
|
|
|
|
|
def recv_msg(connection):
|
|
|
|
# Read message length and unpack it into an integer
|
|
|
|
raw_msglen = recvall(connection, 4)
|
|
|
|
if not raw_msglen:
|
|
|
|
return b''
|
|
|
|
msglen = struct.unpack('>I', raw_msglen)[0]
|
|
|
|
# Read the message data
|
|
|
|
return recvall(connection, msglen)
|
|
|
|
|
|
|
|
def recvall(connection,n):
|
|
|
|
# Helper function to recv n bytes or return None if EOF is hit
|
|
|
|
data = b''
|
|
|
|
while len(data) < n:
|
|
|
|
packet = connection.recv(n - len(data))
|
|
|
|
if not packet:
|
|
|
|
return b''
|
|
|
|
data += packet
|
|
|
|
return data
|
|
|
|
|
2016-06-04 03:49:57 +02:00
|
|
|
if len(args) < 2:
|
|
|
|
print(usage, file=sys.stderr)
|
|
|
|
sys.exit(1)
|
|
|
|
elif args[1] == "-v":
|
|
|
|
print(logo)
|
|
|
|
sys.exit(0)
|
|
|
|
elif args[1] == "-p":
|
|
|
|
try:
|
|
|
|
sockpath = args[2]
|
|
|
|
except IndexError:
|
|
|
|
print(usage, file=sys.stderr)
|
|
|
|
sys.exit(1)
|
|
|
|
message = " ".join(args[3:])
|
|
|
|
else:
|
|
|
|
message = " ".join(args[1:])
|
|
|
|
|
|
|
|
try:
|
|
|
|
sock.connect(sockpath)
|
|
|
|
except socket.error:
|
|
|
|
error = """\
|
|
|
|
It seems that sexiibot isn't awaken.
|
|
|
|
To start your sexiibot instance, run the following command:
|
|
|
|
sexiictl start <config_file>
|
|
|
|
|
|
|
|
It is also possible than the instance of sexiibot you're trying to reach uses a different control socket.
|
|
|
|
You can try running the following command :
|
|
|
|
sexiictl -p <path_to_socket> """ + "".join(sys.argv[1:]) + """
|
|
|
|
|
|
|
|
If you need help to generate a config file, use the sexiiwizard script.
|
|
|
|
"""
|
|
|
|
print(error, file=sys.stderr)
|
|
|
|
sys.exit(1)
|
|
|
|
try:
|
2016-06-04 19:03:10 +02:00
|
|
|
send_msg(sock, bytes(message, 'UTF-8'))
|
|
|
|
response = recv_msg(sock).decode('UTF-8')
|
|
|
|
print(response)
|
2016-06-04 03:49:57 +02:00
|
|
|
finally:
|
|
|
|
sock.close()
|