如何使用DOTMSN开发简单的MSN机器人示例(附示例源码)

本文继续上篇:使用第三方SDK开发咱博客园自己的MSN机器人(附示例源码)
由于这个需要把自己的password暴露给sp,所以就使用DOTMSN来避免这个问题!
下载地址:
http://www.xihsolutions.net/dotmsn/download.html

趁着五一休息就看着他的example做拉一个简单的msn机器人.
效果图:


他的功能弱弱的,但是基本实现拉简单的需求!
功能描述已经实现代码(简单描述):
1.登陆

messenger = new Messenger();
messenger.Connect(user.Text, pwd.Text);

2.显示您的好友(在线和离线等状态)

//显示所有在线人
        private void ShowAll()
        {
            
try
            {   
                messenger.SetStatus(MSNStatus.Online);
                AllListView.Clear();
                
foreach(Contact contact in messenger.GetListEnumerator(MSNList.ForwardList))
                {
                    ListViewItem item 
= new ListViewItem(contact.Name);
                    item.Tag          
= contact;
                    
if(contact.Status != MSNStatus.Offline)
                    {
                        AllListView.Items.Add((item
+"在线").Remove(0,14));
                    }
//                    if(contact.Status == MSNStatus.Busy)
//                    {
//                        AllListView.Items.Add(item+"忙碌");
//                    }
//                    if(contact.Status == MSNStatus.Away)
//                    {
//                        AllListView.Items.Add(item+"离开");
//                    }
                    else    
                    {
                        AllListView.Items.Add((item
+"离线").Remove(0,14));
                    }
                        
                }
                
            }
            
catch(Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

3.发送定制消息

我的定制消息是当您打开并要跟我对话时,我会把我博客上的最新文章标题和连接发送给您.(如效果图)

4.接受消息,根据消息内容判断,并返发相应的信息

比如当用户发送给我的消息中包含某个关键词,如overred,我需要我的机器人自动给他发送什么消息:

private void ReadMsg(Conversation sender, DotMSN.MessageEventArgs e)
        {  
            
//string content;
            string input = e.Message.Text;
            
if(input.IndexOf("red")>0)
            {
                
string content="overred 欢迎您光临他的blog:"+"\r\n"+"http://overred.cnblogs.com";
                sender.SendMessage(content);
            }

            
else if(input.StartsWith("H"))
            {
                
string content="我很笨,很多功能还在开发哦"+"\r\n"+"http://overred.cnblogs.com";
                sender.SendMessage(content);
            }
            
else
            {
                
string content="你好啊,我不知道你说的是什么啊,有什么事情请输入H";
                sender.SendMessage(content);
            }
            
        }

当您输入的消息中包含red这个关键词,他的自动回复消息是:
overred 欢迎您光临他的blog:
http://overred.cnblogs.com
(这个可以跟您的数据库关联起来,把一些定制消息保存于数据库)
关于这个消息是如何触发他是通过委托机制实现的,实现起来非常简单.(请下载源代码)

示例代码下载地址:
http://files.cnblogs.com/overred/DotMsnDemo.rar

说明:由于发送博客的rss内容,所以由于网络速度问题,可能导致对方msn不能及时收到相应的消息!
剩下的大家去体验吧!
祝大家五一都有个好心情!
posted @ 2006-05-01 22:04 overred 阅读(6478) 评论(26)  编辑 收藏

  回复  引用  查看    
#1楼 2006-05-02 00:16 | 萧寒      
难得看到51还在post的同志 :)
你可以参考参考“灵感之源”发布过的一个msn的机器人的源码;
  回复  引用  查看    
#2楼 2006-05-02 08:55 | Lostinet      
难得看见51还reply的同志...
  回复  引用  查看    
#3楼 2006-05-04 11:09 | 木野狐      
难得看见51还reply的同志...
难得在51能看到 Lostinet 兄弟出来冒个泡 :)

现在不玩wow了?
  回复  引用  查看    
#4楼 [楼主]2006-05-04 14:30 | 雁儿飞飞      
@萧寒
非常感谢

@Lostinet
@木野狐
看来搞程序的玩wow还不少啊!^+^

  回复  引用  查看    
#5楼 2006-05-05 15:37 | GoKu'S Blog      
请问怎么DotMSN中添加联系人啊,官方的例子中好像没有
  回复  引用  查看    
#6楼 [楼主]2006-05-05 16:32 | 雁儿飞飞      
@GoKu'S Blog

好象没有
  回复  引用    
#7楼 2006-05-15 20:12 | 欣生 [未注册用户]
我也解决不了加联系人
里面好像有个messenger.nameserver.addnewcontact
可是我用了以后怎么说我已经在四个表里了
看源代码里面
addnewcontact发送了消息“add”
应该是这个了
我用错了么
应该怎么用
谢谢。
  回复  引用    
#8楼 2006-06-23 17:52 | Guest [未注册用户]
如何邀请一个用户加为好友?
  回复  引用    
#9楼 2006-09-12 18:07 | chenguangli [未注册用户]
不明白干吗用的啊
  回复  引用  查看    
