编程教程
您现在的位置: 中国个人站长站 >> 网络编程 >> ASP.NET教程 >> 教程正文 制作MSN机器人
推荐位

制作MSN机器人

中国个人站长站 ASP.NET教程 点击数: 更新时间:2007-7-8 21:25:46

突然有点心动想做个MSN机器人,在 http://www.hypothetic.org/docs/msn/resources/projects.php?有很多例子,但是不是全部都有源代码的,只能看着眼馋了。dotMSN?找到了一个 .net 写的库。调用起来非常简单。

        //登陆        private void StartMSN()        {            if( (txtEmail.Text != "")||(txtPsw.Text != "") )            {                msn.Connect(txtEmail.Text, txtPsw.Text);                if(msn.Connected)                {                    //setup callback function                    msn.ContactOnline += new DotMSN.Messenger.ContactOnlineHandler(msn_ContactOnline);                    msn.ContactOffline += new DotMSN.Messenger.ContactOfflineHandler(OnContactOffline);                    msn.SynchronizationCompleted += new DotMSN.Messenger.SynchronizationCompletedHandler(OnSynchronizationCompleted);                    msn.MessageReceived += new DotMSN.Messenger.MessageReceivedHandler(OnMessageReceived);                    msn.ConversationCreated += new DotMSN.Messenger.ConversationCreatedHandler(OnConversationCreated);                    msn.SynchronizeList();                    txtLog.Text = "MSN Connected\r\n" + txtLog.Text;                }            }        }        //注销        private void EndMSN()        {            if(msn.Connected)            {                msn.CloseConnection();                if(!msn.Connected)                {                    txtLog.Text = "MSN Disconnected\r\n" + txtLog.Text;                }            }        }        //成功同步联系人列表        private void OnSynchronizationCompleted(Messenger sender, EventArgs e)        {            msn.SetStatus(MSNStatus.Online);            txtLog.Text = "set status : Online\r\n" + txtLog.Text;            FillListView(lstViewFL, msn.GetListEnumerator(MSNList.ForwardList) );            FillListView(lstViewRL, msn.ReverseList);            FillListView(lstViewBL, msn.BlockedList);            FillListView(lstViewAL, msn.AllowedList);        }        //联系人上线        private void msn_ContactOnline(Messenger sender, ContactEventArgs e)        {            txtLog.Text = e.Contact.Name + " status : " + e.Contact.Status.ToString() + "\r\n" + txtLog.Text;            RefreshListView(lstViewFL, e.Contact);            RefreshListView(lstViewRL, e.Contact);            RefreshListView(lstViewBL, e.Contact);            RefreshListView(lstViewAL, e.Contact);        }        //联系人下线        private void OnContactOffline(Messenger sender, ContactEventArgs e)        {            txtLog.Text = e.Contact.Name + " status : " + e.Contact.Status.ToString() + "\r\n" + txtLog.Text;            RefreshListView(lstViewFL, e.Contact);            RefreshListView(lstViewRL, e.Contact);            RefreshListView(lstViewBL, e.Contact);            RefreshListView(lstViewAL, e.Contact);        }        //初始化联系人列表        private void FillListView(ListView lst, Messenger.ContactList.ListEnumerator contactList)        {            lst.Clear();            foreach( Contact contact in contactList )            {                ListViewItem item = new ListViewItem(contact.Name + " status: " + contact.Status.ToString());                item.Tag = contact;                lst.Items.Add(item);            }        }        //刷新联系人列表        private void RefreshListView(ListView lst, Contact contact)        {            foreach( ListViewItem item in lst.Items)            {                Contact itemtag = (Contact)item.Tag;                if( itemtag.Mail.Equals(contact.Mail) )                {                    item.Text = contact.Name + " status: " + contact.Status.ToString() ;                    return;                }            }//            ListViewItem newItem = new ListViewItem(contact.Name + " status: " + contact.Status.ToString());//            newItem.Tag = contact;//            lst.Items.Add(newItem);        }        //加入对话        private void OnConversationCreated(Messenger sender, ConversationEventArgs e)        {            txtLog.Text = "ConversationCreated\r\n" + txtLog.Text;            e.Conversation.ContactJoin += new DotMSN.Conversation.ContactJoinHandler(ContactJoin);            e.Conversation.MessageReceived += new DotMSN.Conversation.MessageReceivedHandler(MessageReceived);            e.Conversation.UserTyping += new DotMSN.Conversation.UserTypingHandler(UserTyping);        }        #region 在标题栏显示联系人Email        private void lstViewFL_SelectedIndexChanged(object sender, System.EventArgs e)        {            DisplayMail( (ListView)sender );        }        private void lstViewRL_SelectedIndexChanged(object sender, System.EventArgs e)        {            DisplayMail( (ListView)sender );        }        private void lstViewAL_SelectedIndexChanged(object sender, System.EventArgs e)        {            DisplayMail( (ListView)sender );        }        private void lstViewBL_SelectedIndexChanged(object sender, System.EventArgs e)        {            DisplayMail( (ListView)sender );        }        private void DisplayMail(ListView lst)        {            if( lst.SelectedItems.Count == 1 )            {                Contact contact = (Contact)lst.SelectedItems[0].Tag ;                this.Text = contact.Mail;            }        }        #endregion        //加入对话        private void ContactJoin(Conversation sender, ContactEventArgs e)        {            txtLog.Text = e.Contact.Name + " " + e.Contact.Mail + " " + "ContactJoin\r\n" + txtLog.Text;        }        //收到消息        private void MessageReceived(Conversation sender, MessageEventArgs e)        {            txtLog.Text = e.Sender.Name + " " + e.Sender.Mail + " " + e.Message.Text + "\r\n" + txtLog.Text;            sender.SendMessage( e.Message.Text );        }        //对方输入        private void UserTyping(Conversation sender, ContactEventArgs e)        {            txtLog.Text = e.Contact.Name + " " + e.Contact.Mail + " " + "is Typing\r\n" + txtLog.Text;        }

这里是部分代码完整的工程可以点击netdisk3.sina.com.cn/cgi-bin/netdisk/d_down.cgi/3300b593a1a796b15ba32778f2c28786809ed933265797fd0759bb923b87917e6b1810f08cdbf9156e60cff563f10af6eb2f3a668579829cc03b9b376ebd75a36deda2c3aef25ed7cec21fb526e22aa3/:^^Y07jZQ:/^^TXNtLmoobA/Msn.zip">这里下载,这个机器人现在还只能鹦鹉学舌,但只要修改一下 MessageReceived 就可以让他变得很聪明了。甚至让列表中的人教它回答问题。只要你有创意。在这个过程中我用了一个.net的反编译工具察看dll里面的代码,可以帮助理解每个接口的作用,点击net/Download.aspx?File=Reflector">这里下载。呵呵,大家不要用这个工具剽窃人家的劳动成果啊,因为那可不是我的本意。

教程录入:swh    责任编辑:swh 
个人站长站与你风雨同舟!
本站所提供的资源均来源于互联网,如有侵权行为,请与本站管理员联系,我们会第一时间删除!
·如果您发现《制作MSN机器人》文章有错误,也请通知我们修改!
联系邮箱chinageren#126.com,谢谢支持!
站内搜索:
广告服务 | 友情链接 | 联系我们 | 免责声明 | 用户留言 | 网站导航
版权所有:中国个人站长站 2007-2008 未经授权禁止复制或建立镜像 客服QQ号:112731235
copyright © 2007-2008 www.ChinaGeRen.com online services. all rights reserved. 苏ICP备05000059号