锁定老帖子 主题:一个很好用的MSN机器人的Ruby实现
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-09-12
require 'msn' #MSN帐号 email = "your-user@name.org" #MSN密码 password = "yourpassword" puts "Signing in... please wait." # create a new MSN connection msnsock = MSNConnection.new(email, password) # connect events to their handlers msnsock.signed_in = lambda { puts "Signed in" } #当好友状态更改后所触发的事件 msnsock.buddy_update = lambda {|oldcontact, contact| puts "Updated #{contact.email} (status: #{oldcontact.status.name} -> #{contact.status.name})"} #新会话,就是你当击头像弹出一个聊天窗口后 msnsock.new_chat_session = lambda {|tag, session| puts "New chat session request. Tag: #{tag}" # 如果有好友消息来,将触发 session.message_received = lambda {|sender, message| puts sender + " says: " + message # just for fun ;-) The possibilities are endless... if message[0..3].upcase == "PING" message = message.gsub(/i/, "o").gsub(/\?/, "!") session.say message else session.say message.reverse end } session.session_started = lambda { puts "Session with tag '" + tag + "' started!" } session.participants_updated = lambda { puts "Participants in '#{tag}': " + session.participants.list.to_s } # don't forget to start the chat session! session.start } # start signing in! msnsock.start #感觉处理不好 while true sleep 1 end 看一下这个msn机器人代码的实现,十分简单! #启动MSN机器人 #创建MSN连接 msnsock = MSNConnection.new("ztgood@live.com", "123456") #连接事件 msnsock.signed_in = lambda { puts "登录成功." } #好友状态信息等更新事件 msnsock.buddy_update = lambda {|oldcontact, contact| puts "更新 #{contact.email} (状态: #{oldcontact.status.name} -> #{contact.status.name})" } #新的会话 msnsock.new_chat_session = lambda {|tag, session| puts "New chat session request. Tag: #{tag}" # chat sessions have events too!接收到消息所做的回应 session.message_received = lambda {|sender, message| puts sender + " 说: " + message case message when "help" session.say %Q<你好!我是机器人ztservice,非常高兴为你服务。 你喜欢使用什么编程语言? > when "ruby" session.say "哇,你也喜欢ruby语言啊?哈哈" when "java" session.say "你喜欢的语言是java" else session.say "不知道你在说什么?" end } #新会话的开始,即用户点击MSN机器人的头像开始进行聊天的时候 session.session_started = lambda { puts "Session with tag '" + tag + "' started!" session.say %Q<你好!我是机器人ztservice,非常高兴为你服务。有什么可以帮你的吗? 输入help得到帮助 > } session.participants_updated = lambda { puts "Participants in '#{tag}': " + session.participants.list.to_s } # don't forget to start the chat session! session.start } # start signing in! msnsock.start while !conn.terminated sleep 1 end 代码的地址:http://code.google.com/p/rubymsn/ 另外,想问一问:如何通过xmpp4r连上msn。 require 'xmpp4r' require 'xmpp4r/roster' require 'xmpp4r/discovery' require 'xmpp4r/caps' require 'xmpp4r/tune' client1 = Jabber::Client.new(Jabber::JID::new("ztgood@live.com")) #初始化一个实例 #client1.connect("127.0.0.1",5222) #client1.connect("messenger.hotmail.com", 1863) client1.connect() client1.auth("4588121") client1.send(Jabber::Presence.new(:chat,"ok")) loop do client1.add_message_callback do |m| puts m.body end end 谁能指点一下。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-09-12
你这个是客户端,需要IM服务器, 当然是openfire啦
|
|
返回顶楼 | |
发表时间:2008-09-12
liuqiang 写道 你这个是客户端,需要IM服务器, 当然是openfire啦
嗯,是的啊,我自己连自己的IM服务器,当然要连接到我自己架的openfire啊,我已经会使用这个了。 但是现在我是要连接到msn啊 |
|
返回顶楼 | |
发表时间:2008-09-12
qichunren 写道
liuqiang 写道
你这个是客户端,需要IM服务器, 当然是openfire啦
嗯,是的啊,我自己连自己的IM服务器,当然要连接到我自己架的openfire啊,我已经会使用这个了。 但是现在我是要连接到msn啊
no , 连msn的服务器。你可以在客户端做个选项,选项有 本地 msn gtalk ……,选择后,切换不同的服务器地址。
PS:我用flex做过类似的事,不知道适不适合你这种情况 |
|
返回顶楼 | |
发表时间:2008-09-13
如果一定要使用xmpp就要自己架设服务器,然后再安装msn gateway,例如 openfire就有这样的gateway
|
|
返回顶楼 | |
发表时间:2008-09-13
啊,就是这个破东西。MSN的破协议不好,得到一个buddy list要半分钟,大多数情况下你只需要得到email list就够了,人家非把所有信息推给你……
|
|
返回顶楼 | |
发表时间:2008-09-16
有个日本人开发了一个msn协议库,我用过,感觉还可以,基本上做个机器人没问题。
|
|
返回顶楼 | |
发表时间:2008-09-16
不好找啊,magicgod麻烦你给个地址啊
|
|
返回顶楼 | |
发表时间:2008-09-16
刑天战士 写道 啊,就是这个破东西。MSN的破协议不好,得到一个buddy list要半分钟,大多数情况下你只需要得到email list就够了,人家非把所有信息推给你……
不会吧,我试过用它来邀请msn好友的,不用这么长时间的 日本人那个叫msnm,似乎没这个好,不过两个实现的msnp版本都不高,很多新功能没有 |
|
返回顶楼 | |
发表时间:2008-09-26
大家请加 ztservice@live.com 为好友。
我对它加了一个重要的功能,对机器人发送javaeye:news可以查看JavaEye当前的焦点新闻 |
|
返回顶楼 | |