我正在为一个服务制作一个ICQ (和前景中的XMPP )机器人,它应该发送和接收来自用户的消息。
我使用的是Python和Twisted。我从官方文档的示例开始(这个示例:http://twistedmatrix.com/documents/current/words/examples/oscardemo.py)
到目前为止,我成功地接收并处理了来自ICQ联系人的消息。现在我需要发送消息,但不是在响应他们的消息或某些事件中。我需要使用Oscar (Twisted用于ICQ消息传递的东西)从类外部使用事件处理程序发送消息。我该怎么做?
我非常感谢任何人的帮助,因为我没有谷歌任何有用的东西,没有那么多关于使用Oscar的。
发布于 2012-09-03 20:21:30
当您连接时
protocol.ClientCreator(reactor, OA, SN, PASS, icq=icqMode).connectTCP(*hostport)添加一个Deferred,它将在连接完成时被调用:
oscar_prot = None
def get_B_instance(b_instance):
global oscar_prot
oscar_prot = b_instance
d = Deferred()
d.addCallback(get_B_instance)
protocol.ClientCreator(reactor, OA, SN, PASS, deferred=d, icq=icqMode).connectTCP(*hostport)在get_B_instance函数中,您可以保留对协议类实例的引用。
然后,您可以只在该实例上调用sendMessage。
oscar_prot.sendMessage(username, message)发布于 2012-09-03 19:17:19
没有“内部”或“外部”。编程中的遏制隐喻是一种最具破坏性的隐喻。你最好把这件事忘了。
考虑这个类:
class Foo(object):
def bar(self):
return "Foo.bar says hello"
def baz(self):
print self.bar()给定一个名为aFoo的Foo实例,请考虑以下两种使用方法:
aFoo.baz()
print aFoo.bar()这两种用法在行为上有什么不同?没有一个,但是有一个从“内部”调用bar,一个从“外部”调用bar。包容的比喻在这里是无用和不相关的,没有任何改变基于“哪里”的函数被调用。
https://stackoverflow.com/questions/12244768
复制相似问题