编写自己的MSN机器人

引入dotMSN开发包

首先我们要先建立一个解决方案,由于.NET框架CLS(通用语言规范)可以支持多种不同的开发语言,因此你在建立解决方案的时候可以使用目前.NET支持的VB.NETC#J#C++等语言。

 

在解决方案建立后,第一步需要做的就是将dotMSN开发包引用到解决方案中来,以便我们可以在今后的开发过程中使用。

可以看到在引用的文件列表中已经加入了DotMSN的开发包,下面在我们通过IDE设计好机器人程序的用户界面后就可以开始使用DotMSNMSN服务器通信了。

DotMSN中有Messenger类,它就是你编程的全部,所以你在程序的开始就要声明该类的一个对象并同时申请内存及初始化:

private DotMSN.Messenger messenger = new Messenger();

在你输入的MSN机器人的邮件地址、认证密码及显示的名称后,首先要做的就是登录到MSN服务器上,我这里自己编写了一个StartMSN函数来包含登录动作,当然该函数中不止包含登录,对于登录以后MSN的一些消息事件也做了重载的声明:

//启动MSN程序

private void StartMSN()

{

try

{

//确认输入的PASSPORT帐号不是默认的设置,否则报错误!

if(txtMail.Text == "yourmail@hotmail.com")

MessageBox.Show(this, "键入你的PASSPORT以登录MSN服务器!");

else

{

//事件重载代码段

//重载上线函数

messenger.ContactOnline += new Messenger.ContactOnlineHandler(ContactOnline);

//重载下线函数

messenger.ContactOffline += new Messenger.ContactOfflineHandler(ContactOffline);

//重载联系人加入函数

messenger.ContactAdded += new Messenger.ContactAddedHandler(ContactAdded);

//重载会话创建函数

messenger.ConversationCreated += new Messenger.ConversationCreatedHandler(ConversationCreated);

//重载同步处理函数

messenger.SynchronizationCompleted += new Messenger.SynchronizationCompletedHandler(OnSynchronizationCompleted);

messenger.Connect(txtMail.Text, txtPass.Text);

Log(this.txtMail.Text + "登录成功!");

messenger.SynchronizeList();

}

}

catch(MSNException e)

{

MessageBox.Show(this, "连接失败:" + e.ToString());

Log("连接失败:" + e.ToString());

}

}

其中messengerConnect方法是登录MSN服务器的主要方法,在登录之前我们需要对于MSN的一些消息事件做重载处理,以便将来这些事件触发时可以调用我们自己编写的逻辑处理代码。

在登录到MSN服务器成功后,马上需要调用的方法就是SynchronizeList(),即与服务器同步联系人列表,列表分为以下4种:

l ForwardList:所有有效联系人列表,可以互相发送消息。

l ReverseList:所有你在对方联系人列表中的联系人列表。

l BlockedList:所有你阻止的联系人列表。

l AllowedList:所有能够看到你状态的联系人列表。

通过对于上述4种列表的操作,可以让机器人了解所有联系人的相关状态并实施相应的操作。

在同步联系人列表结束后,需要设置messenger的状态,MSNStatus是状态的枚举量,使用SetStatus方法来进行设置,状态包括:在线、离线、离开、马上回来、外出就餐等,通过对状态变量的设置可以让联系人看到机器人的不同在线情况。同时通过messenger.Owner.Name的设置可以让机器人在联系人端显示你需要的名称。

接下来比较主要的工作就是对于MSN各类事件的重载处理了,我这里举两个事件处理的例子,其他的事件可以从dotMSN的帮助文件中查阅。机器人的各类逻辑就是通过对于这些事件的重载来实现的。

//会话创建时间处理程序

private void ConversationCreated(Messenger sender, ConversationEventArgs e)

