sharp-chat/SharpChat/Packet/LegacyCommandResponse.cs

109 lines
4.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SharpChat.Packet {
public class LegacyCommandResponse : ServerPacket {
public bool IsError { get; private set; }
public string StringId { get; private set; }
public IEnumerable<object> Arguments { get; private set; }
public LegacyCommandResponse(
string stringId,
bool isError = true,
params object[] args
) {
IsError = isError;
StringId = stringId;
Arguments = args;
}
public override IEnumerable<string> Pack() {
StringBuilder sb = new StringBuilder();
if (StringId == LCR.WELCOME) {
sb.Append((int)SockChatServerPacket.ContextPopulate);
sb.Append('\t');
sb.Append((int)SockChatServerContextPacket.Message);
sb.Append('\t');
sb.Append(DateTimeOffset.Now.ToUnixTimeSeconds());
sb.Append("\t-1\tChatBot\tinherit\t\t");
} else {
sb.Append((int)SockChatServerPacket.MessageAdd);
sb.Append('\t');
sb.Append(DateTimeOffset.Now.ToUnixTimeSeconds());
sb.Append("\t-1\t");
}
sb.Append(IsError ? '1' : '0');
sb.Append('\f');
sb.Append(StringId == LCR.WELCOME ? LCR.BROADCAST : StringId);
if (Arguments?.Any() == true)
foreach (object arg in Arguments) {
sb.Append('\f');
sb.Append(arg);
}
sb.Append('\t');
if (StringId == LCR.WELCOME) {
sb.Append(StringId);
sb.Append("\t0");
} else
sb.Append(SequenceId);
sb.Append("\t10010");
/*sb.AppendFormat(
"\t1{0}0{1}{2}",
Flags.HasFlag(ChatMessageFlags.Action) ? '1' : '0',
Flags.HasFlag(ChatMessageFlags.Action) ? '0' : '1',
Flags.HasFlag(ChatMessageFlags.Private) ? '1' : '0'
);*/
yield return sb.ToString();
}
}
// Abbreviated class name because otherwise shit gets wide
public static class LCR {
public const string GENERIC_ERROR = @"generr";
public const string COMMAND_NOT_FOUND = @"nocmd";
public const string COMMAND_NOT_ALLOWED = @"cmdna";
public const string COMMAND_FORMAT_ERROR = @"cmderr";
public const string WELCOME = @"welcome";
public const string BROADCAST = @"say";
public const string IP_ADDRESS = @"ipaddr";
public const string USER_NOT_FOUND = @"usernf";
public const string SILENCE_SELF = @"silself";
public const string SILENCE_HIERARCHY = @"silperr";
public const string SILENCE_ALREADY = @"silerr";
public const string TARGET_SILENCED = @"silok";
public const string SILENCED = @"silence";
public const string UNSILENCED = @"unsil";
public const string TARGET_UNSILENCED = @"usilok";
public const string NOT_SILENCED = @"usilerr";
public const string UNSILENCE_HIERARCHY = @"usilperr";
public const string NAME_IN_USE = @"nameinuse";
public const string CHANNEL_INSUFFICIENT_HIERARCHY = @"ipchan";
public const string CHANNEL_INVALID_PASSWORD = @"ipwchan";
public const string CHANNEL_NOT_FOUND = @"nochan";
public const string CHANNEL_ALREADY_EXISTS = @"nischan";
public const string CHANNEL_NAME_INVALID = "inchan";
public const string CHANNEL_CREATED = @"crchan";
public const string CHANNEL_DELETE_FAILED = @"ndchan";
public const string CHANNEL_DELETED = @"delchan";
public const string CHANNEL_PASSWORD_CHANGED = @"cpwdchan";
public const string CHANNEL_HIERARCHY_CHANGED = @"cprivchan";
public const string USERS_LISTING_ERROR = @"whoerr";
public const string USERS_LISTING_CHANNEL = @"whochan";
public const string USERS_LISTING_SERVER = @"who";
public const string INSUFFICIENT_HIERARCHY = @"rankerr";
public const string MESSAGE_DELETE_ERROR = @"delerr";
public const string KICK_NOT_ALLOWED = @"kickna";
public const string USER_NOT_BANNED = @"notban";
public const string USER_UNBANNED = @"unban";
}
}