我正在用python编写一个discord机器人,我在使用下一个特性时遇到了困难。当消息:('user'joined)被读取时,bot应该每隔x秒开始循环函数,直到消息:('user'left)被读取
我在scratch文件中测试了不同的代码。它成功地在“用户”处开始循环。但是当('user'left)消息应该通过时,它不会接受新的参数,并永远继续循环
这两个版本看起来最有希望:
import re
import time
def message(servermessage):
a = re.sub("[^\S]", " ", servermessage).split()
if a[1] == 'joined':
online = False
elif a[1] == 'left':
online = True
while True:
mcusername = a[0]
print(mcusername, 0)
if online:
break
time.sleep(2)
message('user joined')
time.sleep(10)
message('user left')
及
import re
import sched, time
s = sched.scheduler(time.time, time.sleep)
def message(servermessage):
a = re.sub("[^\S]", " ", servermessage).split()
def rewardplayer():
s.enter(1, 1, rewardplayer)
mcusername = a[0]
print(mcusername, 0)
if a[1] == 'joined':
s.enter(1, 1, rewardplayer)
s.run()
elif a[1] == 'left':
s.cancel()
message('user joined')
time.sleep(10)
print('done')
message('user left')
我的另一个要求是,当在前一个用户发出的('previoususer'left)消息之前发出('newuser'joined)消息时,它应该能够为不同的用户运行相同的循环
我为含糊不清的解释道歉。但我希望你能帮忙。提前谢谢
关于您的第一个代码: 这里有while,当在线为真时,应将其断开。但在这个循环中它永远不会改变。所以它类似于死锁
关于您的第二个代码: 您正在使用“调度程序”。通常这意味着您希望定期运行某些事件。但你的目标是在事件发生时做出反应。随时都可以。没有安排
所以在这里我可以推荐您使用异步python方式。 (请阅读有关asyncio的内容)
你可以这样使用它。 在那里我们有一个队列,在那里我们放置我们的事件。你们也可以通过无限的方式(监听socket或smthg——在这里你们会得到关于不同用户的消息)
我们有任务(worker),它在我们的“主要”功能处于活动状态时工作
相关问题 更多 >
编程相关推荐