【发布时间】:2014-11-20 09:03:23
【问题描述】:
我正在尝试使用Skype4Py 制作一个基本的 Skype 机器人,但遇到了一个相当严重的错误。我正在使用 32 位 Python 2.7.8 开发 64 位 Windows 7。已安装,以及最新版本的 Skype4Py。
我的主要要求是该机器人对5 不同的 Skype 聊天有一个概述:四个用户的四个单独聊天和一个所有四个用户都参与的公共聊天。为此,我编写了两个不同的函数来处理个人回复和群聊:
class SkypeBot(object):
def __init__(self):
self.skype = Skype4Py.Skype(Events=self)
self.skype.Attach()
self.active_chat = find_conference_chat()
def MessageStatus(self, msg, status):
if status == Skype4Py.cmsReceived:
if msg.Chat.Name == self.active_chat.Name:
msg.Chat.SendMessage(respond_to_group(msg))
else:
msg.Chat.SendMessage(respond_to_individual(msg))
bot = SkypeBot()
上面的代码(还有更多内容,但它的核心已经写了下来)应该回答任何用户私下或在群聊中发送的每条消息。
但是,有一个问题。通常,这段代码工作得很好。该机器人响应每个单独的用户以及群聊。然后,每隔一段时间(每 10 次聊天一次),机器人就会停止响应单个消息。函数MessageStatus 根本不会触发,这让我认为可能还有其他一些我需要捕获的事件。所以我为机器人添加了一个通用事件捕捉器:
def Notify(self, notification):
print "NOTIFICATION:"
print notification
print "=========================="
这段代码的唯一目的是查看我是否遗漏了任何事件。于是我等了一会儿,当bot没有响应时,我检查了函数的打印输出。
- 通常,当消息到达时,机器人会收到几个通知:有收到的聊天消息通知、聊天活动时间戳通知和其他一些通知。收到的聊天消息通知是最终触发
MessageStatus事件的通知。 - 在机器人没有响应的情况下,只有一个通知通过。这是通知
CHAT **** ACTIVITY_TIMESTAMP ******。没有收到聊天消息的通知,因此没有回复消息。
当我手动单击我的 Skype 客户端并将窗口聚焦在收到的消息上时,MessageStatus 事件最终触发并且机器人响应了,但为时已晚。
我的问题有几个部分:
- 我的通用代码是否正确?如果
Skype4Py工作完美,我的代码应该可以正常工作吗? - 是否有其他人在某个事件未触发时遇到此错误?
- 如果您遇到类似的错误,您解决了吗?如果没有,您是否至少发现了如何始终如一地重现此问题?我什至无法调试它,因为它突然出现,不知从何而来......
【问题讨论】: