Spiga

QQ机器人程序,Joymsg,欢迎大家扩展

2008-06-12 14:48 by Loning, 3284 visits, 收藏, 编辑

    自从在园子看到LumaQQ的源码后,就一直有要写个简单机器人程序的冲动.这些天终于有时间,写了这个简单的程序.
    我喜欢看图片:)
    
为了程序的可扩展性,我把数据源与消息处理分开来写了.现阶段只实现了1个数据源即LumaQQDataSource,以及2个消息处理程序.以上您看到的就是我实现的翻译处理程序以及RSS请求处理程序.
接口如下:

 1    public interface IDataSource
 2    {
 3        /// <summary>
 4        /// 发送消息
 5        /// </summary>
 6        /// <param name="requester">接受者</param>
 7        /// <param name="message">消息内容</param>

 8        void SendMessage(object requester, string message);
 9        /// <summary>
10        /// 数据源开始工作
11        /// </summary>

12        void Work();
13        /// <summary>
14        /// 数据源停止工作
15        /// </summary>

16        void Stop();
17        /// <summary>
18        /// 消息接收时该事件被触发
19        /// </summary>

20        event EventHandler<MessageEventArgs> MessageReceived;
21        /// <summary>
22        /// 用户状态改变时该事件被触发
23        /// </summary>

24        event EventHandler<FriendStatusChangedEventArgs> FriendStatusChanged;
25    }

26
27namespace Loning.Joymsg.Interface
28{
29    public interface IDataSource
30    {
31        /// <summary>
32        /// 发送消息
33        /// </summary>
34        /// <param name="requester">接受者</param>
35        /// <param name="message">消息内容</param>

36        void SendMessage(object requester, string message);
37        /// <summary>
38        /// 数据源开始工作
39        /// </summary>

40        void Work();
41        /// <summary>
42        /// 数据源停止工作
43        /// </summary>

44        void Stop();
45        /// <summary>
46        /// 消息接收时该事件被触发
47        /// </summary>

48        event EventHandler<MessageEventArgs> MessageReceived;
49        /// <summary>
50        /// 用户状态改变时该事件被触发
51        /// </summary>

52        event EventHandler<FriendStatusChangedEventArgs> FriendStatusChanged;
53    }

54}


在IDataSource中定义了两个事件,
    FriendStatusChanged是好友状态改变时引发的事件,如上线,离开,下线.
    MessageReceived是收到请求信息时触发的事件.
这两个事件触发后分别由 ProcessorManager  调用IProcessor的两个Processor.

在 ProcessorManager 中引用这个定义接口的项目,负责相关插件的加载以及数据源与处理程序之前的信息交换工作.

    ProcessorManager 肯定是要多线程的,但是我认为不需要对线程有太多的控制,因此只是用委托实现多线程(其实Thread我看着好晕的).
    ProcessorManager 由于需要配置数据源插件以及处理程序插件的信息,因此定义了一个ConfigurationSection,其实配置还是蛮简单的.
下面是配置文件的ProcessorManager 部分

  <Joymsg processMessage="收到消息\r\n{0}\r\n处理中,请稍候">
    
<DataSources>
      
<add name="lumaQQ" type="Loning.Joymsg.LumaQQDataSource.LumaQQDataSource, Loning.Joymsg.LumaQQDataSource, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    
</DataSources>
    
<Processors>
      
<add name="default" type="Loning.Joymsg.DefaultProcessor.DefaultProcessor, Loning.Joymsg.DefaultProcessor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      
<add name="online" type="Loning.Joymsg.DefaultProcessor.DefaultProcessor, Loning.Joymsg.DefaultProcessor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      
<add name="fy" type="Loning.Joymsg.TranslationProcessor.TranslationProcessor, Loning.Joymsg.TranslationProcessor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      
<add name="rss" type="Loning.Joymsg.RssProcessor.RssProcessor, Loning.Joymsg.RssProcessor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    
</Processors>
  
