public CommandHandler ( string message ) : string | ||
message | string | line from chat |
return | string |
public string CommandHandler(string message)
{
/* TODO: Change this to handle command lookups cleaner. Switch to XML file or Web Service.
* Having to handle commands like this due to backwards compatibility with a txt file
*/
string returnMessage = string.Empty;
cmdList cmds = new cmdList();
cmds.settingfile();
if (message == "!commands")
{
for (int i = 0; i < 128; ++i)
{
if (cmds.cmdsfromfile[i, 0] == null)
break;
returnMessage += cmds.cmdsfromfile[i, 2] + " ";
}
}
else
{
for (int i = 0; i < 128; ++i)
{
if (cmds.cmdsfromfile[i, 0] == null)
break;
if (cmds.cmdsfromfile[i, 2].Equals(message))
{
string webURL = cmds.cmdsfromfile[i, 4];
int count = 0;
byte[] chewieBuf = new byte[8192];
string htmlClear = @"<(.|\n)*?>";
WebRequest request;
WebResponse response;
Stream stream;
try
{
request = WebRequest.Create(webURL);
response = request.GetResponse();
stream = response.GetResponseStream();
do
{
count = stream.Read(chewieBuf, 0, chewieBuf.Length);
if (count != 0)
{
returnMessage = Encoding.ASCII.GetString(chewieBuf, 0, count);
}
}
while (count > 0);
try
{
// clean up the string removing html parses
foreach (Match match in Regex.Matches(returnMessage, htmlClear))
returnMessage = Regex.Replace(returnMessage, htmlClear, "");
}
catch (Exception)
{
}
}
catch (Exception)
{
// TODO: Timeouts?
//Console.WriteLine(ex.ToString());
//returnMessage = "Command Failed";
//Console.WriteLine("Command " + message + " has an invalid url.");
}
}
}
}
return returnMessage;
}
static void Main(string[] args) { // TODO: Add check for instance already running //login info string userID = ConfigurationManager.AppSettings["userID"]; string userPW = ConfigurationManager.AppSettings["userPW"]; string botName = ConfigurationManager.AppSettings["botName"]; List<SteamID> chatRooms = new List<SteamID>(); ulong chatSteamID; if (ulong.TryParse(ConfigurationManager.AppSettings["chatSteamID"], out chatSteamID)) { //List of Chats to join // TODO: multiple chatrooms chatRooms.Add(chatSteamID); } else { Console.WriteLine("Exit Code 10: Failed to Load SteamID"); Environment.Exit(10); } //Initiliaze Steam Client SteamClient steamClient = new SteamClient(); SteamUser steamUsr = steamClient.GetHandler<SteamUser>(); SteamFriends steamFrds = steamClient.GetHandler<SteamFriends>(); //Connect to Steam Network steamClient.Connect(); while (true) { // start listening CallbackMsg msg = steamClient.WaitForCallback(true); msg.Handle<SteamClient.ConnectedCallback>(callback => { if (callback.Result != EResult.OK) { Console.WriteLine("Exit Code 1: Failed to Connect to Steam Network - " + callback.Result.ToString()); Environment.Exit(1); // connect fail } else { Console.WriteLine("Connected to Steam Network"); steamUsr.LogOn(new SteamUser.LogOnDetails { Username = userID, Password = userPW, }); } }); msg.Handle<SteamUser.LoggedOnCallback>(callback => { if (callback.Result != EResult.OK) { Console.WriteLine("Exit Code 2: Logon Failure - " + callback.Result.ToString()); //Environment.Exit(2); // logon fail } else { Console.WriteLine("Logged into Steam Network"); // Join Chat // if you set PersonaState without setting PersonaName it goes to [unknown] and GetPersonaName doesn't work? //steamFrds.SetPersonaName(steamFrds.GetPersonaName()); steamFrds.SetPersonaName(botName); steamFrds.SetPersonaState(EPersonaState.Online); foreach (SteamID steamID in chatRooms) { steamFrds.JoinChat(steamID); } } }); msg.Handle<SteamFriends.ChatEnterCallback>(callback => { if (callback.EnterResponse != EChatRoomEnterResponse.Success) { Console.WriteLine("Exit Code 3: Failure to Enter Chat" + callback.EnterResponse.ToString()); //Environment.Exit(3); // join chat fail } else { Console.WriteLine("Joined Chat"); foreach (SteamID steamID in chatRooms) { steamFrds.SendChatRoomMessage(steamID, EChatEntryType.ChatMsg, "Now listening"); } } }); msg.Handle<SteamFriends.ChatMsgCallback>(callback => { // TODO: Handle this in BotCommandHandler.cs BotCommandHandler cmd = new BotCommandHandler(); foreach (SteamID steamID in chatRooms) { if (cmd.isCommand(callback.Message)) { steamFrds.SendChatRoomMessage(steamID, EChatEntryType.ChatMsg, "Acknowledged. Processing..."); string retMsg = cmd.CommandHandler(callback.Message); if (!string.IsNullOrEmpty(retMsg)) { steamFrds.SendChatRoomMessage(steamID, EChatEntryType.ChatMsg, cmd.CommandHandler(callback.Message)); } } } }); } }