#10楼 [楼主]2006-09-13 10:32 | overred      
@Guest
自己写方法,调用他的api
@chenguangli
呵呵,一个小东西
  回复  引用  查看    
#11楼 [楼主]2006-09-13 10:34 | overred      
@欣生
不好意思,我也只是很肤浅的玩一把
你可以看看他的sdk来寻找解决方法
hope
  回复  引用  查看    
#12楼 2007-06-02 14:26 | 巫云      
请问如果使用了代理的话怎么连接呢?我老是连不上。
  回复  引用  查看    
#13楼 [楼主]2007-06-02 17:49 | overred      
@巫云
他里面应该有代理的方法 具体就不清楚拉
ps:你可以把你的ie使用代理后登陆你的msn,看能否登陆成功
  回复  引用  查看    
#14楼 2007-06-07 10:08 | 巫云      
@overred
我现在就是代理上网的,MSN可以用,代理服务器是192.168.99.100,端口80。修改关方示例代码:
//这句是根据P10的协议改的,可能是我英文不行,理解有误?
//用默认主机地址也不行
messenger.ConnectivitySettings.Host = "gateway.messenger.hotmail.com";

messenger.ConnectivitySettings.WebProxy = new System.Net.WebProxy("192.168.100.99", 80);

// by default this example will emulate the official microsoft windows messenger client
messenger.Credentials.ClientID = "msmsgs@msnmsgr.com";
messenger.Credentials.ClientCode = "Q1P7W2E4J9R8U3S5";

返回错误说连接方在一段时间后没有正确答复或主机无反映。
大哥帮帮忙,谢了。
  回复  引用  查看    
#15楼 2007-06-07 15:10 | overred      
Here is an example of how to setup a proxy:

messenger.ConnectivitySettings.ProxyHost = "10.0.0.100";
messenger.ConnectivitySettings.ProxyPort = 8080;
messenger.ConnectivitySettings.ProxyType = ProxyType.Socks4;
messenger.ConnectivitySettings.WebProxy = new System.Net.WebProxy("10.0.0.100", 8080);


In this example, the company’s internal Proxy server at IP address 10.0.0.100 at port 8080 is used. As you can see it is important that you also set the WebProxy property. This setting is used when a HTTP resource is accessed. In DotMSN this is primarily the Nexus, or passport.com, authentication service. If you do not set this you may not be able to connect to the service.


http://www.xihsolutions.net/dotmsn/connectivity.html
  回复  引用    
#16楼 2007-07-18 17:42 | sth [未注册用户]
自动加好友 有人知道吗?
1.2 是addcontact
2.0 addnewcontact不起作用
难道是bug?
  回复  引用    
#17楼 2007-07-19 10:33 | sth [未注册用户]
@欣生
你解决了吗?能帮助下吗
  回复  引用  查看    
#18楼 [楼主]2007-07-19 15:22 | overred      
@sth
我没亲自试,不过可以推测一下:
如果你的msn机器人会自动加人,那很可能有广告嫌疑,发垃圾广告

不过我不认为ms会那么小气
  回复  引用  查看    
#19楼 [楼主]2007-07-19 15:47 | overred      
@sth
具体看看他的文档吧
  回复  引用    
#20楼 2007-08-07 15:59 | 欢乐英雄 [未注册用户]
有个
public enum NotifyPrivacy
{
/// <summary>
/// Unknown notify privacy.
/// </summary>
Unknown = 0,
/// <summary>
/// Notify the clientprogram when a contact adds you and let the program handle the response itself.
/// </summary>
PromptOnAdd = 1,
/// <summary>
/// When someone adds you MSN will automatically add them on your list.
/// </summary>
AutomaticAdd = 2
}
AutomaticAdd = 2可以在别人加你为联系人的时候自动添加对方



另外
messenger.Nameserver.ReverseAdded +=new ContactChangedEventHandler(Nameserver_ReverseAdded);


private void Nameserver_ReverseAdded(object sender, ContactEventArgs e)
{
messenger.Nameserver.AddContactToList(e.Contact, MSNLists.AllowedList);
e.Contact.OnAllowedList = true;
e.Contact.OnForwardList = true;
//MessageBox.Show(e.Contact.Name + "加你为好友");
messenger.Nameserver.SynchronizeContactList();
UpdateContactlist();
}
自己写的这个事件的处理,可以在别人加你为联系人的时候,自动添加对方
  回复  引用  查看    
#21楼 [楼主]2007-08-07 16:23 | overred      
@欢乐英雄
谢谢
  回复  引用  查看    
#22楼 2007-08-10 19:51 | 邓林海      
同志们,给QQ也弄个
  回复  引用  查看    
#23楼 [楼主]2007-08-12 22:54 | overred      
@邓林海
貌似已经有
  回复  引用  查看    
#24楼 2007-11-14 21:39 | Justin      
mark!好帖
  回复  引用  查看    
#25楼 2008-06-01 23:41 | 乡村酒吧      
能否用dotmsn发送离线消息(给不在线的用户发送)
  回复  引用  查看    
#26楼 2008-07-22 17:21 | 菜无罪1      
这个用winform还是window 服务做好?

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-05-05 10:46 编辑过
 
另存  打印