-const fieldError = 100
-const fieldData = 101
-const fieldUserName = 102
-const fieldUserID = 103
-const fieldUserIconID = 104
-const fieldUserLogin = 105
-const fieldUserPassword = 106
-const fieldRefNum = 107
-const fieldTransferSize = 108
-const fieldChatOptions = 109
-const fieldUserAccess = 110
-
-// const fieldUserAlias = 111 TODO: implement
-const fieldUserFlags = 112
-const fieldOptions = 113
-const fieldChatID = 114
-const fieldChatSubject = 115
-const fieldWaitingCount = 116
-const fieldVersion = 160
-const fieldCommunityBannerID = 161
-const fieldServerName = 162
-const fieldFileNameWithInfo = 200
-const fieldFileName = 201
-const fieldFilePath = 202
-const fieldFileResumeData = 203
-const fieldFileTransferOptions = 204
-const fieldFileTypeString = 205
-const fieldFileCreatorString = 206
-const fieldFileSize = 207
-const fieldFileCreateDate = 208
-const fieldFileModifyDate = 209
-const fieldFileComment = 210
-const fieldFileNewName = 211
-const fieldFileNewPath = 212
-const fieldFileType = 213
-const fieldQuotingMsg = 214
-const fieldAutomaticResponse = 215
-const fieldFolderItemCount = 220
-const fieldUsernameWithInfo = 300
-const fieldNewsArtListData = 321
-const fieldNewsCatName = 322
-const fieldNewsCatListData15 = 323
-const fieldNewsPath = 325
-const fieldNewsArtID = 326
-const fieldNewsArtDataFlav = 327
-const fieldNewsArtTitle = 328
-const fieldNewsArtPoster = 329
-const fieldNewsArtDate = 330
-const fieldNewsArtPrevArt = 331
-const fieldNewsArtNextArt = 332
-const fieldNewsArtData = 333
-const fieldNewsArtFlags = 334
-const fieldNewsArtParentArt = 335
-const fieldNewsArt1stChildArt = 336
-const fieldNewsArtRecurseDel = 337
+// List of Hotline protocol field types taken from the official 1.9 protocol document
+var (
+ FieldError = [2]byte{0x00, 0x64} // 100
+ FieldData = [2]byte{0x00, 0x65} // 101
+ FieldUserName = [2]byte{0x00, 0x66} // 102
+ FieldUserID = [2]byte{0x00, 0x67} // 103
+ FieldUserIconID = [2]byte{0x00, 0x68} // 104
+ FieldUserLogin = [2]byte{0x00, 0x69} // 105
+ FieldUserPassword = [2]byte{0x00, 0x6A} // 106
+ FieldRefNum = [2]byte{0x00, 0x6B} // 107
+ FieldTransferSize = [2]byte{0x00, 0x6C} // 108
+ FieldChatOptions = [2]byte{0x00, 0x6D} // 109
+ FieldUserAccess = [2]byte{0x00, 0x6E} // 110
+ FieldUserFlags = [2]byte{0x00, 0x70} // 112
+ FieldOptions = [2]byte{0x00, 0x71} // 113
+ FieldChatID = [2]byte{0x00, 0x72} // 114
+ FieldChatSubject = [2]byte{0x00, 0x73} // 115
+ FieldWaitingCount = [2]byte{0x00, 0x74} // 116
+ FieldBannerType = [2]byte{0x00, 0x98} // 152
+ FieldNoServerAgreement = [2]byte{0x00, 0x98} // 152
+ FieldVersion = [2]byte{0x00, 0xA0} // 160
+ FieldCommunityBannerID = [2]byte{0x00, 0xA1} // 161
+ FieldServerName = [2]byte{0x00, 0xA2} // 162
+ FieldFileNameWithInfo = [2]byte{0x00, 0xC8} // 200
+ FieldFileName = [2]byte{0x00, 0xC9} // 201
+ FieldFilePath = [2]byte{0x00, 0xCA} // 202
+ FieldFileResumeData = [2]byte{0x00, 0xCB} // 203
+ FieldFileTransferOptions = [2]byte{0x00, 0xCC} // 204
+ FieldFileTypeString = [2]byte{0x00, 0xCD} // 205
+ FieldFileCreatorString = [2]byte{0x00, 0xCE} // 206
+ FieldFileSize = [2]byte{0x00, 0xCF} // 207
+ FieldFileCreateDate = [2]byte{0x00, 0xD0} // 208
+ FieldFileModifyDate = [2]byte{0x00, 0xD1} // 209
+ FieldFileComment = [2]byte{0x00, 0xD2} // 210
+ FieldFileNewName = [2]byte{0x00, 0xD3} // 211
+ FieldFileNewPath = [2]byte{0x00, 0xD4} // 212
+ FieldFileType = [2]byte{0x00, 0xD5} // 213
+ FieldQuotingMsg = [2]byte{0x00, 0xD6} // 214
+ FieldAutomaticResponse = [2]byte{0x00, 0xD7} // 215
+ FieldFolderItemCount = [2]byte{0x00, 0xDC} // 220
+ FieldUsernameWithInfo = [2]byte{0x01, 0x2C} // 300
+ FieldNewsArtListData = [2]byte{0x01, 0x41} // 321
+ FieldNewsCatName = [2]byte{0x01, 0x42} // 322
+ FieldNewsCatListData15 = [2]byte{0x01, 0x43} // 323
+ FieldNewsPath = [2]byte{0x01, 0x45} // 325
+ FieldNewsArtID = [2]byte{0x01, 0x46} // 326
+ FieldNewsArtDataFlav = [2]byte{0x01, 0x47} // 327
+ FieldNewsArtTitle = [2]byte{0x01, 0x48} // 328
+ FieldNewsArtPoster = [2]byte{0x01, 0x49} // 329
+ FieldNewsArtDate = [2]byte{0x01, 0x4A} // 330
+ FieldNewsArtPrevArt = [2]byte{0x01, 0x4B} // 331
+ FieldNewsArtNextArt = [2]byte{0x01, 0x4C} // 332
+ FieldNewsArtData = [2]byte{0x01, 0x4D} // 333
+ FieldNewsArtParentArt = [2]byte{0x01, 0x4F} // 335
+ FieldNewsArt1stChildArt = [2]byte{0x01, 0x50} // 336
+ FieldNewsArtRecurseDel = [2]byte{0x01, 0x51} // 337
+
+ // These fields are documented, but seemingly unused.
+ // FieldUserAlias = [2]byte{0x00, 0x6F} // 111
+ // FieldNewsArtFlags = [2]byte{0x01, 0x4E} // 334
+)