</Joymsg>
注意插件的type是要fullname的,因为直接调用的Type.GetType()方法.

    ProcessorManager 使用了Unity 1.1,由于IProcessor加载通常需要很长的时间,(我在写RssProcessor的时候发现了这个问题),因此IProcessor是个单件.具体的加载方式请看我附上的源码.
    使用方法很简单,即
    [处理器名][空格|:][处理器自定义的命令]
    如rss cnblogs,fy 我爱博客园
    在QQ群中定义了前缀要加robot,这个限定是在LumaQQDataSource中实现的.如果您有兴趣请看一下相关代码:)调用就是robot rss cnblogs了.
我为了偷懒在Test项目中直接引用了那些插件项目,其实只要把插件的DLL复制到程序输出的目录下就可以工作的.
如果您有兴趣,您可以实现一下Processor,请单纯的引用Loning.Joymsg.Interface这个项目.然后您想跟其他人分享的话就发到园子好了T_T.可以实现的东西好多,CMDSHELL,Telenet,给QQ输段代码让QQ返回个值...看各位想像力啦.当然了,别人实现了MSNDataSource后您会发现您的处理程序可以良好的工作.

源码下载:(其实弄个svn不错,再说啦....)
    http://www.kingcms.net/userfiles/loning.joymsg.rar
PS:测试的时候需要修改Test项目的配置文件,有个luma:qq,luma:password吧,把这个改成您qq的帐号密码:)
    写在最后:感谢啊不,没有他写的LumaQQ.NET偶是不会有写这个机器人程序的想法的.感谢蓝精灵,他修改了LumaQQ.net的代码使群支持长消息发送.感谢TerryLee,Inrie(洪晓军),了解了Unity,实在是很好玩的东西:)其实要感谢园子里每个人啦,给我那么多文章看,让我感受到纯技术社区的魅力...
    我没怎么看过系统的知识了,一般只是凭着兴趣在课余时间看看书罢了.即将要上大学了,因为希望接受很系统的东西,所以报了软件工程.可貌似这个专业要分需要很低,感觉保送亏了...T_T...不过计算机科学与技术,人貌似实在很多.大学也不是很牛的大学了...所以,希望各位给一些软件设计方面的意见,可以先拿这个程序挑问题啦.谢谢各位.第一次发首页...
标签: LumaQQ, IOC, Unity
Add your comment

30 条回复

  1. #1楼 真见      2008-06-12 15:02
    太有深度了,不是我可以学的。
     回复 引用 查看   
  2. #2楼 空中的风月      2008-06-12 15:07
    好東西,就是用來支持的.
     回复 引用 查看   
  3. #3楼 石牌村夫      2008-06-12 15:11
    楼主还没有上大学?
     回复 引用 查看   
  4. #4楼[楼主] Loning      2008-06-12 15:32
    @石牌村夫
    没上啊,准备上呢,自从寒假就在家解放啦,同学高考完了终于有人陪我玩了:)
     回复 引用 查看   
  5. #5楼 yzlhccdec      2008-06-12 15:43
    没仔细看,翻译是调的API吧?
     回复 引用 查看   
  6. #6楼[楼主] Loning      2008-06-12 15:46
    @yzlhccdec
    很邪恶的分析了一下google的ajax,然后用个正则直接把东西取出来了..T_T..
    Firefox是好东西..
     回复 引用 查看   
  7. #7楼 Windie Chai(笑煞天)      2008-06-12 15:56
    强大。
    今天忽然突发奇想,可不可以在MSN中集成QQ?嘿嘿。
     回复 引用 查看   
  8. #8楼 chzhcpu      2008-06-12 16:07
    @Windie Chai(笑煞天)
    好想法
     回复 引用 查看   
  9. #9楼[楼主] Loning      2008-06-12 16:13
    大家可以加这个机器人
    896122068
     回复 引用 查看   
  10. #10楼 电影[未注册用户]2008-06-12 16:39
    看不懂!!有点深
     回复 引用   
  11. #11楼 Solog      2008-06-12 17:05
    LZ有前途。高三就能写出一点东西了。
    学校大三的孩子们,还不一定知道Unity,正则。
    LZ上学后加油啊
     回复 引用 查看   
  12. #12楼 airwolf2026      2008-06-12 17:09
    楼主莫非就是牛逼哄哄?嘎嘎牛!!!!
     回复 引用 查看   
  13. #13楼 yzlhccdec      2008-06-12 18:02
    @Loning
    是firebug吧,呵呵....其实我觉得ie下面的httpwatch也蛮强大...
    你很强啊,呵呵....
    PM我一下你联系方式?
     回复 引用 查看   
  14. #14楼 生鱼片      2008-06-12 18:22
    支持下
     回复 引用 查看   
  15. #15楼[楼主] Loning      2008-06-12 21:16
    @Solog,谢谢:)
    @yzlhccdec,当然firefox的firbug啦...其实我打完了才意识到打错了...不过是aptana的那个firebug,aptana是好东东...
    @生鱼片,谢谢你
     回复 引用 查看   
  16. #16楼 戈多      2008-06-12 22:04
    楼主很强大,让我汗颜,学习了
     回复 引用 查看   
  17. #17楼 求知无傲      2008-06-13 08:58
    强。
     回复 引用 查看   
  18. #18楼[楼主] Loning      2008-06-13 09:41
    @戈多,@求知无傲
    只是个小程序罢了....

    @cheap wholesale Shox NZ Running Shoes
    孤独 09:39:33
    收到消息\r\ncheap wholesale Shox NZ Running Shoes \r\n处理中,请稍候
    孤独 09:39:35
    该语由en转换至zh,翻译为:廉价批发新西兰出品的Shox跑鞋
    该语由en转换至en,翻译为:cheap wholesale Shox NZ Running Shoes

    ...原来是这个意思...
     回复 引用 查看   
  19. #19楼 Kevin Li      2008-06-13 12:22
    好牛!看了勃主的博文,我的这个 http://space.cnblogs.com/group/topic/2995/ 也有一点思路了!
     回复 引用 查看   
  20. #20楼 BruceZhou      2008-06-13 12:41
    还不能看懂,收藏慢慢看
     回复 引用 查看   
  21. #21楼 Wuya.net      2008-06-13 14:10
    ding....
     回复 引用 查看   
  22. #22楼 sinbar37[未注册用户]2008-06-13 17:27
    后生可畏啊!!!
     回复 引用   
  23. #23楼[楼主] Loning      2008-06-13 21:48
    @Kevin Li,这就达到了cnblogs的初衷了吧:)
    @Wuya.net,谢谢
    @sinbar37,我又不是很恐怖,不可畏的,我很可爱:)
     回复 引用 查看   
  24. #24楼 yanggh[未注册用户]2008-06-16 15:32
    还没有看,一定要好好学习那啊
     回复 引用   
  25. #25楼 zjfsch      2008-07-21 21:13
    下载怎么需要密码阿?能否给我发份例子?zjf_gis@qq.com 谢谢
     回复 引用 查看   
  26. #26楼 loning[][未注册用户]2008-07-22 00:00
    http://joymsg.googlecode.com/svn/trunk
    这个是这个项目在google上的SVN,您用个SVN把所有代码都下载下来就可以了:)
     回复 引用   
  27. #27楼 Aadon      2008-09-05 09:40
    后生可畏。。。。。。
     回复 引用 查看   
  28. #28楼 zjy2009-03-12 16:04
    你的那个下载地址怎么下载不了啊?
     回复 引用   
  29. #29楼 为什么[未注册用户]2009-05-25 10:40
    为什么我运行的时候,这个QQ没有反应了?
     回复 引用   
  30. #30楼[楼主] Loning      2009-05-26 22:28
    @为什么
    不知道呀.已经很长时间了.
     回复 引用 查看