(Не родной английский, извините, возможно, сломанный английский. Я тоже новичок в программировании).
Здравствуйте, я пытаюсь подключиться к серверу TeamSpeak, используя QueryServer, чтобы сделать бота. После нескольких дней борьбы с ним ... это работает, только с одной проблемой, и я застрял с этим.Как сохранить скрипт python 3 (Bot)
Если вам нужно проверить, это API TeamSpeak, что я использую: http://py-ts3.readthedocs.org/en/latest/api/query.html
И это описание того, что происходит на самом деле в моем сценарии:
- Он соединяет.
- Он проверяет идентификатор канала (и собственный идентификатор клиента)
- Она соединяет канал
- Сценарий заканчивается, так что разъединяет.
Мой вопрос: как я могу это сделать, не разъединяется? Как заставить скрипт оставаться в состоянии ожидания, чтобы он мог читать, если кто-то набирает «hi bot» в канале? Весь код, необходимый для чтения текстов и ответа на них, кажется легким для программирования, однако мне грозит проблема, когда я не могу сохранить «запуск» бота, так как он закрывает файл, как только он заканчивает выполнение скрипта.
Подробнее:
Я использую Python 3.4.1.
Я пробовал изучать Threading http://www.tutorialspoint.com/python/python_multithreading.htm, но либо M'm немой или он не работает так, как я бы это сделал.
В API есть функция с именем on_event
, что я хотел бы продолжать работать все время. Бот-код должен запускаться только один раз, а затем оставаться «ожидающим» до тех пор, пока не произойдет событие. Как мне это сделать? Нет подсказки.
Код:
import ts3
import telnetlib
import time
class BotPrincipal:
def Conectar(ts3conn):
MiID = [i["client_id"] for i in ts3conn.whoami()]
ChannelToJoin = "[Pruebas] Bots"
ts3conn.on_event = BotPrincipal.EventHappened()
try:
BuscandoIDCanal = ts3conn.channelfind(pattern=ChannelToJoin)
IDCanal = [i["cid"] for i in BuscandoIDCanal]
if not IDCanal:
print("No channel found with that name")
return None
else:
MiID = str(MiID).replace("'", "")
MiID = str(MiID).replace("]", "")
MiID = str(MiID).replace("[", "")
IDCanal = str(IDCanal).replace("'", "")
IDCanal = str(IDCanal).replace("]", "")
IDCanal = str(IDCanal).replace("[", "")
print("ID de canal " + ChannelToJoin + ": " + IDCanal)
print("ID de cliente " + Nickname + ": " + MiID)
try:
print("Moving you into: " + ChannelToJoin)
ts3conn.clientmove(cid=IDCanal, clid=MiID) #entra al canal
try:
print("Asking for notifications from: " + ChannelToJoin)
ts3conn.servernotifyregister(event="channel", id_=IDCanal)
ts3conn.servernotifyregister(event="textchannel", id_=IDCanal)
except ts3.query.TS3QueryError:
print("You have no permission to use the telnet command: servernotifyregister")
print("------- Bot Listo -------")
except ts3.query.TS3QueryError:
print("You have no permission to use the telnet command: clientmove")
except ts3.query.TS3QueryError:
print("Error finding ID for " + ChannelToJoin + ". telnet: channelfind")
def EventHappened():
print("Doesn't work")
# Data needed #
USER = "thisisafakename"
PASS = "something"
HOST = "111.111.111.111"
PORT = 10011
SID = 1
if __name__ == "__main__":
with ts3.query.TS3Connection(HOST, PORT) as ts3conn:
ts3conn.login(client_login_name=USER, client_login_password=PASS)
ts3conn.use(sid=SID)
print("Connected to "+HOST)
BotPrincipal.Conectar(ts3conn)
В качестве побочного примечания вы не используете классы. Ваш 'Conectar' должен взять параметр' self', и ваш основной код должен построить экземпляр 'BotPrincipal' и вызвать метод Conectar в этом экземпляре и т. Д. Это комбинация из 3 ошибок, отменяющих эту работу , что, вероятно, не то, на что вы хотите положиться. – abarnert
Просто добавив примечание к аборте, просто взгляните на [официальную документацию Python по классам] (https://docs.python.org/3.4/tutorial/classes.html#a-first-look-at-classes) или некоторые [различные учебники] (http://en.wikibooks.org/wiki/A_Beginner's_Python_Tutorial/Classes). – Vyktor
Поскольку я никогда не изучал какой-либо язык программирования, и я стараюсь изо всех сил с помощью Google, я могу видеть, где я потерпел неудачу. Я проверяю этот сайт прямо сейчас и пытаюсь исправить проблемы. Я ценю помощь. – Saelyth