先发图:
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN
前几日刚刚公布了Joymsg的源码,许多朋友进行了回复,原文地址:http://www.cnblogs.com/loning/archive/2008/06/12/1218381.html
有些朋友说看不懂,也许扩展的确无从下手,没有任何文档,也没多少注释...昨天晚上正好有时间,匆匆写了一个MSN的数据源,使用Dotmsn.

首先,创建一个类库的项目.Loning.Joymsg.DotmsnDataSource,
然后引用项目Loning.Joymsg.Interface.删除程序自动创建的class1.cs,建立DotmsnDataSource.cs.
由于该类为一数据源,因此继承接口IDataSource.
因为整个解决方案我都是用的log4net作日志,引用了Log4net.dll.
关于Dotmsn的东西就不详细说了,网上有许多的例子.

下面具体说一下接口IDataSource.

使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSNusing System;
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN
using System.Collections.Generic;
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN
using System.Text;
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN
namespace Loning.Joymsg.Interface

下面是MessageEventArgs的代码

使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSNusing System;
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN
using System.Collections.Generic;
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN
using System.Text;
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN
namespace Loning.Joymsg.Interface



在DotmsnDataSource中,Work()方法主要实现MSN的登录,而Stop()就是MSN的注销.这些都很容易理解.

我们先抛开好友状态改变的事件.(因为我在实现这个事件的时候遇到点问题,现在也没有解决)

机器人一般是受到消息后进行回复.Dotmsn与LumaQQ.net有所不同,Dotmsn为每一个对话建立了一个Conversation.而普通的聊天(PC上的MSN对MSN),接受消息需要订阅Conversation.Switchboard.TextMessageReceived这个事件,回复时的代码如下:

使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSNvoid Switchboard_TextMessageReceived(object sender, TextMessageEventArgs e)
        }

因为MessageEventArgs中定义的Requester只是单纯的传递给Processor,然后再由Processor返回给DataSource,因此定义为Object的Requester属性可以传入任意的对象.于是在这个数据源中,干脆直接传入SBMessageHandler这个对象,然后在SendMessage中转型后直接调用其SendTextMessage方法就可以了.

具体代码实现如下:

使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSNpublic void SendMessage(object requester, string message)
        }
private void SendMessage(SBMessageHandler handler, string message)

这个方法是为了将Message分条发送出去,因为MSN貌似不支持长消息.

整个流程很简单,就是Dotmsn收到消息触发了事件,然后再由DotmsnDataSource触发它的MessageReceived事件,ProcessorManager订阅了这个事件,接受到把具体信息传给特定的Processor,Processor处理完毕后返回信息,ProcessorManager再将处理后的信息返回给Processor(没学过UML...只会看不怎么会画...)然后我们的机器人就说话了:)

然而我没有实现好友状态改变的事件,因为我订阅了Dotmsn的messenger.Nameserver.ContactStatusChanged += new ContactStatusChangedEventHandler(Nameserver_ContactStatusChanged);事件,但是没触发过,无论我怎么改变状态.知道的朋友请告诉我一下问题出在哪里.

该项目的源码
/Files/loning/Loning.Joymsg.DotmsnDataSource.rar

使用的时候请把生成的DLL COPY到Test项目的输出目录,然后修改Test项目的配置文件
配置文件示例

