Added /me support for action messages on IRC

This commit is contained in:
Dionysus 2024-05-27 01:54:38 -04:00
parent c141a38e9c
commit e44d0ddeb6
Signed by: acidvegas
GPG Key ID: EF4B922DB85DC9DE

View File

@ -298,6 +298,19 @@ void displayLines() {
String modeChange = line.substring(5); String modeChange = line.substring(5);
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
tft.print(modeChange); tft.print(modeChange);
cursorY += CHAR_HEIGHT;
} else if (line.startsWith("* ")) { // Check for action message
int spacePos = line.indexOf(' ', 2);
String senderNick = line.substring(2, spacePos);
String actionMessage = line.substring(spacePos + 1);
tft.setTextColor(TFT_WHITE);
tft.print("* ");
tft.setTextColor(nickColors[senderNick]);
tft.print(senderNick + " ");
tft.setTextColor(TFT_WHITE);
tft.print(actionMessage);
cursorY += CHAR_HEIGHT; cursorY += CHAR_HEIGHT;
} else { } else {
int colonPos = line.indexOf(':'); int colonPos = line.indexOf(':');
@ -321,6 +334,7 @@ void displayLines() {
displayInputLine(); displayInputLine();
} }
void addLine(String senderNick, String message, String type, bool mention = false) { void addLine(String senderNick, String message, String type, bool mention = false) {
if (nickColors.find(senderNick) == nickColors.end()) if (nickColors.find(senderNick) == nickColors.end())
nickColors[senderNick] = generateRandomColor(); nickColors[senderNick] = generateRandomColor();
@ -344,6 +358,8 @@ void addLine(String senderNick, String message, String type, bool mention = fals
formattedMessage = "KICK " + senderNick + message; formattedMessage = "KICK " + senderNick + message;
} else if (type == "mode") { } else if (type == "mode") {
formattedMessage = "MODE " + message; formattedMessage = "MODE " + message;
} else if (type == "action") {
formattedMessage = "* " + senderNick + " " + message;
} else { } else {
formattedMessage = senderNick + ": " + message; formattedMessage = senderNick + ": " + message;
} }
@ -361,6 +377,7 @@ void addLine(String senderNick, String message, String type, bool mention = fals
displayLines(); displayLines();
} }
void displayDeviceInfo() { void displayDeviceInfo() {
tft.fillScreen(TFT_BLACK); tft.fillScreen(TFT_BLACK);
printDeviceInfo(); printDeviceInfo();
@ -510,8 +527,15 @@ void parseAndDisplay(String line) {
String message = line.substring(colonPos + 1); String message = line.substring(colonPos + 1);
String senderNick = line.substring(1, line.indexOf('!')); String senderNick = line.substring(1, line.indexOf('!'));
bool mention = message.indexOf(nick) != -1; bool mention = message.indexOf(nick) != -1;
// This doesn't work for some annoying reason... even with \001
if (message.startsWith("\x01ACTION ") && message.endsWith("\x01")) {
String actionMessage = message.substring(8, message.length() - 1);
addLine(senderNick, actionMessage, "action");
} else {
addLine(senderNick, message, "message", mention); addLine(senderNick, message, "message", mention);
} }
}
} else if (command == "JOIN" && line.indexOf(channel) != -1) { } else if (command == "JOIN" && line.indexOf(channel) != -1) {
String senderNick = line.substring(1, line.indexOf('!')); String senderNick = line.substring(1, line.indexOf('!'));
addLine(senderNick, " has joined " + String(channel), "join"); addLine(senderNick, " has joined " + String(channel), "join");
@ -538,6 +562,8 @@ void parseAndDisplay(String line) {
} }
} }
void handleKeyboardInput(char key) { void handleKeyboardInput(char key) {
if (key == '\n' || key == '\r') { // Enter if (key == '\n' || key == '\r') { // Enter
if (inputBuffer.startsWith("/debug")) { if (inputBuffer.startsWith("/debug")) {
@ -548,6 +574,11 @@ void handleKeyboardInput(char key) {
} else if (inputBuffer.startsWith("/raw ")) { } else if (inputBuffer.startsWith("/raw ")) {
String rawCommand = inputBuffer.substring(5); String rawCommand = inputBuffer.substring(5);
sendRawCommand(rawCommand); sendRawCommand(rawCommand);
} else if (inputBuffer.startsWith("/me ")) {
String actionMessage = inputBuffer.substring(4);
sendIRC("PRIVMSG " + String(channel) + " :\001ACTION " + actionMessage + "\001");
addLine(nick, actionMessage, "action");
inputBuffer = "";
} else { } else {
sendIRC("PRIVMSG " + String(channel) + " :" + inputBuffer); sendIRC("PRIVMSG " + String(channel) + " :" + inputBuffer);
addLine(nick, inputBuffer, "message"); addLine(nick, inputBuffer, "message");
@ -892,9 +923,7 @@ void printDeviceInfo() {
uint32_t chipId = ESP.getEfuseMac(); // Unique ID uint32_t chipId = ESP.getEfuseMac(); // Unique ID
esp_chip_info_t chip_info; esp_chip_info_t chip_info;
esp_chip_info(&chip_info); esp_chip_info(&chip_info);
String chipInfo = String(chip_info.model) + " Rev " + String(chip_info.revision) + String chipInfo = String(chip_info.model) + " Rev " + String(chip_info.revision) + ", " + String(chip_info.cores) + " cores, " + String(ESP.getCpuFreqMHz()) + " MHz";
", " + String(chip_info.cores) + " cores, " +
String(ESP.getCpuFreqMHz()) + " MHz";
// Get Flash Info // Get Flash Info
size_t flashSize = spi_flash_get_chip_size(); size_t flashSize = spi_flash_get_chip_size();