本文介绍了如何保持一个python脚本3(BOT)运行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

(不以英语为母语,对不起,可能是蹩脚的英语,我还编程的新手)。的结果
您好,我试图用QueryServer做一个机器人连接到一个TeamSpeak服务器。经过与它挣扎的天... ...它的工作原理,只有1问题,我坚持用这个。

如果你需要检查,这是TeamSpeak API,我使用:的

这是究竟是什么在我的脚本发生摘要:


  1. 它连接。

  2. 它检查通道ID(和它自己的客户端ID)

  3. 它加入频道

  4. 脚本结束,因此它断开。

我的问题是:我怎样才能使它不会断开?我怎样才能使脚本留在等待状态,以便可以在通道如果有人类型喜机器人读?所有的阅读文章并回答他们所需要的code似乎易于编程,但我现在面临一个问题,我不能让机器人运行,因为它尽快关闭该文件,因为它结束运行脚本

更多信息:结果
我使用的的Python 3.4.1 。结果
我试着学习线程但无论哪种M'm哑或者虽然这将不工作的方式我。结果
在API有一个名为 ON_EVENT ,我想保持运行所有的时间功能。僵尸code应该只运行一次,然后保持等待,直到事件发生。我应该怎么做呢?毫无头绪。

code:

 进口TS3
进口telnetlib
进口时间类BotPrincipal:
    高清Conectar(ts3conn):
        MIID = [我[在ts3conn.whoami的client_id]我为()]
        ChannelToJoin =[Pruebas]机器人
        ts3conn.on_event = BotPrincipal.EventHappened()
        尝试:
            BuscandoIDCanal = ts3conn.channelfind(模式= ChannelToJoin)
            IDCanal = [I [CID对于我在BuscandoIDCanal]
            如果没有IDCanal:
                打印(没有该名称的通道)
                返回None
            其他:
                MIID = STR(MIID).replace(',)
                MIID = STR(MIID).replace(],)
                MIID = STR(MIID).replace([,)
                IDCanal = STR(IDCanal).replace(',)
                IDCanal = STR(IDCanal).replace(],)
                IDCanal = STR(IDCanal).replace([,)
                打印(ID去管+ ChannelToJoin +:+ IDCanal)
                打印(ID德cliente+昵称+:+ MIID)
            尝试:
                打印(移动到你:+ ChannelToJoin)
                ts3conn.clientmove(CID = IDCanal,CLID = MIID)#entra人管
                尝试:
                    打印(从问计通知:+ ChannelToJoin)
                    ts3conn.servernotifyregister(事件=通道,ID_ = IDCanal)
                    ts3conn.servernotifyregister(事件=textchannel,ID_ = IDCanal)
                除了ts3.query.TS3QueryError:
                    打印(您无权使用telnet命令:servernotifyregister)
                打印(-------博特LISTO -------)
            除了ts3.query.TS3QueryError:
                打印(您无权使用telnet命令:clientmove)
        除了ts3.query.TS3QueryError:
            打印(+ ChannelToJoin +的错误结论ID远程登录:channelfind)    高清EventHappened():
        打印(不工作)#所需数据#
USER =thisisafakename
PASS =东西
HOST =111.111.111.111
PORT = 10011
SID = 1如果__name__ ==__main__:
    与ts3.query.TS3Connection(主机,端口)为ts3conn:
        ts3conn.login(client_login_name = USER,client_login_password = PASS)
        ts3conn.use(SID = SID)
        打印(连接到+ HOST)
        BotPrincipal.Conectar(ts3conn)


解决方案

这在API快速一瞥,它看起来像你需要明确地告诉 ts3conn 对象等待事件。似乎有几个方法可以做到这一点,但是的似乎是最明显的:

Presumably as each command comes in, it will call your on_event handler, then when you return from that it will go back to waiting forever for the next command.

I don't know if you need threads here or not, but the docs for recv_in_thread make it sound like you might:

You presumably want to get both servernotify events and also commands, and I guess the way this library is written you need threads for that? If so, just call ts3conn.recv_in_thread() instead of ts3conn.recv(True). (If you look at the source, all that does is start a background thread and call self.recv(True) on that thread.)

这篇关于如何保持一个python脚本3(BOT)运行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-25 05:35