FelBot is my new baby, written in C#. It's code base is a bit messy and it's sort of kludgish in general, but I'm making progress in going back and fixing things that aren't working the way they're supposed to. This is sort of a preview of what to expect for it. I'm personally using it in it's current state as a chatbot, but I can see you thinking that it's missing a few essential features. Anyhow, check it out and find some bugs for me, if you're bored!
Note! The bot currently only supports Diablo II, because I haven't gotten around to programming NLS, and lockdown affects the other OLS clients. MyndFyre, update MBNCSUtil for lockdown already!
Configuration:
Once the bot is loaded, select Configure from the options menu. Use "VD2D" for client.
Hashes:
<Path>\Hashes\VD2D\Game.exe (etc..)
I'm currently working on version 1.01.
Fixes:
- You can no longer talk before the bot is in the chat environment.
- Now, the SID_CHATCOMMAND for joining the home channel is sent after the server responds to SID_CHATCOMMAND, not right after the client sends it.
- Added "PX2D" as a valid client in the pre-connection sanity check.
- If you try to disconnect before connecting, you'll no longer get an exception, due to checking if the socket is a null pointer before closing it's object.
New features:
- Added code to support clients with two CD keys, thus Diablo II is now supported.
- On the configuration form, client has become a drop-down box with "user-friendly" names
- Handling of SID_CHATEVENT's EID_BROADCAST, EID_CHANNELFULL, and EID_CHANNELRESTRICTED
To Do:
- Queue
- BNLS support (enabling StarCraft, StarCraft Expansion, and WarCraft II)
Looks alright, the name is cool too.
Thanks!
Isn't Fel one of the newer LoD runes? I forget...
Just used it, not to bad. Is this going to be a pure chat bot or will it someday have Op/Clan management features?
Fel Reaver!
Let me know if you need help constructing a plugin environment. Mine is part of what got me my job at Terralever, you know. ;)
In the current version you get an unhandled exception if you try to Disconnect before Connecting.
No screenies?
Quote from: rabbit on August 29, 2007, 12:46:43 AM
Isn't Fel one of the newer LoD runes? I forget...
No, Hel I think.
Quote from: Hell-Lord on August 29, 2007, 12:52:52 AM
Just used it, not to bad. Is this going to be a pure chat bot or will it someday have Op/Clan management features?
I'm going to go StealthBot style. It'll have commands, but I'm not going to focus on making them first priority, or top-notch automoderation features, or the like.
Quote from: warz on August 29, 2007, 02:08:26 AM
Fel Reaver!
Yep. And the Fel Horde from WarCraft III.
Quote from: MyndFyrex86/64] link=topic=10134.msg128891#msg128891 date=1188377015]
Let me know if you need help constructing a plugin environment. Mine is part of what got me my job at Terralever, you know. ;)
I'll definitely hit you up in the future, but right now I'm just looking to lay down the foundation.
Quote from: Warriorx86] link=topic=10134.msg128892#msg128892 date=1188378129]
In the current version you get an unhandled exception if you try to Disconnect before Connecting.
Thanks!
I'll fix that. Fixed.
Quote from: chuck on August 29, 2007, 12:05:53 PM
No screenies?
I'm expecting the UI to have some rather drastic changes before it gets out of "beta", so at this point, it doesn't really matter. If you'd really like, though, here's (http://img295.imageshack.us/img295/3167/felbotch5.png) one I took slightly before rolling out 1.0 Beta.
Quote from: Joex86] link=topic=10134.msg128921#msg128921 date=1188414332]
I'm expecting the UI to have some rather drastic changes before it gets out of "beta", so at this point, it doesn't really matter. If you'd really like, though, here's (http://img295.imageshack.us/img295/3167/felbotch5.png) one I took slightly before rolling out 1.0 Beta.
Not bad, I just wanted to see a screenie cause I have no windows computers available to test it on.
Quote from: Joex86] link=topic=10134.msg128921#msg128921 date=1188414332]
Quote from: Hell-Lord on August 29, 2007, 12:52:52 AM
Just used it, not to bad. Is this going to be a pure chat bot or will it someday have Op/Clan management features?
I'm going to go StealthBot style. It'll have commands, but I'm not going to focus on making them first priority, or top-notch automoderation features, or the like.
So you're going to copy a piece of shit?
Quote from: rabbit on August 29, 2007, 03:45:01 PM
Quote from: Joex86] link=topic=10134.msg128921#msg128921 date=1188414332]
Quote from: Hell-Lord on August 29, 2007, 12:52:52 AM
Just used it, not to bad. Is this going to be a pure chat bot or will it someday have Op/Clan management features?
I'm going to go StealthBot style. It'll have commands, but I'm not going to focus on making them first priority, or top-notch automoderation features, or the like.
So you're going to copy a piece of shit?
I didn't say I was copying Stealthbot, I said I was copying the way it's used as both a chatbot and a moderation bot. I'm going to focus on a chatbot, but add commands in such a way that it can be used as a moderation bot.
Anyhow, I'm going to Madison and my parent's are driving, which means that I have a lot of spare time on my hands. Taking my laptop, and I'm going to code the queue, BNLS support for CheckRevision, and perhaps some other stuffs, test it when I get home tonight (late) and then perhaps release 1.01 if I think it's complete enough.
As far as being out of town this weekend, I will have my laptop with me, but I doubt I'll get much time to use it.
StealthBot tries to do everything and thus fails. Pick chat or pick moderation. You can't have both.
Quote from: rabbit on August 29, 2007, 04:10:13 PM
StealthBot tries to do everything and thus fails. Pick chat or pick moderation. You can't have both.
Sure you can, if it's strongly plugin-oriented. :)
Okay, I pick chatbot then. But you can't say that it'll fail at being a useful chatbot if I include remote commands.
Sure, but if you include trivia I'll have to kill you.
Agreed. But, when I lay the plugin foundation down (it's on the todo list, under "eventually"), if someone writes a trivia plugin (or I get bored and do it myself), I'll have no problem linking to it. It won't be a core feature, though.
What I would do for any bot I make in the future (currently planned: none) would be to build in anti-trivia protections so that even plugins could not provide trivia functionality.
Quote from: rabbit on August 29, 2007, 04:10:13 PM
StealthBot tries to do everything and thus fails. Pick chat or pick moderation. You can't have both.
Disagree. My bot's great at both. The GUI is a plugin, so you can shut it off for a moderation deamon. Flood protection is optional, so it doesn't bother you if you're chatting.
There's a difference between a moderation bot with a GUI and a Chat/mod combo.
Quote from: rabbit on August 31, 2007, 10:27:48 PM
There's a difference between a moderation bot with a GUI and a Chat/mod combo.
That's not what you said:
Quote from: rabbit on August 29, 2007, 04:10:13 PM
StealthBot tries to do everything and thus fails. Pick chat or pick moderation. You can't have both.
You just admitted that you could have both.
I think it'd be possible with a rich plugin environment. Perhaps the ability to swap queue systems tiered more towards chat/moderation and such.
Even then, it's perfectly possible to have a somewhat decent moderation and a chat client if you're not concerned with top of the line efficiency. Not that it's much of a problem anymore though.
Quote from: iago on September 01, 2007, 12:12:22 AM
Quote from: rabbit on August 31, 2007, 10:27:48 PM
There's a difference between a moderation bot with a GUI and a Chat/mod combo.
That's not what you said:
Quote from: rabbit on August 29, 2007, 04:10:13 PM
StealthBot tries to do everything and thus fails. Pick chat or pick moderation. You can't have both.
You just admitted that you could have both.
How so?
Thanks many thanks to everyone. This is coming along nicely, and with the rest of this here, it's decently "usable". Again, thanks for checking it out. Go ahead and test this, and treat it's current features like a "release candidate", except the queue. Enjoy.
Also, if anyone knows of a currently, rather close yet safe anti-flood algorithm, let me know. :)
Quote1.01 "Public Beta"
Bug Fixes:
- You can no longer talk before the bot is in the chat environment.
- Now, the SID_CHATCOMMAND for joining the home channel is sent after the server responds to SID_CHATCOMMAND, not right after the client sends it.
- Added "PX2D" as a valid client in the pre-connection sanity check.
- If you try to disconnect before connecting, you'll no longer get an exception, due to checking if the socket is a null pointer before closing it's object. Thanks, Warrior!
Additions:
- Added code to support clients with two CD keys, thus Diablo II: Lord of Destruction is now supported
- On the configuration form, client has become a drop-down box with "user-friendly" names
- Handling of EID_BROADCAST, EID_CHANNELFULL, and EID_CHANNELRESTRICTED messages
- Added a primitive queue. Note that I have only layed down the foundation and made it so that the messages will be sent 500ms after the previous one. This isn't meant to provide protection from flooding off, and don't expect it to work for that at this point.
- Added a foundation for commands. These are only accessable to the "bot owner". In the future, an access database will be added.
EDIT -
Known issue, the channel list won't clear when you join a new channel. Fixed for 1.02.
Quote from: Warriorx86] link=topic=10134.msg129140#msg129140 date=1188630755]
I think it'd be possible with a rich plugin environment. Perhaps the ability to swap queue systems tiered more towards chat/moderation and such.
Even then, it's perfectly possible to have a somewhat decent moderation and a chat client if you're not concerned with top of the line efficiency. Not that it's much of a problem anymore though.
Top of the line efficiency? We're talking about a program that watches a socket for data indicating that people are joining/leaving/chatting in a channel. How much processing power do you really think that takes? My bot's written in java, and I've never seen a stable build spike above 2% CPU usage.
Joe: Check out my queue system. It's set very, very conservatively, so you can probably decrease the time constants.
http://bnubot.googlecode.com/svn/trunk/BNUBot/src/net/bnubot/core/ChatQueue.java
[edit] You'll also need to look at my Connection class to figure out how canSendChat() works:
http://bnubot.googlecode.com/svn/trunk/BNUBot/src/net/bnubot/core/Connection.java
Quote from: Camel on September 04, 2007, 12:40:12 PM
Quote from: Warriorx86] link=topic=10134.msg129140#msg129140 date=1188630755]
I think it'd be possible with a rich plugin environment. Perhaps the ability to swap queue systems tiered more towards chat/moderation and such.
Even then, it's perfectly possible to have a somewhat decent moderation and a chat client if you're not concerned with top of the line efficiency. Not that it's much of a problem anymore though.
Top of the line efficiency? We're talking about a program that watches a socket for data indicating that people are joining/leaving/chatting in a channel. How much processing power do you really think that takes? My bot's written in java, and I've never seen a stable build spike above 2% CPU usage.
Joe: Check out my queue system. It's set very, very conservatively, so you can probably decrease the time constants.
http://bnubot.googlecode.com/svn/trunk/BNUBot/src/net/bnubot/core/ChatQueue.java
[edit] You'll also need to look at my Connection class to figure out how canSendChat() works:
http://bnubot.googlecode.com/svn/trunk/BNUBot/src/net/bnubot/core/Connection.java
By efficiency I was more leaning towards a unified Queue system.
Click my link to ChatQueue.java - it's a unified queue.
Quote from: Joex86] link=topic=10134.msg129164#msg129164 date=1188702048]
Quote
- Added a foundation for commands. These are only accessable to the "bot owner". In the future, an access database will be added.
It's sad, but now that I've used MSSQL, I don't want to go back to Access.... ever.... again.
Quote from: Camel on September 04, 2007, 12:40:12 PM
Top of the line efficiency? We're talking about a program that watches a socket for data indicating that people are joining/leaving/chatting in a channel. How much processing power do you really think that takes? My bot's written in java, and I've never seen a stable build spike above 2% CPU usage.
That's true enough, in this instance. One of the things I always focused on when I was learning was learning how to do programming tasks the right way, though. There's nothing wrong with taking the time to learn advanced optimization techniques in a project like this (though, the fundamentals are far, far more important).
Remember: your goals aren't always the same as other people's. It's true that sometimes you *should* point out when something is going to be a waste of time and energy (god knows I do it at work a lot). But sometimes the goal is learning for the sake of learning, and when that's the case, don't try to stand in people's way. You've no idea what kinds of things someone will learn on even a misguided plan. (Shoot, I learned what a Singleton object was because I was trying to learn about .NET remoting. It made my world a different place. :P)
I absolutely believe that algorithmic efficiency is rudimentary! Warrior was not referring to algorithmic efficiency, but the efficiency of a system that has hooks for plugins versus one that does not. In a properly designed system, you should not be able to measure the difference, and I tried to make that point subtly by explaining how my bot works. In my bot, the GUI is a plugin, and has been designed as a plugin since before it had a GUI. That ensures two things: the plugin framework is feature complete, and the bot is not inherently bogged down by a GUI.
Quote from: Camel on October 02, 2007, 03:40:35 AM
I absolutely believe that algorithmic efficiency is rudimentary! Warrior was not referring to algorithmic efficiency, but the efficiency of a system that has hooks for plugins versus one that does not. In a properly designed system, you should not be able to measure the difference, and I tried to make that point subtly by explaining how my bot works. In my bot, the GUI is a plugin, and has been designed as a plugin since before it had a GUI. That ensures two things: the plugin framework is feature complete, and the bot is not inherently bogged down by a GUI.
Definitely was not my point, my point was the usability differences between a Queue specialized for heavy moderation and one specialized for Chatting. In days past the two were very distinct things, since then most flood bots have come and gone so the need has gone down and given way to a potentially more unified system. This is noted in my last sentence of my original statement.
In that case, remove the sentence where I mis-interpreted what you said, and the rest of my post is still spot-on. In any event, I still don't believe your point is valid, Warrior. You can simply disable the queue for 'chat mode' or have two different algorithms. This isn't a difficult concept, and I'm not sure why you would argue the point you did.
Quote from: Camel on October 02, 2007, 05:14:48 AM
In that case, remove the sentence where I mis-interpreted what you said, and the rest of my post is still spot-on. In any event, I still don't believe your point is valid, Warrior. You can simply disable the queue for 'chat mode' or have two different algorithms. This isn't a difficult concept, and I'm not sure why you would argue the point you did.
This is exactly what I suggested in my first post, it's very much possible to switch queues on-the-fly. Not really sure what's being argued.
I was talking about your comment regarding efficiency, secon paragraph:
Quote from: Warriorx86] link=topic=10134.msg129140#msg129140 date=1188630755]
I think it'd be possible with a rich plugin environment. Perhaps the ability to swap queue systems tiered more towards chat/moderation and such.
Even then, it's perfectly possible to have a somewhat decent moderation and a chat client if you're not concerned with top of the line efficiency. Not that it's much of a problem anymore though.
What I'm saying is that there's no hit to efficiency if it's properly implemented.
Quote from: Camel on October 02, 2007, 09:41:07 PM
I was talking about your comment regarding efficiency, secon paragraph:
Quote from: Warriorx86] link=topic=10134.msg129140#msg129140 date=1188630755]
I think it'd be possible with a rich plugin environment. Perhaps the ability to swap queue systems tiered more towards chat/moderation and such.
Even then, it's perfectly possible to have a somewhat decent moderation and a chat client if you're not concerned with top of the line efficiency. Not that it's much of a problem anymore though.
What I'm saying is that there's no hit to efficiency if it's properly implemented.
I think you misunderstood me. What I mean was it's possible to write a moderation and chat client using a unified queue with decent response speeds.
I'm putting a few more days of testing / fixing behind 1.03 then releasing it. Notable changes are a fix in the way I received packets (causing some to be unparsed.. bad!), rewriting the entire channel list, using anonymous methods in some places (I anticipate a bit less memory usage), and moving lockdown hashing from long-term to-do to short-term to-do, thanks to MyndFyre's new MBNCSUtil.
I sold out. (http://code.google.com/p/felbot/)
Most of the update information will be handled there from now on, so you all know. PLEASE, test the bejesus out of it and report any bugs you find. Also, critique my source code (which is available in the SVN) and let me know of ways I can improve. I know it's not perfect.
By the way, if you find any private information in there, please report it to me via IM/PM immediately. Thanks!
Props for not using a cancerous license.
I use the cancerous GPLv2 because it protects the code that's out there from being totally ripped off. If someone asked me for permission to use a part of my code without the license, I'd have to have a really good reason to deny them.
@Joe: Good job choosing the best code site ever :) If you did manage to put personal information in SVN, it's locked in forever! It's trivial to get old revisions, even anymously, from SVN. If Google ever archives that site, it could be one search away! Be careful, and use svn:ignore on all the files you don't want checked in.
If anyone's interested on what's up, check this out.
http://felbot.googlecode.com/svn/trunk/Felbot/_Documentation/Changelog.htm
By the way, svn/trunk/Felbot can be checked out and run at any time. I don't think I've ever uploaded a non-building commit -- I always commit after testing stuff. Sometimes stuff is broken, but it's usually not.