首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Twisted、Oscar中从外部事件处理程序发送ICQ消息

在Twisted、Oscar中从外部事件处理程序发送ICQ消息
EN

Stack Overflow用户
提问于 2012-09-03 16:57:40
回答 2查看 759关注 0票数 2

我正在为一个服务制作一个ICQ (和前景中的XMPP )机器人,它应该发送和接收来自用户的消息。

我使用的是Python和Twisted。我从官方文档的示例开始(这个示例:http://twistedmatrix.com/documents/current/words/examples/oscardemo.py)

到目前为止,我成功地接收并处理了来自ICQ联系人的消息。现在我需要发送消息,但不是在响应他们的消息或某些事件中。我需要使用Oscar (Twisted用于ICQ消息传递的东西)从类外部使用事件处理程序发送消息。我该怎么做?

我非常感谢任何人的帮助,因为我没有谷歌任何有用的东西,没有那么多关于使用Oscar的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-03 20:21:30

当您连接时

代码语言:javascript
复制
protocol.ClientCreator(reactor, OA, SN, PASS, icq=icqMode).connectTCP(*hostport)

添加一个Deferred,它将在连接完成时被调用:

代码语言:javascript
复制
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

代码语言:javascript
复制
oscar_prot.sendMessage(username, message)
票数 1
EN

Stack Overflow用户

发布于 2012-09-03 19:17:19

没有“内部”或“外部”。编程中的遏制隐喻是一种最具破坏性的隐喻。你最好把这件事忘了。

考虑这个类:

代码语言:javascript
复制
class Foo(object):
    def bar(self):
        return "Foo.bar says hello"

    def baz(self):
        print self.bar()

给定一个名为aFooFoo实例,请考虑以下两种使用方法:

代码语言:javascript
复制
aFoo.baz()
print aFoo.bar()

这两种用法在行为上有什么不同?没有一个,但是有一个从“内部”调用bar,一个从“外部”调用bar。包容的比喻在这里是无用和不相关的,没有任何改变基于“哪里”的函数被调用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12244768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档