使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN<?xml version="1.0" encoding="utf-8" ?>
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN
<configuration>
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN  
<configSections>
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN    
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN    
<section name="Joymsg" type="Loning.Joymsg.Configuration.JoymsgSection,Loning.Joymsg" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN    
<section name="RssProcessor" type="Loning.Joymsg.RssProcessor.Configuration.RssProcessorSectionHandler, Loning.Joymsg.RssProcessor" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN  
</configSections>
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN  
<log4net>
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN    
<root>
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN      
<level value="ALL" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN      
<appender-ref ref="rollingFile" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN      
<appender-ref ref="coloredConsoleAppender" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN    
</root>
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN    
<appender  name="rollingFile" type="log4net.Appender.RollingFileAppender,log4net" >
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN      
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN      
<param name="File" value="log" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN      
<param name="AppendToFile" value="true" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN      
<param name="RollingStyle" value="Date" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN      
<param name="DatePattern" value="yyyy.MM.dd" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN      
<param name="StaticLogFileName" value="false" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN      
<layout type="log4net.Layout.PatternLayout,log4net">
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN        
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN        
<param name="Header" value=" ----------------------header-------------------------- " />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN        
<param name="Footer" value=" ----------------------footer-------------------------- " />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN      
</layout>
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN    
</appender>
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN    
<appender name="coloredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN      
<mapping>
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN        
<level value="ERROR" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN        
<foreColor value="White" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN        
<backColor value="Red, HighIntensity" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN      
</mapping>
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN      
<mapping>
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN        
<level value="DEBUG" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN        
<backColor value="Green" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN      
</mapping>
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN      
<mapping>
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN        
<level value="INFO" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN        
<foreColor value="White" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN      
</mapping>
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN      
<layout type="log4net.Layout.PatternLayout">
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN        
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN      
</layout>
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN    
</appender>
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN  
</log4net>
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN  
<Joymsg processMessage="收到消息{0}处理中,请稍候,您可以使用&quot;?&quot;查询命令">
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN    
<DataSources>
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN      
<add name="lumaQQ" type="Loning.Joymsg.LumaQQDataSource.LumaQQDataSource, Loning.Joymsg.LumaQQDataSource, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN      
<add name="dotmsn" type="Loning.Joymsg.DotmsnDataSource.DotmsnDataSource, Loning.Joymsg.DotmsnDataSource, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN    
</DataSources>
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN    
<Processors>
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN      
<add name="default" type="Loning.Joymsg.DefaultProcessor.DefaultProcessor, Loning.Joymsg.DefaultProcessor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN      
<add name="online" type="Loning.Joymsg.DefaultProcessor.DefaultProcessor, Loning.Joymsg.DefaultProcessor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN      
<add name="fy" type="Loning.Joymsg.TranslationProcessor.TranslationProcessor, Loning.Joymsg.TranslationProcessor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN      
<add name="rss" type="Loning.Joymsg.RssProcessor.RssProcessor, Loning.Joymsg.RssProcessor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN    
</Processors>
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN  
</Joymsg>
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN  
<RssProcessor>
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN    
<RssChannels>
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN      
<add name="cnblogs" url="http://www.cnblogs.com/rss" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN      
<add name="news" url="http://news.cnblogs.com/rss" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN      
<add name="cnbeta" url="http://www.cnbeta.com/backend.php" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN      
<add name="kc" url="http://www.adjie.com/club/rss.php?fid=38&amp;auth=0" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN      
<add name="163" url="http://news.163.com/special/00011K6L/rss_newstop.xml" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN      
<add name="sina" url="http://rss.sina.com.cn/news/marquee/ddt.xml" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN      
<add name="nba" url="http://rss.sina.com.cn/sports/basketball/nba.xml" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN      
<add name="game" url="http://rss.sina.com.cn/games/eqxw.xml" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN    
</RssChannels>
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN  
</RssProcessor>
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN  
<appSettings>
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN    
<add key="luma:qq" value="971125573" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN    
<add key="luma:password" value="" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN    
<add key="luma:clusterReply" value="true" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN    
<add key="luma:addFriendAuthMessage" value="我是QQ机器人,请让我加你为好友" />
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN    
<add key="dotmsn:account" value="loningrobot@hotmail.com"/>
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN    
<add key="dotmsn:password" value=""/>
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN  
</appSettings>
使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN
</configuration>



 

相关文章:

  • 2021-06-04
  • 2021-06-08
  • 2022-12-23
  • 2021-09-20
  • 2021-10-03
  • 2021-06-30
  • 2022-12-23
  • 2021-10-07
猜你喜欢
  • 2021-08-26
  • 2022-02-18
  • 2022-01-09
  • 2022-12-23
  • 2021-08-07
  • 2021-07-10
  • 2021-10-28
相关资源
相似解决方案