{

//记录会话创建日志

txtLog.AppendText("会话创建成功!/r/n");

//当联系人加入对话时处理函数

e.Conversation.ContactJoin += new Conversation.ContactJoinHandler(ContactJoined); //连接建立时处理函数

e.Conversation.ConnectionEstablished += new Conversation.ConnectionEstablishedHandler(ConnectionEstablished);

//联系人输入消息时处理函数

e.Conversation.UserTyping += new Conversation.UserTypingHandler(ContactTyping);

//处理消息收到消息

e.Conversation.MessageReceived += new Conversation.MessageReceivedHandler(MessageReceived);

//接收文件传输时处理函数

e.Conversation.FileTransferHandler.InvitationReceived +=new DotMSN.FileTransferHandler.FileTransferInvitationHandler(FileTransferHandler_FileTransferInvitation);

}

 

第一个需要处理的就是会话创建事件,也就是机器人与联系人开始会话的情况,代码中重载了5个相关的事件,从代码中已经能够猜想这些事件的大致用途了。会话创建事件本身的重载工作是在StartMSN()中声明的。下面就是这些事件的重载代码:

 

//联系人输入消息时处理函数

private void ContactTyping(Conversation sender, ContactEventArgs e)

{

txtLog.AppendText(e.Contact.Name + "正在输入消息.../r/n");

Log(e.Contact.Name + "正在输入消息...");

}

//联系人加入对话处理函数

private void ContactJoined(Conversation sender, ContactEventArgs e)

{

//联系人加入对话,记录联系人姓名到日志中

txtLog.AppendText(e.Contact.Name + "加入对话!/r/n");

Log(e.Contact.Name + "加入对话!");

//输入欢迎词

sender.SendMessage("你好啊!我是" + messenger.Owner.Name);

sender.SendMessage("发送短信请使用以下命令:手机号码#要发送的内容");

//sender.SendMessage("如果需要帮助文件,请键入get_help_file");

}

//连接建立处理函数

private void ConnectionEstablished(Conversation sender, EventArgs e)

{

txtLog.AppendText("连接完成!/r/n");

}

//收到联系人消息时处理函数

private void MessageReceived(Conversation sender, MessageEventArgs e)

{

string msg_rcv = e.Message.Text;

msg_rcv = e.Message.Text.Replace("/0", "");

txtLog.AppendText(e.Sender.Name + "说:" + msg_rcv + "/r/n");

Log(e.Sender.Name + "说:" + msg_rcv);

string msg_dnt = MessageHandle(msg_rcv, e.Sender.Name, e.Sender.Mail);

sender.SendMessage(msg_dnt);

Log("机器人发送消息:" + msg_dnt);

}

//文件接收动作处理函数

private void FileTransferHandler_FileTransferInvitation(FileTransferHandler sender, FileTransferInvitationEventArgs e)

{

//接收动作为真

e.Accept = true;

//收到的文件保存在D:/MSN_BOT_FILES下

string tmpfile = "D://FileOfBot//" + sender.Conversation.Messenger.Owner.Name + "@" + e.FileTransfer.FileName;

e.FileTransfer.ReceiveStream = new FileStream(tmpfile, FileMode.Create, FileAccess.ReadWrite);

txtLog.AppendText("接收文件并保存到:" + tmpfile + "/r/n");

}

在这些事件当中,MessageReceived事件比较重要,它表示当机器人接收到用户发送的文字消息时所进行的处理逻辑,这里也就是你可以自由发挥的地方了!我这里编写了独立的MessageHandle函数来对于所有收到的消息进行处理。在该处理函数中,所有机器人的智能情况和相关的业务功能都可以根据你自己对于机器人的定位来实现。

我这里的机器人所做的就是将用户发送的消息命令解码并根据用户输入的目标移动中断发送移动短信。当然这里是需要后端有短信网关或者是相关的短信发送设备的支持。你看,你轻松地就拥有了自己的短信服务机器人了。

在后端有相关数据库的支持下,机器人同样可以根据用户的输入来查询数据库的相关信息并返回给用户。

在拓展用户、客户服务、产品推介等方面又多了一条网络的途径!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值