论坛首页 编程语言技术论坛

一个很好用的MSN机器人的Ruby实现

浏览 14204 次
该帖已经被评为良好帖
作者 正文
   发表时间:2008-09-12  
我一段时间一直在研究IM,xmpp,xmpp4r等内容,了解了一些相关的知识,在google code中搜到一个使用Ruby实现的MSN机器人,使用起来很是方便,不过没有使用xmpp,是使用socket实现的。

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


谁能指点一下。
   发表时间:2008-09-12  
你这个是客户端,需要IM服务器, 当然是openfire啦
0 请登录后投票
   发表时间:2008-09-12  
liuqiang 写道
你这个是客户端,需要IM服务器, 当然是openfire啦

嗯,是的啊,我自己连自己的IM服务器,当然要连接到我自己架的openfire啊,我已经会使用这个了。
但是现在我是要连接到msn啊
0 请登录后投票
   发表时间:2008-09-12  
qichunren 写道
liuqiang 写道
你这个是客户端,需要IM服务器, 当然是openfire啦

嗯,是的啊,我自己连自己的IM服务器,当然要连接到我自己架的openfire啊,我已经会使用这个了。
但是现在我是要连接到msn啊

 

 no , 连msn的服务器。你可以在客户端做个选项,选项有 本地 msn gtalk ……,选择后,切换不同的服务器地址。

 

PS:我用flex做过类似的事,不知道适不适合你这种情况

0 请登录后投票
   发表时间:2008-09-13  
如果一定要使用xmpp就要自己架设服务器,然后再安装msn gateway,例如 openfire就有这样的gateway
0 请登录后投票
   发表时间:2008-09-13  
啊,就是这个破东西。MSN的破协议不好,得到一个buddy list要半分钟,大多数情况下你只需要得到email list就够了,人家非把所有信息推给你……
0 请登录后投票
   发表时间:2008-09-16  
有个日本人开发了一个msn协议库,我用过,感觉还可以,基本上做个机器人没问题。
0 请登录后投票
   发表时间:2008-09-16  
不好找啊,magicgod麻烦你给个地址啊
0 请登录后投票
   发表时间:2008-09-16  
刑天战士 写道
啊,就是这个破东西。MSN的破协议不好,得到一个buddy list要半分钟,大多数情况下你只需要得到email list就够了,人家非把所有信息推给你……

不会吧,我试过用它来邀请msn好友的,不用这么长时间的

日本人那个叫msnm,似乎没这个好,不过两个实现的msnp版本都不高,很多新功能没有
0 请登录后投票
   发表时间:2008-09-26  
大家请加 ztservice@live.com 为好友。

我对它加了一个重要的功能,对机器人发送javaeye:news可以查看JavaEye当前的焦点新闻
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics