Writing a simple messenger bot with Live Messenger Add-in SDK

很早就想给 Messenger 写个 Bot玩玩,有一段时间还分析过messenger的协议,不过Messenger这东东每次更新必然升级协议,搞得到后来都没力气跟他玩了。
Live Messenger 算是有了个Add-In SDK, 不过这个Add-in本来不是用来作Bot用的,功能很弱而且限制颇多:

  • Messenger 只能 Load 一个Add-In Dll (这点其实可以绕过去,写一个Add-In ,再自己公开了一个Interface,然后每次Init的时候到一个固定的Folder去动态加载所有实现了这个Interface的Dll)
  • Add-In 能做的事情非常有限,它只能响应Receive Message Event去 Reply message。
  • Add-In 只能Reply Message 给 Message 的Sender,不能发给第3方。
  • Add-In 只能回复1条Message 给Message 的 Sender (Kao,这个是最致命的,很多东东基本上没的玩了)

不过看在至少能Reply Message的份上,凑合着用用把:

首先要Enable Messager 的 Addin功能,缺省情况下,这个Feature是disable的。
改一下注册表,加个DWORD key in HKEY_CURRENT_USER\Software\Microsoft\MSNMessenger\AddInFeatureEnabled
set the value to 1, Restart your messenger, Login and open option window: Add-In tab 就出现了:
image
(有时候你会发现改了注册表Add-In Tab还是没有出来, 如果确定你的Registry没有改错,重装一下Live Messenger应该可以解决问题,还不行的话,请回忆你前半生的所作所为以检查RPWT)
当然,在这里只是Load,要激活Add-In,你还要Turn On它:
image
 
Add-In的开发很容易,简单的引用Messenger Program Folder里的MessengerClient.dll,再创建一个Class实现IMessengerAddIn。IMessengerAddIn 接口实现也很简单,在Initialize里注册一下你的ReplyMessage事件处理函数就行了。
Online SDK里有Sample Code,基本只要照抄。唯一要注意一点的就是编译出的Dll file name 要和你的 实现 IMessengerAddIn 的Class的FullName相同,比如说你的Class叫MyCompany.Testing.MyMessagerAddIn, dll 名字就得叫做MyCompany.Testing.MyMessagerAddIn.dll。
 
对了,给你的Add-In Dll 加上Strong Name 并且Add to GAC, 否则Add-In dll 会Run 在Internet Permission Set,不能读写本地文件,不能访问Database,不能… 基本上除了可以Reply个”Hello World”,你的AddIn啥也干不了。
 
调试也挺痛苦,我刚开始是用VS.Net 直接 Attach msnmsgr.exe 这个进程,然后在Messenger里 Load Addin Dll, 如果你在Compile Add-in dll之后刷新了GAC里Dll 版本的话,Initalize method 上的断点是能起作用的。后来就索性先当这Add-In是个普通的Class Library, 用NUnit 或者直接写个test winform project 来调试了。
 
 
  写Bot的时候在网上乱搜,还找到个好玩东西:AIML in A.L.I.C.E.。嗯,专门用于聊天机器人的ML语言,还有个.Net 实现的解释器。加上个AIML编辑器,应该还是能玩出点花样的。
    • Rome
    • 七月 4th, 2007

    沙发!

    终于有篇有意思的文章了!

    [回复]

    • Zee
    • 七月 4th, 2007

    诡异,首页的排版怎么这样?

    [回复]

    • 七月 4th, 2007

    现在有个Addin确实方便,不过功能实在是太弱了,一开始作了个类似QQ自动回复的东西,不过也觉得用处不大

    [回复]

    • 怎么没把你的猫挡住,呵呵
    • 七月 4th, 2007

    怎么没把你的猫挡住,呵呵

    [回复]

  1. 这东西基本上就是一鸡肋。开发一个超大容量的聊天记录软件似乎不错。:D

    [回复]

    • HuaHua
    • 七月 11th, 2007

    LM还得继续改进哦!

    [回复]

    • leon
    • 八月 4th, 2007

    老大,你终于又开始写技术文章了

    [回复]

    • 笨猫猫
    • 十月 21st, 2007

    嘿嘿,还好吧,有没有想我。:-)

    [回复]

  1. 还没有引用通告。