在上一个问题中,问题是如何实现一个条件循环(一个简单的for循环)来影响已解决的onMessage事件调用函数。但是,我目前的问题是尝试将时间作为条件循环中的决定因素。
目前,代码运行但似乎只执行了重新检查时间的while循环,忽略了之前的代码。我怀疑问题是在我放置时间重新检查循环的位置?
对此问题的任何明确表示赞赏!
import ch
import time
class bot(ch.RoomManager):
timeleft = 0
starttime = 0
def onMessage(self, room, user, message):
print("[{0}] {1}: {2}".format(room.name, user.name.title(), message.body))
if 100 >= timeleft >= 1:
print('success')
else:
print('fail')
loop = 1
while loop == 1 :
timeleft = starttime - int(time.clock())
if timeleft <=0:
timeleft = 200
starttime = 200
rooms = ["testgroup444"]
username = "user"
password = "name"
bot.easy_start(rooms,username,password)
为了清楚使用的方法,可以在此处找到整个ch.py库:https://pastebin.com/8ukS4VR1
答案 0 :(得分:0)
我认为您仍然遇到Python语法问题。在Python中,空格非常重要,因为它定义了范围。编写代码的方式是,在定义类之前,在启动任何内容之前执行while循环。
此外,代码进入无限循环,因为while loop == 1
将始终为True
。这就是您看到代码卡住的原因。从评论中的讨论中,我想你想要写一些类似的东西:
import ch
import time
import enum
class State(enum.Enum):
idle = 0
nominating = 1
voting = 2
watching = 3
class bot(ch.RoomManager):
state = State.idle
movie_length = 20
def updateState(self):
if self.state in [State.idle, State.nominating]:
self.state = State.voting
timeout = 10
elif self.state == voting:
self.state = State.watching
timeout = self.movie_length - 15
else: # if self.state == watching
self.state = State.nominating
timeout = 15
self.setTimeout(timeout*60, bot.updateState, self)
def onConnect(self, room):
# Redirect through event loop, not strictly nessecary
self.setTimeout(0, bot.updateState, self)
def onMessage(self, room, user, message):
print("[{0}] {1}: {2}".format(room.name, user.name.title(), message.body))
print("Current state is {0}".format(self.state))
rooms = ["testgroup444"]
username = "user"
password = "name"
bot.easy_start(rooms,username,password)
这里,使用ch(bot)类中定义的setTimeout
方法,以允许在特定时间传递消息。每次超时都会更新状态。然后,所有内部方法都可以使用实际状态,例如在onMessage
和updateState
。
由于我不使用聊天网络或客户端,我不能保证解决方案有效。