mirror of
https://github.com/equant/apple2idiot.git
synced 2024-11-19 01:07:42 +00:00
Regression of ESP32 slack code due to memory corruption. Try again later. On to chess!
This commit is contained in:
parent
52b1e8dfc7
commit
d18f8a0cc1
@ -9,10 +9,31 @@
|
||||
// If the values of these defines are changed, then they will need to be
|
||||
// updated within the code that runs on the Apple as well.
|
||||
|
||||
//#define COMMAND_GENERIC 0b10000000
|
||||
#define COMMAND_WIFI_SCAN 111
|
||||
#define COMMAND_WIFI_CONNECT 112
|
||||
#define SHARED_RAM_START_ADDRESS 2
|
||||
|
||||
#define ACK 0b00000110 // Acknowledge
|
||||
#define EOT 0b00000100 // End of transmit
|
||||
#define ERR 0b00000101 // Error
|
||||
#define MORE_TO_SEND 0b00000111
|
||||
|
||||
/*################################################
|
||||
# GENERIC STATUSES #
|
||||
################################################*/
|
||||
#define NOT_FOUND 11
|
||||
|
||||
/*################################################
|
||||
# WIFI #
|
||||
################################################*/
|
||||
#define COMMAND_WIFI_SCAN 111
|
||||
#define COMMAND_WIFI_CONNECT 112
|
||||
|
||||
/*################################################
|
||||
# SLACK (50) #
|
||||
################################################*/
|
||||
#define COMMAND_GET_N_CHANNELS 50 // Return number of channels
|
||||
#define COMMAND_GET_CHANNEL_N 51 // Return info for channel identified by #n
|
||||
#define COMMAND_GET_CHANNEL_STR 52 // Return info for channel identified by string (id or name)
|
||||
#define COMMAND_SET_CHANNEL 53
|
||||
#define COMMAND_SEND_MESSAGE 54
|
||||
#define COMMAND_GET_MESSAGES 55
|
||||
|
||||
|
@ -16,11 +16,12 @@ ArduinoSlack::ArduinoSlack(Client &client, const char *bearerToken)
|
||||
|
||||
int ArduinoSlack::makeGetRequest(const char *command)
|
||||
{
|
||||
Serial.println("ArduinoSlack::makeGetRequest()");
|
||||
client->flush();
|
||||
client->setTimeout(SLACK_TIMEOUT);
|
||||
if (!client->connect(SLACK_HOST, portNumber))
|
||||
{
|
||||
SLACK_SERIAL_LN(F("Connection failed"));
|
||||
SLACK_SERIAL_LN(F(" Connection failed"));
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -56,7 +57,7 @@ int ArduinoSlack::makeGetRequest(const char *command)
|
||||
|
||||
if (client->println() == 0)
|
||||
{
|
||||
SLACK_SERIAL_LN(F("Failed to send request"));
|
||||
SLACK_SERIAL_LN(F(" Failed to send request"));
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -68,11 +69,12 @@ int ArduinoSlack::makeGetRequest(const char *command)
|
||||
|
||||
int ArduinoSlack::makePostRequest(const char *command, const char *body, const char *contentType)
|
||||
{
|
||||
Serial.println("ArduinoSlack::makePostRequest()");
|
||||
client->flush();
|
||||
client->setTimeout(SLACK_TIMEOUT);
|
||||
if (!client->connect(SLACK_HOST, portNumber))
|
||||
{
|
||||
SLACK_SERIAL_LN(F("Connection failed"));
|
||||
SLACK_SERIAL_LN(F(" Connection failed"));
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -134,10 +136,9 @@ bool ArduinoSlack::setPresence(const char *presence)
|
||||
DeserializationError error = deserializeJson(doc, *client);
|
||||
if (!error)
|
||||
{
|
||||
SLACK_DEBUG_SERIAL_LN(F("parsed Json Object: "));
|
||||
#ifdef SLACK_ENABLE_DEBUG
|
||||
serializeJson(doc, Serial);
|
||||
#endif
|
||||
//SLACK_DEBUG_SERIAL_LN(F("parsed Json Object: "));
|
||||
//serializeJson(doc, Serial);
|
||||
|
||||
okStatus = doc["ok"];
|
||||
if (!okStatus)
|
||||
{
|
||||
@ -165,108 +166,51 @@ bool ArduinoSlack::setPresence(const char *presence)
|
||||
|
||||
SlackUsersConversations ArduinoSlack::usersConversations()
|
||||
{
|
||||
//char body[300];
|
||||
//sprintf(body, setConvoHistoryBody, channel, limit);
|
||||
//SLACK_DEBUG_SERIAL_LN(body);
|
||||
|
||||
Serial.println("ArduinoSlack::usersConversations()");
|
||||
// Get from https://arduinojson.org/v6/assistant/
|
||||
const size_t bufferSize = profileBufferSize;
|
||||
|
||||
SlackUsersConversations conversations;
|
||||
// This flag will get cleared if all goes well
|
||||
conversations.error = true;
|
||||
//SLACK_SERIAL_LN("GET String:");
|
||||
//SLACK_SERIAL_LN(SLACK_CONVERSATIONS_HISTORY_ENDPOINT);
|
||||
//SLACK_SERIAL_LN(usersConversationsGET);
|
||||
//int response = makeGetRequest(SLACK_USERS_CONVERSATIONS_ENDPOINT);
|
||||
int response = makeGetRequest("/api/users.conversations?exclude_arc=True&limit=17");
|
||||
//if (makeGetRequest(SLACK_USERS_CONVERSATIONS_ENDPOINT) == 200)
|
||||
|
||||
int response = makeGetRequest("/api/users.conversations?exclude_arc=True&limit=5");
|
||||
|
||||
if (response == 200)
|
||||
{
|
||||
|
||||
// So it seems for whatever reason every other line is bad. I don't
|
||||
// know why this is, but this will remove them so they don't break
|
||||
// the Json...
|
||||
String chunk;
|
||||
String payload;
|
||||
int limit=1;
|
||||
do {
|
||||
if (client->connected()) {
|
||||
yield();
|
||||
chunk = client->readStringUntil('\n');
|
||||
//SLACK_DEBUG_SERIAL("CHUNK #");
|
||||
//SLACK_DEBUG_SERIAL(limit);
|
||||
//SLACK_DEBUG_SERIAL(": ");
|
||||
//SLACK_DEBUG_SERIAL_LN(chunk);
|
||||
if (limit % 2 == 0) {
|
||||
// skip even lines.
|
||||
} else {
|
||||
payload += chunk;
|
||||
}
|
||||
}
|
||||
} while (chunk.length() > 0 && ++limit < 100);
|
||||
//String payload = client->readString();
|
||||
//SLACK_DEBUG_SERIAL_LN("Payload!");
|
||||
//SLACK_DEBUG_SERIAL_LN(payload);
|
||||
//String payload = stripBadDataFromClientResponse();
|
||||
char payload[8000];
|
||||
stripBadDataFromClientResponse(payload);
|
||||
|
||||
// Allocate DynamicJsonDocument
|
||||
DynamicJsonDocument doc(bufferSize);
|
||||
|
||||
// Parse JSON object
|
||||
StaticJsonDocument<200> filter;
|
||||
filter["channels"][0]["name"] = true;
|
||||
filter["channels"][0]["id"] = true;
|
||||
filter["channels"][0]["name"] = true;
|
||||
filter["channels"][0]["id"] = true;
|
||||
filter["channels"][0]["is_channel"] = true;
|
||||
filter["channels"][0]["topic"]["value"] = true;
|
||||
filter["channels"][0]["purpose"]["value"] = true;
|
||||
filter["response_metadata"]["next_cursor"] = true;
|
||||
//StaticJsonDocument<400> doc;
|
||||
//DeserializationError error = deserializeJson(doc, *client, DeserializationOption::Filter(filter));
|
||||
DeserializationError error = deserializeJson(doc, payload, DeserializationOption::Filter(filter));
|
||||
if (!error)
|
||||
{
|
||||
SLACK_DEBUG_SERIAL_LN(F("parsed Json Object: "));
|
||||
#ifdef SLACK_ENABLE_DEBUG
|
||||
serializeJson(doc, Serial);
|
||||
#endif
|
||||
//SLACK_DEBUG_SERIAL_LN(F("parsed Json Object: "));
|
||||
//serializeJson(doc, Serial);
|
||||
|
||||
JsonObject channelsObj = doc["channels"];
|
||||
conversations.channelsObj = channelsObj;
|
||||
SLACK_DEBUG_SERIAL_LN(F(""));
|
||||
SLACK_DEBUG_SERIAL_LN(F("+++++++++++++++++++++++++++++++++"));
|
||||
SLACK_DEBUG_SERIAL_LN(doc["channels"].size());
|
||||
SLACK_DEBUG_SERIAL_LN(F(""));
|
||||
serializeJsonPretty(doc["channels"][0], Serial);
|
||||
SLACK_DEBUG_SERIAL_LN(F(""));
|
||||
serializeJsonPretty(doc["channels"][1], Serial);
|
||||
SLACK_DEBUG_SERIAL_LN(F(""));
|
||||
serializeJsonPretty(doc["channels"][doc["channels"].size()-1], Serial);
|
||||
SLACK_DEBUG_SERIAL_LN(F(""));
|
||||
SLACK_DEBUG_SERIAL_LN(F("+++++++++++++++++++++++++++++++++"));
|
||||
SLACK_DEBUG_SERIAL_LN(F(""));
|
||||
|
||||
//char (*a[2])[14]
|
||||
//String *channel_names[doc["channels"].size()];
|
||||
//String *channel_ids[doc["channels"].size()];
|
||||
//String channel_names[22];
|
||||
//String channel_ids[22];
|
||||
for (int ii=0; ii<doc["channels"].size(); ii++) {
|
||||
//channel_names[ii] = (char *)doc["channels"][ii]["name"].as<char *>();
|
||||
//channel_ids[ii] = (char *)doc["channels"][ii]["id"].as<char *>();
|
||||
//channel_names[ii] = doc["channels"][ii]["name"];
|
||||
//channel_ids[ii] = doc["channels"][ii]["id"];
|
||||
//conversations.channelNames[ii] = doc["channels"][ii]["name"];
|
||||
conversations.channelNames[ii] = (char *)doc["channels"][ii]["name"].as<char *>();
|
||||
for (int i=0; i<doc["channels"].size(); i++) {
|
||||
conversations.channelNames[i] = (char *)doc["channels"][i]["name"].as<char *>();
|
||||
conversations.channelIds[i] = (char *)doc["channels"][i]["id"].as<char *>();
|
||||
conversations.purpose[i] = (char *)doc["channels"][i]["purpose"]["value"].as<char *>();
|
||||
conversations.topic[i] = (char *)doc["channels"][i]["topic"]["value"].as<char *>();
|
||||
conversations.n_channels = doc["channels"].size();
|
||||
}
|
||||
|
||||
//conversations.channelNames = (char *)doc[0]["name"].as<char *>();
|
||||
//conversations.channelIds = (char *)doc[0]["id"].as<char *>();
|
||||
//channels.text = (char *)doc["text"].as<char *>();
|
||||
//channels.username = (char *)doc["username"].as<char *>();
|
||||
//channels.bot_id = (char *)doc["bot_id"].as<char *>();
|
||||
//channels.type = (char *)doc["type"].as<char *>();
|
||||
|
||||
//channels.channelNames = channel_names;
|
||||
//channels.channelIds = channel_ids;
|
||||
|
||||
|
||||
conversations.error = false;
|
||||
}
|
||||
else
|
||||
@ -283,11 +227,90 @@ SlackUsersConversations ArduinoSlack::usersConversations()
|
||||
}
|
||||
|
||||
|
||||
SlackMessage ArduinoSlack::postMessage(const char *channel, const char *text)
|
||||
{
|
||||
SlackMessages ArduinoSlack::channelHistory(char *channelId) {
|
||||
Serial.println("ArduinoSlack::channelHistory()");
|
||||
// Get from https://arduinojson.org/v6/assistant/
|
||||
const size_t bufferSize = profileBufferSize;
|
||||
|
||||
SlackMessages history;
|
||||
// This flag will get cleared if all goes well
|
||||
history.error = true;
|
||||
|
||||
char endpoint[100];
|
||||
sprintf(endpoint, getConvHistEndpointArgs, channelId, 20);
|
||||
Serial.print(" channelId:");
|
||||
Serial.println(channelId);
|
||||
Serial.print(" ENDPOINT: ");
|
||||
Serial.println(endpoint);
|
||||
|
||||
//int response = makeGetRequest("/api/conversations.history?channel="+channelId+"&limit=20");
|
||||
//int response = makeGetRequest("/api/conversations.history?channel=C02EAQECY5A&limit=20");
|
||||
//SLACK_DEBUG_SERIAL(F("GET: "));
|
||||
//SLACK_DEBUG_SERIAL_LN(F(endpoint));
|
||||
int response = makeGetRequest(endpoint);
|
||||
|
||||
if (response == 200)
|
||||
{
|
||||
//String payload = client->readString();
|
||||
//String payload = stripBadDataFromClientResponse();
|
||||
char payload[8000];
|
||||
stripBadDataFromClientResponse(payload);
|
||||
|
||||
// Allocate DynamicJsonDocument
|
||||
DynamicJsonDocument doc(bufferSize);
|
||||
|
||||
// Parse JSON object
|
||||
StaticJsonDocument<200> filter;
|
||||
filter["ok"] = true;
|
||||
filter["messages"][0]["text"] = true;
|
||||
filter["messages"][0]["user"] = true;
|
||||
filter["messages"][0]["reactions"][0]["name"] = true;
|
||||
filter["messages"][0]["reactions"][0]["users"] = true;
|
||||
filter["messages"][0]["reactions"][0]["count"] = true;
|
||||
filter["response_metadata"]["next_cursor"] = true;
|
||||
DeserializationError error = deserializeJson(doc, payload, DeserializationOption::Filter(filter));
|
||||
if (!error)
|
||||
{
|
||||
//SLACK_DEBUG_SERIAL_LN(F("parsed Json Object: "));
|
||||
//serializeJson(doc, Serial);
|
||||
|
||||
SLACK_DEBUG_SERIAL_LN(F(""));
|
||||
SLACK_DEBUG_SERIAL_LN(F("+++++++++++++++++++++++++++++++++"));
|
||||
//SLACK_DEBUG_SERIAL_LN(doc["channels"].size());
|
||||
serializeJsonPretty(doc["messages"][0], Serial);
|
||||
SLACK_DEBUG_SERIAL_LN(F(""));
|
||||
SLACK_DEBUG_SERIAL_LN(F("+++++++++++++++++++++++++++++++++"));
|
||||
SLACK_DEBUG_SERIAL_LN(F(""));
|
||||
|
||||
for (int i=0; i<doc["channels"].size(); i++) {
|
||||
history.messages[i].text = (char *)doc["messages"][i]["text"].as<char *>();
|
||||
//history.messages[i].userid = (char *)doc["messages"][i]["user"].as<char *>();
|
||||
//history.messages[i].username = "unknown";
|
||||
//history.messages[i].type = (char *)doc["messages"][i]["type"].as<char *>();
|
||||
//history.n_messages = doc["messages"].size();
|
||||
}
|
||||
|
||||
history.error = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
SLACK_DEBUG_SERIAL(F(" deserializeJson() failed with code "));
|
||||
SLACK_DEBUG_SERIAL_LN(error.c_str());
|
||||
}
|
||||
} else {
|
||||
SLACK_DEBUG_SERIAL_LN(F(" Didn't get 200"));
|
||||
SLACK_DEBUG_SERIAL_LN(response);
|
||||
}
|
||||
closeClient();
|
||||
return history;
|
||||
}
|
||||
|
||||
|
||||
SlackMessage ArduinoSlack::postMessage(const char *channel, const char *text) {
|
||||
Serial.println("ArduinoSlack::postMessage()");
|
||||
char body[300];
|
||||
sprintf(body, setMessageBody, channel, text);
|
||||
SLACK_DEBUG_SERIAL_LN(body);
|
||||
Serial.print(" "); Serial.println(body);
|
||||
|
||||
// Get from https://arduinojson.org/v6/assistant/
|
||||
const size_t bufferSize = profileBufferSize;
|
||||
@ -295,8 +318,9 @@ SlackMessage ArduinoSlack::postMessage(const char *channel, const char *text)
|
||||
SlackMessage message;
|
||||
// This flag will get cleared if all goes well
|
||||
message.error = true;
|
||||
if (makePostRequest(SLACK_POST_MESSAGE_ENDPOINT, body) == 200)
|
||||
{
|
||||
Serial.print(" B4 Post:"); Serial.println(channel);
|
||||
if (makePostRequest(SLACK_POST_MESSAGE_ENDPOINT, body) == 200) {
|
||||
Serial.print(" AR Post:"); Serial.println(channel);
|
||||
// Allocate DynamicJsonDocument
|
||||
DynamicJsonDocument doc(bufferSize);
|
||||
|
||||
@ -304,26 +328,24 @@ SlackMessage ArduinoSlack::postMessage(const char *channel, const char *text)
|
||||
DeserializationError error = deserializeJson(doc, *client);
|
||||
if (!error)
|
||||
{
|
||||
SLACK_DEBUG_SERIAL_LN(F("parsed Json Object: "));
|
||||
#ifdef SLACK_ENABLE_DEBUG
|
||||
serializeJson(doc, Serial);
|
||||
#endif
|
||||
JsonObject messageObj = doc["message"];
|
||||
|
||||
message.text = (char *)messageObj["text"].as<char *>();
|
||||
message.username = (char *)messageObj["username"].as<char *>();
|
||||
message.bot_id = (char *)messageObj["bot_id"].as<char *>();
|
||||
message.type = (char *)messageObj["type"].as<char *>();
|
||||
|
||||
//SLACK_DEBUG_SERIAL_LN(F("parsed Json Object: "));
|
||||
//serializeJson(doc, Serial);
|
||||
//JsonObject messageObj = doc["message"];
|
||||
//message.text = (char *)messageObj["text"].as<char *>();
|
||||
//message.username = (char *)messageObj["username"].as<char *>();
|
||||
//message.bot_id = (char *)messageObj["bot_id"].as<char *>();
|
||||
//message.type = (char *)messageObj["type"].as<char *>();
|
||||
message.error = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
SLACK_DEBUG_SERIAL(F("deserializeJson() failed with code "));
|
||||
SLACK_DEBUG_SERIAL(F(" deserializeJson() failed with code "));
|
||||
SLACK_DEBUG_SERIAL_LN(error.c_str());
|
||||
}
|
||||
}
|
||||
Serial.print(" BR closeClient:"); Serial.println(channel);
|
||||
closeClient();
|
||||
Serial.print(" AR closeClient:"); Serial.println(channel);
|
||||
return message;
|
||||
}
|
||||
|
||||
@ -349,10 +371,9 @@ SlackProfile ArduinoSlack::setCustomStatus(const char *text, const char *emoji,
|
||||
DeserializationError error = deserializeJson(doc, *client);
|
||||
if (!error)
|
||||
{
|
||||
SLACK_DEBUG_SERIAL_LN(F("parsed Json Object: "));
|
||||
#ifdef SLACK_ENABLE_DEBUG
|
||||
serializeJson(doc, Serial);
|
||||
#endif
|
||||
//SLACK_DEBUG_SERIAL_LN(F("parsed Json Object: "));
|
||||
//serializeJson(doc, Serial);
|
||||
|
||||
JsonObject profileObj = doc["profile"];
|
||||
|
||||
profile.displayName = (char *)profileObj["display_name"].as<char *>();
|
||||
@ -365,7 +386,7 @@ SlackProfile ArduinoSlack::setCustomStatus(const char *text, const char *emoji,
|
||||
}
|
||||
else
|
||||
{
|
||||
SLACK_DEBUG_SERIAL(F("deserializeJson() failed with code "));
|
||||
SLACK_DEBUG_SERIAL(F(" deserializeJson() failed with code "));
|
||||
SLACK_DEBUG_SERIAL_LN(error.c_str());
|
||||
}
|
||||
}
|
||||
@ -402,7 +423,7 @@ int ArduinoSlack::getHttpStatusCode()
|
||||
if (client->find("HTTP/1.1"))
|
||||
{
|
||||
int statusCode = client->parseInt();
|
||||
SLACK_DEBUG_SERIAL(F("Status Code: "));
|
||||
SLACK_DEBUG_SERIAL(F(" Status Code: "));
|
||||
SLACK_DEBUG_SERIAL_LN(statusCode);
|
||||
return statusCode;
|
||||
}
|
||||
@ -415,7 +436,42 @@ void ArduinoSlack::closeClient()
|
||||
if (client->connected())
|
||||
{
|
||||
|
||||
SLACK_DEBUG_SERIAL_LN(F("Closing client"));
|
||||
//SLACK_DEBUG_SERIAL_LN(F("Closing client"));
|
||||
client->stop();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void ArduinoSlack::stripBadDataFromClientResponse(char *payload) {
|
||||
// So it seems for whatever reason every other line is bad. I don't
|
||||
// know why this is, but this will remove them so they don't break
|
||||
// the Json...
|
||||
String chunk;
|
||||
int count=1;
|
||||
//SLACK_DEBUG_SERIAL_LN("PAYLOAD:");
|
||||
do {
|
||||
if (client->connected()) {
|
||||
yield();
|
||||
chunk = client->readStringUntil('\n');
|
||||
chunk.remove(-1,1); // Get rid of trailing \n which can often bork things.
|
||||
if (count % 2 == 0) {
|
||||
// skip even lines.
|
||||
//SLACK_DEBUG_SERIAL("SKIP Line #");
|
||||
//SLACK_DEBUG_SERIAL(limit);
|
||||
//SLACK_DEBUG_SERIAL(": ");
|
||||
//SLACK_DEBUG_SERIAL_LN(chunk);
|
||||
} else {
|
||||
//SLACK_DEBUG_SERIAL("KEEP Line #");
|
||||
//SLACK_DEBUG_SERIAL(limit);
|
||||
//SLACK_DEBUG_SERIAL(": ");
|
||||
//SLACK_DEBUG_SERIAL(chunk);
|
||||
//payload += chunk;
|
||||
strcat(payload, chunk.c_str());
|
||||
}
|
||||
}
|
||||
} while (chunk.length() > 0 && ++count < 100);
|
||||
SLACK_DEBUG_SERIAL_LN(payload);
|
||||
SLACK_DEBUG_SERIAL_LN("");
|
||||
//return payload;
|
||||
}
|
||||
|
@ -57,27 +57,45 @@ struct SlackProfile
|
||||
bool error;
|
||||
};
|
||||
|
||||
#define NUM_USERS_TO_SUPPORT 100
|
||||
|
||||
struct SlackUsers
|
||||
{
|
||||
char *id[NUM_USERS_TO_SUPPORT];
|
||||
char *name[NUM_USERS_TO_SUPPORT];
|
||||
};
|
||||
|
||||
struct SlackMessage
|
||||
{
|
||||
char *text;
|
||||
char *username;
|
||||
char *bot_id;
|
||||
char *userid;
|
||||
char *type;
|
||||
char *ts;
|
||||
bool error;
|
||||
//char *ts;
|
||||
//char *bot_id;
|
||||
};
|
||||
|
||||
struct SlackUsersConversations
|
||||
{
|
||||
struct SlackUsersConversations {
|
||||
JsonObject channelsObj;
|
||||
//String channelNames[22];
|
||||
//String channelIds[22];
|
||||
char *channelNames[17];
|
||||
char *channelIds[17];
|
||||
int n_channels;
|
||||
char *channelNames[22];
|
||||
char *channelIds[22];
|
||||
bool is_channel;
|
||||
char *purpose[200];
|
||||
char *topic[200];
|
||||
bool error;
|
||||
};
|
||||
|
||||
|
||||
struct SlackMessages {
|
||||
int n_messages;
|
||||
struct SlackMessage messages[30];
|
||||
bool error;
|
||||
};
|
||||
|
||||
class ArduinoSlack
|
||||
{
|
||||
public:
|
||||
@ -88,6 +106,7 @@ public:
|
||||
SlackProfile setCustomStatus(const char *text, const char *emoji, int expiration = 0);
|
||||
SlackMessage postMessage(const char *channel, const char *text);
|
||||
SlackUsersConversations usersConversations();
|
||||
SlackMessages channelHistory(char *channelId);
|
||||
bool setPresence(const char *presence);
|
||||
int portNumber = 443;
|
||||
int profileBufferSize = 10000;
|
||||
@ -98,9 +117,10 @@ private:
|
||||
int getHttpStatusCode();
|
||||
void skipHeaders(bool tossUnexpectedForJSON = true);
|
||||
void closeClient();
|
||||
void stripBadDataFromClientResponse(char *payload);
|
||||
|
||||
const char *usersConversationsGET =
|
||||
R"(%s?exclude_arc=True&limit=1)";
|
||||
const char *getConvHistEndpointArgs =
|
||||
R"(/api/conversations.history?channel=%s&limit=%i)";
|
||||
const char *setConvoHistoryBody =
|
||||
R"({"channel": "%s", "limit": "%s"})";
|
||||
const char *setMessageBody =
|
||||
|
@ -1,6 +1,25 @@
|
||||
# ESP32 Slack code for apple2idiot
|
||||
|
||||
```
|
||||
~/.arduino15/packages/esp32/hardware/esp32/1.0.6/tools/sdk/sdkconfig
|
||||
```
|
||||
|
||||
Set `CONFIG_SPIRAM_USE_MALLOC=y` to use SPI Ram for heap memory.
|
||||
|
||||
## Notes
|
||||
|
||||
Sun Sep 26 2021
|
||||
```
|
||||
Sketch uses 885078 bytes (67%) of program storage space. Maximum is 1310720 bytes.
|
||||
Global variables use 40784 bytes (12%) of dynamic memory, leaving 286896 bytes for local variables. Maximum is 327680 bytes.
|
||||
|
||||
Sketch uses 884910 bytes (67%) of program storage space. Maximum is 1310720 bytes.
|
||||
Global variables use 40784 bytes (12%) of dynamic memory, leaving 286896 bytes for local variables. Maximum is 327680 bytes.
|
||||
|
||||
Sketch uses 885222 bytes (67%) of program storage space. Maximum is 1310720 bytes.
|
||||
Global variables use 40784 bytes (12%) of dynamic memory, leaving 286896 bytes for local variables. Maximum is 327680 bytes.
|
||||
|
||||
Sketch uses 883538 bytes (67%) of program storage space. Maximum is 1310720 bytes.
|
||||
Global variables use 40784 bytes (12%) of dynamic memory, leaving 286896 bytes for local variables. Maximum is 327680 bytes.
|
||||
|
||||
```
|
||||
|
7
examples/slack/bad_data/bad.json
Normal file
7
examples/slack/bad_data/bad.json
Normal file
@ -0,0 +1,7 @@
|
||||
{"ok":true,"channels":[{"id":"C1J89GVL4","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1466354298,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"U1J75A8PM","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"Be excellent to each other. :the_horns:","creator":"U1J75A8PM","last_set":1599072909},"purpose":{"value":"This channel is for team-wide communication and announcements. All team members are in this channel.","creator":"","last_set":0},"previous_names":[]},{"id":"CA77AFDL4","name":"swapmeet","is_channel":true,"is_group":false,"is_im":false,"created":1523884293,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"swapmeet","is_shared":false,"parent_conversation":null,"creator":"U1J75A8PM","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":fals
|
||||
e,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"Please keep sales, trades, biz talk here. Thanks!","creator":"U1J75A8PM","last_set":1523884293},"previous_names":[]},{"id":"CA79CS7V3","name":"kansasfest","is_channel":true,"is_group":false,"is_im":false,"created":1523832275,"is_archived":false,"is_general":false,"unlinked":0,"name_normal
|
||||
ized":"kansasfest","is_shared":false,"parent_conversation":null,"creator":"U1J75A8PM","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"KansasFest 2021 (Online only) - July 23-24, 2021 - <https:\/\/www.kansasfest.org\/>","creator":"U1TS7D80Y","last_set":1624817840},"purpose":{"value":"KansasFest 2018!!!","creator":"U1J75A8PM","last_set":1523832275},"previous_names":[]},{"id":"CA7DAGTJ8","name":"hardwarehackers","is_channel":true,"is_group":false,"is_im":false,"created":1523900178,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"hardwarehackers","is_shared":false,"parent_conversation":null,"creator":"U1J75A8PM","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"Trying to plug it in? Building something? Got a question? *POW* Bring it in here!","creator":"U1TKU4H52","last_set":1567374624},"purpose":{"value":"Trying to plug it in? Building something? Got a question? *POW* Bring it in here!","creator":"U1J75A8PM","last_set":1523900179},"previous_names":[]},{"id":"CA8AT5886","name":"coding","is_channel":true,"is_group":false,"is_im":false,"created":1523883870,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"coding","is_shared":false,"parent_conversation":null,"creator":"U1J75A8PM","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"U1J75A8PM","last_set":1525527970},"purpose":{"value":"Programming, code golf, experiments, questions on coding, all languages.","creator":"U1J75A8PM","last_set":1587554014},"previous_names":["democoders"]},{"id":"CA8LXU4BV","name":"raspberry-ii","is_channel":true,"is_group":false,"is_im":false,"created":1524041980,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"raspberry-ii","is_shared":false,"parent_conversation":null,"creator":"U1TMNSKMX","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"Fun ways to use a Raspberry Pi with your Apple II (Raspple II, Apple 2 Pi, etc)","creator":"U1TMNSKMX","last_set":1524439726},"previous_names":[]},{"id":"CABARQ39S","name":"show-and-tell","is_channel":true,"is_group":false,"is_im":false,"created":1524499762,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"show-and-tell","is_shared":false,"parent_conversation":null,"creator":"UA8HABGKG","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"Show off your goods!","creator":"UA8HABGKG","last_set":1524499762},"previous_names":[]},{"id":"CABEM8JFK","name":"emulators","is_channel":true,"is_group":false,"is_im":false,"crea
|
||||
ted":1524560064,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"emulators","is_shared":false,"parent_conversation":null,"creator":"U1TJZNH1B","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"Apple II Emulation","creator":"U1TJZNH1B","last_set":1524560069},"previous_names":[]},{"id":"CB52YS4UR","name":"applehistory","is_channel":true,"is_group":false,"is_im":false,"created":1528749885,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"applehistory","is_shared":false,"parent_conversation":null,"creator":"U1TK8V99Q","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"","creator":"","last_set":0},"previous_names":[]},{"id":"CPS2TG28L","name":"appleii","is_channel":true,"is_group":false,"is_im":false,"created":1571964280,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"appleii","is_shared":false,"parent_conversation":null,"creator":"UNGDL366N","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"Everything Apple II","creator":"UNGD
|
||||
L366N","last_set":1571964280},"previous_names":[]},{"id":"CPUNLH9ML","name":"fix_or_repair","is_channel":true,"is_group":false,"is_im":false,"created":1571964217,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"fix_or_repair","is_shared":false,"parent_conversation":null,"creator":"UNGDL366N","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"Channel for fixing vintage Apple Computers.","creator":"UNGDL366N","last_set":1571964217},"previous_names":[]},{"id":"CQF1PHTFY","name":"joeylib","is_channel":true,"is_group":false,"is_im":false,"created":1573419513,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"joeylib","is_shared":false,"parent_conversation":null,"creator":"UCLBUA2JU","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"Cross-platform game development library and IDE. <https:\/\/joeylib.com>","creator":"UCLBUA2J
|
||||
U","last_set":1630633667},"purpose":{"value":"To Rule the World.","creator":"UCLBUA2JU","last_set":1596836336},"previous_names":[]},{"id":"C019N82J96Z","name":"prodos","is_channel":true,"is_group":false,"is_im":false,"created":1598719399,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"prodos","is_shared":false,"parent_conversation":null,"creator":"UA8FVE12T","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"ProDOS 8 use\/dev","creator":"UA8FVE12T","last_set":1598719400},"previous_names":[]},{"id":"C01J91LFSQ3","name":"romx","is_channel":true,"is_group":false,"is_im":false,"created":1610079702,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"romx","is_shared":false,"parent_conversation":null,"creator":"U01HJQK9TU3","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"ROMX rom replacement boards (<http:\/\/www.theRomExchange.com|www.theRomExchange.com>)","creator":"U01HJQK9TU3","last_set":1610079703},"previous_names":[]},{"id":"C01NHA835NF","name":"classicmac","is_channel":true,"is_group":false,"is_im":false,"created":1613625903,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"classicmac","is_shared":false,"parent_conversation":null,"creator":"U1TJZNH1B","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"For Classic (Pre-Intel) Mac Discussion","creator":"U1TJZNH1B","
|
||||
last_set":1613625904},"previous_names":[]},{"id":"C02B4PJ223X","name":"applecorn","is_channel":true,"is_group":false,"is_im":false,"created":1628990910,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"applecorn","is_shared":false,"parent_conversation":null,"creator":"UNE040UAK","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"<https:\/\/github.com\/bobbimanners\/Applecorn>","creator":"UNE040UAK","last_set":1628991004},"purpose":{"value":"Applecorn - run BBC Micro language ROMs on \/\/e Enhanced","creator":"UNE040UAK","last_set":1628990910},"previous_names":[]},{"id":"C02EAQECY5A","name":"equant-test","is_channel":true,"is_group":false,"is_im":false,"created":1631378860,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"equant-test","is_shared":false,"parent_conversation":null,"creator":"U025NNCFL3G","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"All you base are belong to us","creator":"U025NNCFL3G","last_set":1632633537},"purpose":{"value":"A test channel for developing a Slack app to run on the Apple2Idiot card.","creator":"U025NNCFL3G","last_set":1631378861},"previous_names":[]}],"response_metadata":{"next_cursor":""}}
|
48
examples/slack/bad_data/bad_json.raw
Normal file
48
examples/slack/bad_data/bad_json.raw
Normal file
@ -0,0 +1,48 @@
|
||||
CHUNK #1: {"ok":true,"channels":[{"id":"C1J89GVL4","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1466354298,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"U1J75A8PM","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"Be excellent to each other. :the_horns:","creator":"U1J75A8PM","last_set":1599072909},"purpose":{"value":"This channel is for team-wide communication and announcements. All team members are in this channel.","creator":"","last_set":0},"previous_names":[]},{"id":"CA77AFDL4","name":"swapmeet","is_channel":true,"is_group":false,"is_im":false,"created":1523884293,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"swapmeet","is_shared":false,"parent_conversation":null,"creator":"U1J75A8PM","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":fals
|
||||
|
||||
|
||||
CHUNK #2: 177
|
||||
|
||||
|
||||
CHUNK #3: e,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"Please keep sales, trades, biz talk here. Thanks!","creator":"U1J75A8PM","last_set":1523884293},"previous_names":[]},{"id":"CA79CS7V3","name":"kansasfest","is_channel":true,"is_group":false,"is_im":false,"created":1523832275,"is_archived":false,"is_general":false,"unlinked":0,"name_normal
|
||||
|
||||
|
||||
CHUNK #4: D21
|
||||
|
||||
|
||||
CHUNK #5: ized":"kansasfest","is_shared":false,"parent_conversation":null,"creator":"U1J75A8PM","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"KansasFest 2021 (Online only) - July 23-24, 2021 - <https:\/\/www.kansasfest.org\/>","creator":"U1TS7D80Y","last_set":1624817840},"purpose":{"value":"KansasFest 2018!!!","creator":"U1J75A8PM","last_set":1523832275},"previous_names":[]},{"id":"CA7DAGTJ8","name":"hardwarehackers","is_channel":true,"is_group":false,"is_im":false,"created":1523900178,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"hardwarehackers","is_shared":false,"parent_conversation":null,"creator":"U1J75A8PM","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"Trying to plug it in? Building something? Got a question? *POW* Bring it in here!","creator":"U1TKU4H52","last_set":1567374624},"purpose":{"value":"Trying to plug it in? Building something? Got a question? *POW* Bring it in here!","creator":"U1J75A8PM","last_set":1523900179},"previous_names":[]},{"id":"CA8AT5886","name":"coding","is_channel":true,"is_group":false,"is_im":false,"created":1523883870,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"coding","is_shared":false,"parent_conversation":null,"creator":"U1J75A8PM","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"U1J75A8PM","last_set":1525527970},"purpose":{"value":"Programming, code golf, experiments, questions on coding, all languages.","creator":"U1J75A8PM","last_set":1587554014},"previous_names":["democoders"]},{"id":"CA8LXU4BV","name":"raspberry-ii","is_channel":true,"is_group":false,"is_im":false,"created":1524041980,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"raspberry-ii","is_shared":false,"parent_conversation":null,"creator":"U1TMNSKMX","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"Fun ways to use a Raspberry Pi with your Apple II (Raspple II, Apple 2 Pi, etc)","creator":"U1TMNSKMX","last_set":1524439726},"previous_names":[]},{"id":"CABARQ39S","name":"show-and-tell","is_channel":true,"is_group":false,"is_im":false,"created":1524499762,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"show-and-tell","is_shared":false,"parent_conversation":null,"creator":"UA8HABGKG","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"Show off your goods!","creator":"UA8HABGKG","last_set":1524499762},"previous_names":[]},{"id":"CABEM8JFK","name":"emulators","is_channel":true,"is_group":false,"is_im":false,"crea
|
||||
|
||||
|
||||
CHUNK #6: 65F
|
||||
|
||||
|
||||
CHUNK #7: ted":1524560064,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"emulators","is_shared":false,"parent_conversation":null,"creator":"U1TJZNH1B","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"Apple II Emulation","creator":"U1TJZNH1B","last_set":1524560069},"previous_names":[]},{"id":"CB52YS4UR","name":"applehistory","is_channel":true,"is_group":false,"is_im":false,"created":1528749885,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"applehistory","is_shared":false,"parent_conversation":null,"creator":"U1TK8V99Q","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"","creator":"","last_set":0},"previous_names":[]},{"id":"CPS2TG28L","name":"appleii","is_channel":true,"is_group":false,"is_im":false,"created":1571964280,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"appleii","is_shared":false,"parent_conversation":null,"creator":"UNGDL366N","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"Everything Apple II","creator":"UNGD
|
||||
|
||||
|
||||
CHUNK #8: 4DB
|
||||
|
||||
|
||||
CHUNK #9: L366N","last_set":1571964280},"previous_names":[]},{"id":"CPUNLH9ML","name":"fix_or_repair","is_channel":true,"is_group":false,"is_im":false,"created":1571964217,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"fix_or_repair","is_shared":false,"parent_conversation":null,"creator":"UNGDL366N","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"Channel for fixing vintage Apple Computers.","creator":"UNGDL366N","last_set":1571964217},"previous_names":[]},{"id":"CQF1PHTFY","name":"joeylib","is_channel":true,"is_group":false,"is_im":false,"created":1573419513,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"joeylib","is_shared":false,"parent_conversation":null,"creator":"UCLBUA2JU","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"Cross-platform game development library and IDE. <https:\/\/joeylib.com>","creator":"UCLBUA2J
|
||||
|
||||
|
||||
CHUNK #10: 7BA
|
||||
|
||||
|
||||
CHUNK #11: U","last_set":1630633667},"purpose":{"value":"To Rule the World.","creator":"UCLBUA2JU","last_set":1596836336},"previous_names":[]},{"id":"C019N82J96Z","name":"prodos","is_channel":true,"is_group":false,"is_im":false,"created":1598719399,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"prodos","is_shared":false,"parent_conversation":null,"creator":"UA8FVE12T","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"ProDOS 8 use\/dev","creator":"UA8FVE12T","last_set":1598719400},"previous_names":[]},{"id":"C01J91LFSQ3","name":"romx","is_channel":true,"is_group":false,"is_im":false,"created":1610079702,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"romx","is_shared":false,"parent_conversation":null,"creator":"U01HJQK9TU3","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"ROMX rom replacement boards (<http:\/\/www.theRomExchange.com|www.theRomExchange.com>)","creator":"U01HJQK9TU3","last_set":1610079703},"previous_names":[]},{"id":"C01NHA835NF","name":"classicmac","is_channel":true,"is_group":false,"is_im":false,"created":1613625903,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"classicmac","is_shared":false,"parent_conversation":null,"creator":"U1TJZNH1B","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"For Classic (Pre-Intel) Mac Discussion","creator":"U1TJZNH1B","
|
||||
|
||||
|
||||
CHUNK #12: 5E3
|
||||
|
||||
|
||||
CHUNK #13: last_set":1613625904},"previous_names":[]},{"id":"C02B4PJ223X","name":"applecorn","is_channel":true,"is_group":false,"is_im":false,"created":1628990910,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"applecorn","is_shared":false,"parent_conversation":null,"creator":"UNE040UAK","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"<https:\/\/github.com\/bobbimanners\/Applecorn>","creator":"UNE040UAK","last_set":1628991004},"purpose":{"value":"Applecorn - run BBC Micro language ROMs on \/\/e Enhanced","creator":"UNE040UAK","last_set":1628990910},"previous_names":[]},{"id":"C02EAQECY5A","name":"equant-test","is_channel":true,"is_group":false,"is_im":false,"created":1631378860,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"equant-test","is_shared":false,"parent_conversation":null,"creator":"U025NNCFL3G","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"All you base are belong to us","creator":"U025NNCFL3G","last_set":1632633537},"purpose":{"value":"A test channel for developing a Slack app to run on the Apple2Idiot card.","creator":"U025NNCFL3G","last_set":1631378861},"previous_names":[]}],"response_metadata":{"next_cursor":""}}
|
||||
|
||||
|
||||
CHUNK #14: 0
|
||||
|
||||
|
||||
CHUNK #15:
|
||||
|
||||
|
||||
CHUNK #16:
|
||||
|
||||
deserializeJson() failed with code InvalidInput
|
12
examples/slack/bad_data/foo.foo
Normal file
12
examples/slack/bad_data/foo.foo
Normal file
File diff suppressed because one or more lines are too long
5
examples/slack/bad_data/good.json
Normal file
5
examples/slack/bad_data/good.json
Normal file
@ -0,0 +1,5 @@
|
||||
{"ok":true,"channels":[{"id":"C1J89GVL4","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1466354298,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"U1J75A8PM","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"Be excellent to each other. :the_horns:","creator":"U1J75A8PM","last_set":1599072909},"purpose":{"value":"This channel is for team-wide communication and announcements. All team members are in this channel.","creator":"","last_set":0},"previous_names":[]},{"id":"CA77AFDL4","name":"swapmeet","is_channel":true,"is_group":false,"is_im":false,"created":1523884293,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"swapmeet","is_shared":false,"parent_conversation":null,"creator":"U1J75A8PM","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_priva
|
||||
te":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"Please keep sales, trades, biz talk here. Thanks!","creator":"U1J75A8PM","last_set":1523884293},"previous_names":[]},{"id":"CA79CS7V3","name":"kansasfest","is_channel":true,"is_group":false,"is_im":false,"created":1523832275,"is_archived":false,"is_general":false,"unlinked":0,"name_normal
|
||||
ized":"kansasfest","is_shared":false,"parent_conversation":null,"creator":"U1J75A8PM","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"KansasFest 2021 (Online only) - July 23-24, 2021 - <https:\/\/www.kansasfest.org\/>","creator":"U1TS7D80Y","last_set":1624817840},"purpose":{"value":"KansasFest 2018!!!","creator":"U1J75A8PM","last_set":1523832275},"previous_names":[]},{"id":"CA7DAGTJ8","name":"hardwarehackers","is_channel":true,"is_group":false,"is_im":false,"created":1523900178,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"hardwarehackers","is_shared":false,"parent_conversation":null,"creator":"U1J75A8PM","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"Trying to plug it in? Building something? Got a question? *POW* Bring it in here!","creator":"U1TKU4H52","last_set":1567374624},"purpose":{"value":"Trying to plug it in? Building something? Got a question? *POW* Bring it in here!","creator":"U1J75A8PM","last_set":1523900179},"previous_names":[]},{"id":"CA8AT5886","name":"coding","is_channel":true,"is_group":false,"is_im":false,"created":1523883870,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"coding","is_shared":false,"parent_conversation":null,"creator":"U1J75A8PM","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"U1J75A8PM","last_set":1525527970},"purpose":{"value":"Programming, code golf, experiments, questions on coding, all languages.","creator":"U1J75A8PM","last_set":1587554014},"previous_names":["democoders"]},{"id":"CA8LXU4BV","name":"raspberry-ii","is_channel":true,"is_group":false,"is_im":false,"created":1524041980,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"raspberry-ii","is_shared":false,"parent_conversation":null,"creator":"U1TMNSKMX","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"Fun ways to use a Raspberry Pi with your Apple II (Raspple II, Apple 2 Pi, etc)","creator":"U1TMNSKMX","last_set":1524439726},"previous_names":[]},{"id":"CABARQ39S","name":"show-and-tell","is_channel":true,"is_group":false,"is_im":false,"created":1524499762,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"show-and-tell","is_shared":false,"parent_conversation":null,"creator":"UA8HABGKG","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"Show off your goods!","creator":"UA8HABGKG","last_set":1524499762},"previous_names":[]},{"id":"CABEM8JFK","name":"emulators","is_channel":true,"is_group":false,"is_im":false,"created":1524560064,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"emulators","is_shared":false,"parent_conversation":null,"creator":"U1TJZNH1B","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"Apple II Emulation","creator":"U1TJZNH1B","last_set":1524560069},"previous_names":[]},{"id":"CB52YS4UR","name":"applehistory","is_channel":true,"is_group":false,"is_im":false,"created":1528749885,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"applehistory","is_shared":false,"parent_conversation":null,"creator":"U1TK8V99Q","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"","creator":"","last_set":0},"previous_names":[]},{"id":"CPS2TG28L","name":"appleii","is_channel":true,"is_group":false,"is_im":false,"created":1571964280,"is_archived":false,"is_general":false,"unlinked":0,
|
||||
"name_normalized":"appleii","is_shared":false,"parent_conversation":null,"creator":"UNGDL366N","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"Everything Apple II","creator":"UNGDL366N","last_set":1571964280},"previous_names":[]},{"id":"CPUNLH9ML","name":"fix_or_repair","is_channel":true,"is_group":false,"is_im":false,"created":1571964217,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"fix_or_repair","is_shared":false,"parent_conversation":null,"creator":"UNGDL366N","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"Channel for fixing vintage Apple Computers.","creator":"UNGDL366N","last_set":1571964217},"previous_names":[]},{"id":"CQF1PHTFY","name":"joeylib","is_channel":true,"is_group":false,"is_im":false,"created":1573419513,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"joeylib","is_shared":false,"parent_conversation":null,"creator":"UCLBUA2JU","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"Cross-platform game development library and IDE. <https:\/\/joeylib.com>","creator":"UCLBUA2JU","last_set":1630633667},"purpose":{"value":"To Rule the World.","creator":"UCLBUA2JU","last_set":1596836336},"previous_names":[]},{"id":"C019N82J96Z","name":"prodos","is_channel":true,"is_group":false,"is_im":false,"created":1598719399,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"prodos","is_shared":false,"parent_conversation":null,"creator":"UA8FVE12T","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"ProDOS 8 use\/dev","creator":"UA8FVE12T","last_set":1598719400},"previous_names":[]},{"id":"C01J91LFSQ3","name":"romx","is_channel":true,"is_group":false,"is_im":false,"created":1610079702,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"romx","is_shared":false,"parent_conversation":null,"creator":"U01HJQK9TU3","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"ROMX rom replacement boards (<http:\/\/www.theRomExchange.com|www.theRomExchange.com>)","creator":"U01HJQK9TU3","last_set":1610079703},"previous_names":[]},{"id":"C01NHA835NF","name":"classicmac","is_channel":true,"is_group":false,"is_im":false,"created":1613625903,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"classicmac","is_shared":false,"parent_conversation":null,"creator":"U1TJZNH1B","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"For Classic (Pre-Intel) Mac Discussion","creator":"U1TJZNH1B","last_set":1613625904},"previous_names":[]},{"id":"C02B4PJ223X","name":"applecorn","is_channel":true,"is_group":false,"is_im":false,"created":1628990910,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"applecorn","is_shared":false,"parent_conversation":null,"creator":"UNE040UAK","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"<https:\/\/github.com\/bobbimanners\/Applecorn>","creator":"UNE040UAK","last_set":1628991004},"purpose":{"value":"Applecorn - run BBC Micro language ROMs on \/\/e Enhanced","creator":"UNE040UAK","last_set":1628990910},"previous_names":[]},{"id":"C02EAQECY5A","name":"equant-test","is_channel":true,"is_group":false,"is_im":false,"created":1631378860,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"equant-test","is_shared":false,"parent_conversation":null,"creator":"U025NNCFL3G","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"All you base are belon
|
||||
g to us","creator":"U025NNCFL3G","last_set":1632633537},"purpose":{"value":"A test channel for developing a Slack app to run on the Apple2Idiot card.","creator":"U025NNCFL3G","last_set":1631378861},"previous_names":[]}],"response_metadata":{"next_cursor":""}}
|
34
examples/slack/bad_data/good_json.raw
Normal file
34
examples/slack/bad_data/good_json.raw
Normal file
@ -0,0 +1,34 @@
|
||||
CHUNK #1: {"ok":true,"channels":[{"id":"C1J89GVL4","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1466354298,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"U1J75A8PM","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"Be excellent to each other. :the_horns:","creator":"U1J75A8PM","last_set":1599072909},"purpose":{"value":"This channel is for team-wide communication and announcements. All team members are in this channel.","creator":"","last_set":0},"previous_names":[]},{"id":"CA77AFDL4","name":"swapmeet","is_channel":true,"is_group":false,"is_im":false,"created":1523884293,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"swapmeet","is_shared":false,"parent_conversation":null,"creator":"U1J75A8PM","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_priva
|
||||
|
||||
|
||||
CHUNK #2: 17F
|
||||
|
||||
|
||||
CHUNK #3: te":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"Please keep sales, trades, biz talk here. Thanks!","creator":"U1J75A8PM","last_set":1523884293},"previous_names":[]},{"id":"CA79CS7V3","name":"kansasfest","is_channel":true,"is_group":false,"is_im":false,"created":1523832275,"is_archived":false,"is_general":false,"unlinked":0,"name_normal
|
||||
|
||||
|
||||
CHUNK #4: 11F9
|
||||
|
||||
|
||||
CHUNK #5: ized":"kansasfest","is_shared":false,"parent_conversation":null,"creator":"U1J75A8PM","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"KansasFest 2021 (Online only) - July 23-24, 2021 - <https:\/\/www.kansasfest.org\/>","creator":"U1TS7D80Y","last_set":1624817840},"purpose":{"value":"KansasFest 2018!!!","creator":"U1J75A8PM","last_set":1523832275},"previous_names":[]},{"id":"CA7DAGTJ8","name":"hardwarehackers","is_channel":true,"is_group":false,"is_im":false,"created":1523900178,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"hardwarehackers","is_shared":false,"parent_conversation":null,"creator":"U1J75A8PM","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"Trying to plug it in? Building something? Got a question? *POW* Bring it in here!","creator":"U1TKU4H52","last_set":1567374624},"purpose":{"value":"Trying to plug it in? Building something? Got a question? *POW* Bring it in here!","creator":"U1J75A8PM","last_set":1523900179},"previous_names":[]},{"id":"CA8AT5886","name":"coding","is_channel":true,"is_group":false,"is_im":false,"created":1523883870,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"coding","is_shared":false,"parent_conversation":null,"creator":"U1J75A8PM","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"U1J75A8PM","last_set":1525527970},"purpose":{"value":"Programming, code golf, experiments, questions on coding, all languages.","creator":"U1J75A8PM","last_set":1587554014},"previous_names":["democoders"]},{"id":"CA8LXU4BV","name":"raspberry-ii","is_channel":true,"is_group":false,"is_im":false,"created":1524041980,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"raspberry-ii","is_shared":false,"parent_conversation":null,"creator":"U1TMNSKMX","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"Fun ways to use a Raspberry Pi with your Apple II (Raspple II, Apple 2 Pi, etc)","creator":"U1TMNSKMX","last_set":1524439726},"previous_names":[]},{"id":"CABARQ39S","name":"show-and-tell","is_channel":true,"is_group":false,"is_im":false,"created":1524499762,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"show-and-tell","is_shared":false,"parent_conversation":null,"creator":"UA8HABGKG","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"Show off your goods!","creator":"UA8HABGKG","last_set":1524499762},"previous_names":[]},{"id":"CABEM8JFK","name":"emulators","is_channel":true,"is_group":false,"is_im":false,"created":1524560064,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"emulators","is_shared":false,"parent_conversation":null,"creator":"U1TJZNH1B","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"Apple II Emulation","creator":"U1TJZNH1B","last_set":1524560069},"previous_names":[]},{"id":"CB52YS4UR","name":"applehistory","is_channel":true,"is_group":false,"is_im":false,"created":1528749885,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"applehistory","is_shared":false,"parent_conversation":null,"creator":"U1TK8V99Q","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"","creator":"","last_set":0},"previous_names":[]},{"id":"CPS2TG28L","name":"appleii","is_channel":true,"is_group":false,"is_im":false,"created":1571964280,"is_archived":false,"is_general":false,"unlinked":0,
|
||||
|
||||
|
||||
CHUNK #6: 12FC
|
||||
|
||||
|
||||
CHUNK #7: "name_normalized":"appleii","is_shared":false,"parent_conversation":null,"creator":"UNGDL366N","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"Everything Apple II","creator":"UNGDL366N","last_set":1571964280},"previous_names":[]},{"id":"CPUNLH9ML","name":"fix_or_repair","is_channel":true,"is_group":false,"is_im":false,"created":1571964217,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"fix_or_repair","is_shared":false,"parent_conversation":null,"creator":"UNGDL366N","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"Channel for fixing vintage Apple Computers.","creator":"UNGDL366N","last_set":1571964217},"previous_names":[]},{"id":"CQF1PHTFY","name":"joeylib","is_channel":true,"is_group":false,"is_im":false,"created":1573419513,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"joeylib","is_shared":false,"parent_conversation":null,"creator":"UCLBUA2JU","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"Cross-platform game development library and IDE. <https:\/\/joeylib.com>","creator":"UCLBUA2JU","last_set":1630633667},"purpose":{"value":"To Rule the World.","creator":"UCLBUA2JU","last_set":1596836336},"previous_names":[]},{"id":"C019N82J96Z","name":"prodos","is_channel":true,"is_group":false,"is_im":false,"created":1598719399,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"prodos","is_shared":false,"parent_conversation":null,"creator":"UA8FVE12T","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"ProDOS 8 use\/dev","creator":"UA8FVE12T","last_set":1598719400},"previous_names":[]},{"id":"C01J91LFSQ3","name":"romx","is_channel":true,"is_group":false,"is_im":false,"created":1610079702,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"romx","is_shared":false,"parent_conversation":null,"creator":"U01HJQK9TU3","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"ROMX rom replacement boards (<http:\/\/www.theRomExchange.com|www.theRomExchange.com>)","creator":"U01HJQK9TU3","last_set":1610079703},"previous_names":[]},{"id":"C01NHA835NF","name":"classicmac","is_channel":true,"is_group":false,"is_im":false,"created":1613625903,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"classicmac","is_shared":false,"parent_conversation":null,"creator":"U1TJZNH1B","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"For Classic (Pre-Intel) Mac Discussion","creator":"U1TJZNH1B","last_set":1613625904},"previous_names":[]},{"id":"C02B4PJ223X","name":"applecorn","is_channel":true,"is_group":false,"is_im":false,"created":1628990910,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"applecorn","is_shared":false,"parent_conversation":null,"creator":"UNE040UAK","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"<https:\/\/github.com\/bobbimanners\/Applecorn>","creator":"UNE040UAK","last_set":1628991004},"purpose":{"value":"Applecorn - run BBC Micro language ROMs on \/\/e Enhanced","creator":"UNE040UAK","last_set":1628990910},"previous_names":[]},{"id":"C02EAQECY5A","name":"equant-test","is_channel":true,"is_group":false,"is_im":false,"created":1631378860,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"equant-test","is_shared":false,"parent_conversation":null,"creator":"U025NNCFL3G","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T1J8S1LGH"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_private":false,"is_mpim":false,"topic":{"value":"All you base are belon
|
||||
|
||||
|
||||
CHUNK #8: 103
|
||||
|
||||
|
||||
CHUNK #9: g to us","creator":"U025NNCFL3G","last_set":1632633537},"purpose":{"value":"A test channel for developing a Slack app to run on the Apple2Idiot card.","creator":"U025NNCFL3G","last_set":1631378861},"previous_names":[]}],"response_metadata":{"next_cursor":""}}
|
||||
|
||||
|
||||
CHUNK #10: 0
|
||||
|
||||
|
||||
CHUNK #11:
|
||||
|
||||
|
||||
CHUNK #12:
|
622
examples/slack/bad_data/user.conversations.test.pretty.all.json
Normal file
622
examples/slack/bad_data/user.conversations.test.pretty.all.json
Normal file
@ -0,0 +1,622 @@
|
||||
{
|
||||
"ok": true,
|
||||
"channels": [
|
||||
{
|
||||
"id": "C1J89GVL4",
|
||||
"name": "general",
|
||||
"is_channel": true,
|
||||
"is_group": false,
|
||||
"is_im": false,
|
||||
"created": 1466354298,
|
||||
"is_archived": false,
|
||||
"is_general": true,
|
||||
"unlinked": 0,
|
||||
"name_normalized": "general",
|
||||
"is_shared": false,
|
||||
"parent_conversation": null,
|
||||
"creator": "U1J75A8PM",
|
||||
"is_ext_shared": false,
|
||||
"is_org_shared": false,
|
||||
"shared_team_ids": [
|
||||
"T1J8S1LGH"
|
||||
],
|
||||
"pending_shared": [],
|
||||
"pending_connected_team_ids": [],
|
||||
"is_pending_ext_shared": false,
|
||||
"is_private": false,
|
||||
"is_mpim": false,
|
||||
"topic": {
|
||||
"value": "Be excellent to each other. :the_horns:",
|
||||
"creator": "U1J75A8PM",
|
||||
"last_set": 1599072909
|
||||
},
|
||||
"purpose": {
|
||||
"value": "This channel is for team-wide communication and announcements. All team members are in this channel.",
|
||||
"creator": "",
|
||||
"last_set": 0
|
||||
},
|
||||
"previous_names": []
|
||||
},
|
||||
{
|
||||
"id": "CA77AFDL4",
|
||||
"name": "swapmeet",
|
||||
"is_channel": true,
|
||||
"is_group": false,
|
||||
"is_im": false,
|
||||
"created": 1523884293,
|
||||
"is_archived": false,
|
||||
"is_general": false,
|
||||
"unlinked": 0,
|
||||
"name_normalized": "swapmeet",
|
||||
"is_shared": false,
|
||||
"parent_conversation": null,
|
||||
"creator": "U1J75A8PM",
|
||||
"is_ext_shared": false,
|
||||
"is_org_shared": false,
|
||||
"shared_team_ids": [
|
||||
"T1J8S1LGH"
|
||||
],
|
||||
"pending_shared": [],
|
||||
"pending_connected_team_ids": [],
|
||||
"is_pending_ext_shared": false,
|
||||
"is_private": false,
|
||||
"is_mpim": false,
|
||||
"topic": {
|
||||
"value": "",
|
||||
"creator": "",
|
||||
"last_set": 0
|
||||
},
|
||||
"purpose": {
|
||||
"value": "Please keep sales, trades, biz talk here. Thanks!",
|
||||
"creator": "U1J75A8PM",
|
||||
"last_set": 1523884293
|
||||
},
|
||||
"previous_names": []
|
||||
},
|
||||
{
|
||||
"id": "CA79CS7V3",
|
||||
"name": "kansasfest",
|
||||
"is_channel": true,
|
||||
"is_group": false,
|
||||
"is_im": false,
|
||||
"created": 1523832275,
|
||||
"is_archived": false,
|
||||
"is_general": false,
|
||||
"unlinked": 0,
|
||||
"name_normalized": "kansasfest",
|
||||
"is_shared": false,
|
||||
"parent_conversation": null,
|
||||
"creator": "U1J75A8PM",
|
||||
"is_ext_shared": false,
|
||||
"is_org_shared": false,
|
||||
"shared_team_ids": [
|
||||
"T1J8S1LGH"
|
||||
],
|
||||
"pending_shared": [],
|
||||
"pending_connected_team_ids": [],
|
||||
"is_pending_ext_shared": false,
|
||||
"is_private": false,
|
||||
"is_mpim": false,
|
||||
"topic": {
|
||||
"value": "KansasFest 2021 (Online only) - July 23-24, 2021 - <https://www.kansasfest.org/>",
|
||||
"creator": "U1TS7D80Y",
|
||||
"last_set": 1624817840
|
||||
},
|
||||
"purpose": {
|
||||
"value": "KansasFest 2018!!!",
|
||||
"creator": "U1J75A8PM",
|
||||
"last_set": 1523832275
|
||||
},
|
||||
"previous_names": []
|
||||
},
|
||||
{
|
||||
"id": "CA7DAGTJ8",
|
||||
"name": "hardwarehackers",
|
||||
"is_channel": true,
|
||||
"is_group": false,
|
||||
"is_im": false,
|
||||
"created": 1523900178,
|
||||
"is_archived": false,
|
||||
"is_general": false,
|
||||
"unlinked": 0,
|
||||
"name_normalized": "hardwarehackers",
|
||||
"is_shared": false,
|
||||
"parent_conversation": null,
|
||||
"creator": "U1J75A8PM",
|
||||
"is_ext_shared": false,
|
||||
"is_org_shared": false,
|
||||
"shared_team_ids": [
|
||||
"T1J8S1LGH"
|
||||
],
|
||||
"pending_shared": [],
|
||||
"pending_connected_team_ids": [],
|
||||
"is_pending_ext_shared": false,
|
||||
"is_private": false,
|
||||
"is_mpim": false,
|
||||
"topic": {
|
||||
"value": "Trying to plug it in? Building something? Got a question? *POW* Bring it in here!",
|
||||
"creator": "U1TKU4H52",
|
||||
"last_set": 1567374624
|
||||
},
|
||||
"purpose": {
|
||||
"value": "Trying to plug it in? Building something? Got a question? *POW* Bring it in here!",
|
||||
"creator": "U1J75A8PM",
|
||||
"last_set": 1523900179
|
||||
},
|
||||
"previous_names": []
|
||||
},
|
||||
{
|
||||
"id": "CA8AT5886",
|
||||
"name": "coding",
|
||||
"is_channel": true,
|
||||
"is_group": false,
|
||||
"is_im": false,
|
||||
"created": 1523883870,
|
||||
"is_archived": false,
|
||||
"is_general": false,
|
||||
"unlinked": 0,
|
||||
"name_normalized": "coding",
|
||||
"is_shared": false,
|
||||
"parent_conversation": null,
|
||||
"creator": "U1J75A8PM",
|
||||
"is_ext_shared": false,
|
||||
"is_org_shared": false,
|
||||
"shared_team_ids": [
|
||||
"T1J8S1LGH"
|
||||
],
|
||||
"pending_shared": [],
|
||||
"pending_connected_team_ids": [],
|
||||
"is_pending_ext_shared": false,
|
||||
"is_private": false,
|
||||
"is_mpim": false,
|
||||
"topic": {
|
||||
"value": "",
|
||||
"creator": "U1J75A8PM",
|
||||
"last_set": 1525527970
|
||||
},
|
||||
"purpose": {
|
||||
"value": "Programming, code golf, experiments, questions on coding, all languages.",
|
||||
"creator": "U1J75A8PM",
|
||||
"last_set": 1587554014
|
||||
},
|
||||
"previous_names": [
|
||||
"democoders"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "CA8LXU4BV",
|
||||
"name": "raspberry-ii",
|
||||
"is_channel": true,
|
||||
"is_group": false,
|
||||
"is_im": false,
|
||||
"created": 1524041980,
|
||||
"is_archived": false,
|
||||
"is_general": false,
|
||||
"unlinked": 0,
|
||||
"name_normalized": "raspberry-ii",
|
||||
"is_shared": false,
|
||||
"parent_conversation": null,
|
||||
"creator": "U1TMNSKMX",
|
||||
"is_ext_shared": false,
|
||||
"is_org_shared": false,
|
||||
"shared_team_ids": [
|
||||
"T1J8S1LGH"
|
||||
],
|
||||
"pending_shared": [],
|
||||
"pending_connected_team_ids": [],
|
||||
"is_pending_ext_shared": false,
|
||||
"is_private": false,
|
||||
"is_mpim": false,
|
||||
"topic": {
|
||||
"value": "",
|
||||
"creator": "",
|
||||
"last_set": 0
|
||||
},
|
||||
"purpose": {
|
||||
"value": "Fun ways to use a Raspberry Pi with your Apple II (Raspple II, Apple 2 Pi, etc)",
|
||||
"creator": "U1TMNSKMX",
|
||||
"last_set": 1524439726
|
||||
},
|
||||
"previous_names": []
|
||||
},
|
||||
{
|
||||
"id": "CABARQ39S",
|
||||
"name": "show-and-tell",
|
||||
"is_channel": true,
|
||||
"is_group": false,
|
||||
"is_im": false,
|
||||
"created": 1524499762,
|
||||
"is_archived": false,
|
||||
"is_general": false,
|
||||
"unlinked": 0,
|
||||
"name_normalized": "show-and-tell",
|
||||
"is_shared": false,
|
||||
"parent_conversation": null,
|
||||
"creator": "UA8HABGKG",
|
||||
"is_ext_shared": false,
|
||||
"is_org_shared": false,
|
||||
"shared_team_ids": [
|
||||
"T1J8S1LGH"
|
||||
],
|
||||
"pending_shared": [],
|
||||
"pending_connected_team_ids": [],
|
||||
"is_pending_ext_shared": false,
|
||||
"is_private": false,
|
||||
"is_mpim": false,
|
||||
"topic": {
|
||||
"value": "",
|
||||
"creator": "",
|
||||
"last_set": 0
|
||||
},
|
||||
"purpose": {
|
||||
"value": "Show off your goods!",
|
||||
"creator": "UA8HABGKG",
|
||||
"last_set": 1524499762
|
||||
},
|
||||
"previous_names": []
|
||||
},
|
||||
{
|
||||
"id": "CABEM8JFK",
|
||||
"name": "emulators",
|
||||
"is_channel": true,
|
||||
"is_group": false,
|
||||
"is_im": false,
|
||||
"created": 1524560064,
|
||||
"is_archived": false,
|
||||
"is_general": false,
|
||||
"unlinked": 0,
|
||||
"name_normalized": "emulators",
|
||||
"is_shared": false,
|
||||
"parent_conversation": null,
|
||||
"creator": "U1TJZNH1B",
|
||||
"is_ext_shared": false,
|
||||
"is_org_shared": false,
|
||||
"shared_team_ids": [
|
||||
"T1J8S1LGH"
|
||||
],
|
||||
"pending_shared": [],
|
||||
"pending_connected_team_ids": [],
|
||||
"is_pending_ext_shared": false,
|
||||
"is_private": false,
|
||||
"is_mpim": false,
|
||||
"topic": {
|
||||
"value": "",
|
||||
"creator": "",
|
||||
"last_set": 0
|
||||
},
|
||||
"purpose": {
|
||||
"value": "Apple II Emulation",
|
||||
"creator": "U1TJZNH1B",
|
||||
"last_set": 1524560069
|
||||
},
|
||||
"previous_names": []
|
||||
},
|
||||
{
|
||||
"id": "CB52YS4UR",
|
||||
"name": "applehistory",
|
||||
"is_channel": true,
|
||||
"is_group": false,
|
||||
"is_im": false,
|
||||
"created": 1528749885,
|
||||
"is_archived": false,
|
||||
"is_general": false,
|
||||
"unlinked": 0,
|
||||
"name_normalized": "applehistory",
|
||||
"is_shared": false,
|
||||
"parent_conversation": null,
|
||||
"creator": "U1TK8V99Q",
|
||||
"is_ext_shared": false,
|
||||
"is_org_shared": false,
|
||||
"shared_team_ids": [
|
||||
"T1J8S1LGH"
|
||||
],
|
||||
"pending_shared": [],
|
||||
"pending_connected_team_ids": [],
|
||||
"is_pending_ext_shared": false,
|
||||
"is_private": false,
|
||||
"is_mpim": false,
|
||||
"topic": {
|
||||
"value": "",
|
||||
"creator": "",
|
||||
"last_set": 0
|
||||
},
|
||||
"purpose": {
|
||||
"value": "",
|
||||
"creator": "",
|
||||
"last_set": 0
|
||||
},
|
||||
"previous_names": []
|
||||
},
|
||||
{
|
||||
"id": "CPS2TG28L",
|
||||
"name": "appleii",
|
||||
"is_channel": true,
|
||||
"is_group": false,
|
||||
"is_im": false,
|
||||
"created": 1571964280,
|
||||
"is_archived": false,
|
||||
"is_general": false,
|
||||
"unlinked": 0,
|
||||
"name_normalized": "appleii",
|
||||
"is_shared": false,
|
||||
"parent_conversation": null,
|
||||
"creator": "UNGDL366N",
|
||||
"is_ext_shared": false,
|
||||
"is_org_shared": false,
|
||||
"shared_team_ids": [
|
||||
"T1J8S1LGH"
|
||||
],
|
||||
"pending_shared": [],
|
||||
"pending_connected_team_ids": [],
|
||||
"is_pending_ext_shared": false,
|
||||
"is_private": false,
|
||||
"is_mpim": false,
|
||||
"topic": {
|
||||
"value": "",
|
||||
"creator": "",
|
||||
"last_set": 0
|
||||
},
|
||||
"purpose": {
|
||||
"value": "Everything Apple II",
|
||||
"creator": "UNGDL366N",
|
||||
"last_set": 1571964280
|
||||
},
|
||||
"previous_names": []
|
||||
},
|
||||
{
|
||||
"id": "CPUNLH9ML",
|
||||
"name": "fix_or_repair",
|
||||
"is_channel": true,
|
||||
"is_group": false,
|
||||
"is_im": false,
|
||||
"created": 1571964217,
|
||||
"is_archived": false,
|
||||
"is_general": false,
|
||||
"unlinked": 0,
|
||||
"name_normalized": "fix_or_repair",
|
||||
"is_shared": false,
|
||||
"parent_conversation": null,
|
||||
"creator": "UNGDL366N",
|
||||
"is_ext_shared": false,
|
||||
"is_org_shared": false,
|
||||
"shared_team_ids": [
|
||||
"T1J8S1LGH"
|
||||
],
|
||||
"pending_shared": [],
|
||||
"pending_connected_team_ids": [],
|
||||
"is_pending_ext_shared": false,
|
||||
"is_private": false,
|
||||
"is_mpim": false,
|
||||
"topic": {
|
||||
"value": "",
|
||||
"creator": "",
|
||||
"last_set": 0
|
||||
},
|
||||
"purpose": {
|
||||
"value": "Channel for fixing vintage Apple Computers.",
|
||||
"creator": "UNGDL366N",
|
||||
"last_set": 1571964217
|
||||
},
|
||||
"previous_names": []
|
||||
},
|
||||
{
|
||||
"id": "CQF1PHTFY",
|
||||
"name": "joeylib",
|
||||
"is_channel": true,
|
||||
"is_group": false,
|
||||
"is_im": false,
|
||||
"created": 1573419513,
|
||||
"is_archived": false,
|
||||
"is_general": false,
|
||||
"unlinked": 0,
|
||||
"name_normalized": "joeylib",
|
||||
"is_shared": false,
|
||||
"parent_conversation": null,
|
||||
"creator": "UCLBUA2JU",
|
||||
"is_ext_shared": false,
|
||||
"is_org_shared": false,
|
||||
"shared_team_ids": [
|
||||
"T1J8S1LGH"
|
||||
],
|
||||
"pending_shared": [],
|
||||
"pending_connected_team_ids": [],
|
||||
"is_pending_ext_shared": false,
|
||||
"is_private": false,
|
||||
"is_mpim": false,
|
||||
"topic": {
|
||||
"value": "Cross-platform game development library and IDE. <https://joeylib.com>",
|
||||
"creator": "UCLBUA2JU",
|
||||
"last_set": 1630633667
|
||||
},
|
||||
"purpose": {
|
||||
"value": "To Rule the World.",
|
||||
"creator": "UCLBUA2JU",
|
||||
"last_set": 1596836336
|
||||
},
|
||||
"previous_names": []
|
||||
},
|
||||
{
|
||||
"id": "C019N82J96Z",
|
||||
"name": "prodos",
|
||||
"is_channel": true,
|
||||
"is_group": false,
|
||||
"is_im": false,
|
||||
"created": 1598719399,
|
||||
"is_archived": false,
|
||||
"is_general": false,
|
||||
"unlinked": 0,
|
||||
"name_normalized": "prodos",
|
||||
"is_shared": false,
|
||||
"parent_conversation": null,
|
||||
"creator": "UA8FVE12T",
|
||||
"is_ext_shared": false,
|
||||
"is_org_shared": false,
|
||||
"shared_team_ids": [
|
||||
"T1J8S1LGH"
|
||||
],
|
||||
"pending_shared": [],
|
||||
"pending_connected_team_ids": [],
|
||||
"is_pending_ext_shared": false,
|
||||
"is_private": false,
|
||||
"is_mpim": false,
|
||||
"topic": {
|
||||
"value": "",
|
||||
"creator": "",
|
||||
"last_set": 0
|
||||
},
|
||||
"purpose": {
|
||||
"value": "ProDOS 8 use/dev",
|
||||
"creator": "UA8FVE12T",
|
||||
"last_set": 1598719400
|
||||
},
|
||||
"previous_names": []
|
||||
},
|
||||
{
|
||||
"id": "C01J91LFSQ3",
|
||||
"name": "romx",
|
||||
"is_channel": true,
|
||||
"is_group": false,
|
||||
"is_im": false,
|
||||
"created": 1610079702,
|
||||
"is_archived": false,
|
||||
"is_general": false,
|
||||
"unlinked": 0,
|
||||
"name_normalized": "romx",
|
||||
"is_shared": false,
|
||||
"parent_conversation": null,
|
||||
"creator": "U01HJQK9TU3",
|
||||
"is_ext_shared": false,
|
||||
"is_org_shared": false,
|
||||
"shared_team_ids": [
|
||||
"T1J8S1LGH"
|
||||
],
|
||||
"pending_shared": [],
|
||||
"pending_connected_team_ids": [],
|
||||
"is_pending_ext_shared": false,
|
||||
"is_private": false,
|
||||
"is_mpim": false,
|
||||
"topic": {
|
||||
"value": "",
|
||||
"creator": "",
|
||||
"last_set": 0
|
||||
},
|
||||
"purpose": {
|
||||
"value": "ROMX rom replacement boards (<http://www.theRomExchange.com|www.theRomExchange.com>)",
|
||||
"creator": "U01HJQK9TU3",
|
||||
"last_set": 1610079703
|
||||
},
|
||||
"previous_names": []
|
||||
},
|
||||
{
|
||||
"id": "C01NHA835NF",
|
||||
"name": "classicmac",
|
||||
"is_channel": true,
|
||||
"is_group": false,
|
||||
"is_im": false,
|
||||
"created": 1613625903,
|
||||
"is_archived": false,
|
||||
"is_general": false,
|
||||
"unlinked": 0,
|
||||
"name_normalized": "classicmac",
|
||||
"is_shared": false,
|
||||
"parent_conversation": null,
|
||||
"creator": "U1TJZNH1B",
|
||||
"is_ext_shared": false,
|
||||
"is_org_shared": false,
|
||||
"shared_team_ids": [
|
||||
"T1J8S1LGH"
|
||||
],
|
||||
"pending_shared": [],
|
||||
"pending_connected_team_ids": [],
|
||||
"is_pending_ext_shared": false,
|
||||
"is_private": false,
|
||||
"is_mpim": false,
|
||||
"topic": {
|
||||
"value": "",
|
||||
"creator": "",
|
||||
"last_set": 0
|
||||
},
|
||||
"purpose": {
|
||||
"value": "For Classic (Pre-Intel) Mac Discussion",
|
||||
"creator": "U1TJZNH1B",
|
||||
"last_set": 1613625904
|
||||
},
|
||||
"previous_names": []
|
||||
},
|
||||
{
|
||||
"id": "C02B4PJ223X",
|
||||
"name": "applecorn",
|
||||
"is_channel": true,
|
||||
"is_group": false,
|
||||
"is_im": false,
|
||||
"created": 1628990910,
|
||||
"is_archived": false,
|
||||
"is_general": false,
|
||||
"unlinked": 0,
|
||||
"name_normalized": "applecorn",
|
||||
"is_shared": false,
|
||||
"parent_conversation": null,
|
||||
"creator": "UNE040UAK",
|
||||
"is_ext_shared": false,
|
||||
"is_org_shared": false,
|
||||
"shared_team_ids": [
|
||||
"T1J8S1LGH"
|
||||
],
|
||||
"pending_shared": [],
|
||||
"pending_connected_team_ids": [],
|
||||
"is_pending_ext_shared": false,
|
||||
"is_private": false,
|
||||
"is_mpim": false,
|
||||
"topic": {
|
||||
"value": "<https://github.com/bobbimanners/Applecorn>",
|
||||
"creator": "UNE040UAK",
|
||||
"last_set": 1628991004
|
||||
},
|
||||
"purpose": {
|
||||
"value": "Applecorn - run BBC Micro language ROMs on //e Enhanced",
|
||||
"creator": "UNE040UAK",
|
||||
"last_set": 1628990910
|
||||
},
|
||||
"previous_names": []
|
||||
},
|
||||
{
|
||||
"id": "C02EAQECY5A",
|
||||
"name": "equant-test",
|
||||
"is_channel": true,
|
||||
"is_group": false,
|
||||
"is_im": false,
|
||||
"created": 1631378860,
|
||||
"is_archived": false,
|
||||
"is_general": false,
|
||||
"unlinked": 0,
|
||||
"name_normalized": "equant-test",
|
||||
"is_shared": false,
|
||||
"parent_conversation": null,
|
||||
"creator": "U025NNCFL3G",
|
||||
"is_ext_shared": false,
|
||||
"is_org_shared": false,
|
||||
"shared_team_ids": [
|
||||
"T1J8S1LGH"
|
||||
],
|
||||
"pending_shared": [],
|
||||
"pending_connected_team_ids": [],
|
||||
"is_pending_ext_shared": false,
|
||||
"is_private": false,
|
||||
"is_mpim": false,
|
||||
"topic": {
|
||||
"value": "",
|
||||
"creator": "",
|
||||
"last_set": 0
|
||||
},
|
||||
"purpose": {
|
||||
"value": "A test channel for developing a Slack app to run on the Apple2Idiot card.",
|
||||
"creator": "U025NNCFL3G",
|
||||
"last_set": 1631378861
|
||||
},
|
||||
"previous_names": []
|
||||
}
|
||||
],
|
||||
"response_metadata": {
|
||||
"next_cursor": ""
|
||||
}
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
{
|
||||
"ok": true,
|
||||
"channels": [
|
||||
{
|
||||
"id": "C1J89GVL4",
|
||||
"name": "general",
|
||||
"is_channel": true,
|
||||
"is_group": false,
|
||||
"is_im": false,
|
||||
"created": 1466354298,
|
||||
"is_archived": false,
|
||||
"is_general": true,
|
||||
"unlinked": 0,
|
||||
"name_normalized": "general",
|
||||
"is_shared": false,
|
||||
"parent_conversation": null,
|
||||
"creator": "U1J75A8PM",
|
||||
"is_ext_shared": false,
|
||||
"is_org_shared": false,
|
||||
"shared_team_ids": [
|
||||
"T1J8S1LGH"
|
||||
],
|
||||
"pending_shared": [],
|
||||
"pending_connected_team_ids": [],
|
||||
"is_pending_ext_shared": false,
|
||||
"is_private": false,
|
||||
"is_mpim": false,
|
||||
"topic": {
|
||||
"value": "Be excellent to each other. :the_horns:",
|
||||
"creator": "U1J75A8PM",
|
||||
"last_set": 1599072909
|
||||
},
|
||||
"purpose": {
|
||||
"value": "This channel is for team-wide communication and announcements. All team members are in this channel.",
|
||||
"creator": "",
|
||||
"last_set": 0
|
||||
},
|
||||
"previous_names": []
|
||||
}
|
||||
],
|
||||
"response_metadata": {
|
||||
"next_cursor": "dGVhbTpDQTc3QUZETDQ="
|
||||
}
|
||||
}
|
@ -19,10 +19,6 @@ Apple2Idiot a2i = Apple2Idiot();
|
||||
WiFiClientSecure client;
|
||||
ArduinoSlack slack(client, SLACK_ACCESS_TOKEN);
|
||||
|
||||
#define COMMAND_SET_CHANNEL 200
|
||||
#define COMMAND_SEND_MESSAGE 201
|
||||
#define COMMAND_GET_CHANNEL_MESSAGES 202
|
||||
|
||||
char wifi_ssid[] = WIFI_SSID; // your network SSID (name)
|
||||
char wifi_password[] = WIFI_PASSWORD; // your network password
|
||||
|
||||
@ -32,11 +28,109 @@ char wifi_password[] = WIFI_PASSWORD; // your network password
|
||||
SlackUsersConversations conversation;
|
||||
|
||||
//const long readLoopInterval = 100; // millis
|
||||
const long readLoopInterval = 44000; // millis
|
||||
const long readLoopInterval = 11000; // millis
|
||||
unsigned long lastReadLoopTime = 0;
|
||||
|
||||
byte lastAppleCommand = 0;
|
||||
|
||||
//String channel_name = "equant-test";
|
||||
//C02EAQECY5A
|
||||
|
||||
const char current_channel_name = 'equant-test';
|
||||
const char current_channel_id = 'C02EAQECY5A';
|
||||
|
||||
String current_channel_str = "";
|
||||
String message = "";
|
||||
int current_channel_n = -1;
|
||||
|
||||
/*################################################
|
||||
# Functions #
|
||||
################################################*/
|
||||
|
||||
int find_channel_number(String channel_str_from_apple) {
|
||||
Serial.println("find_channel_number()");
|
||||
for (int i=0; i< conversation.n_channels; i++) {
|
||||
if (channel_str_from_apple == String(conversation.channelNames[i])) {
|
||||
Serial.print(" Found:"); Serial.println(conversation.channelNames[i]);
|
||||
return i;
|
||||
}
|
||||
if (channel_str_from_apple == String(conversation.channelIds[i])) {
|
||||
Serial.print(" Found:"); Serial.println(conversation.channelIds[i]);
|
||||
return i;
|
||||
}
|
||||
}
|
||||
Serial.println(" No channel found:");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
void get_slack_channels() {
|
||||
Serial.println("get_slack_channels()");
|
||||
int slack_attempts=1;
|
||||
do {
|
||||
yield();
|
||||
conversation = slack.usersConversations();
|
||||
} while (conversation.error && ++slack_attempts < 5);
|
||||
|
||||
if (slack_attempts == 5) {
|
||||
Serial.println(" ERROR: Unable to negotiate usersConversations with Slack API");
|
||||
} else {
|
||||
Serial.println("+-+-+-+- CHANNELS -+-+-+-+-+-+-+-+:");
|
||||
for (int i=0; i< conversation.n_channels; i++) {
|
||||
Serial.print(conversation.channelNames[i]);
|
||||
Serial.print(" -> ");
|
||||
Serial.println(conversation.channelIds[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
SlackMessages channelMessages;
|
||||
|
||||
void get_channel_messages() {
|
||||
Serial.println();
|
||||
Serial.print("get_channel_messages() for channel: ");
|
||||
Serial.println(current_channel_id);
|
||||
int slack_attempts=1;
|
||||
int error=1;
|
||||
do {
|
||||
yield();
|
||||
error = slack.channelHistory(current_channel_id, &channelMessages);
|
||||
} while (channelMessages.error && ++slack_attempts < 5);
|
||||
|
||||
if (slack_attempts == 5) {
|
||||
Serial.println("ERROR: Unable to negotiate usersConversations with Slack API");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void send_channel_info(int channel_n) {
|
||||
Serial.println("send_channel_info()");
|
||||
int ac = 0;
|
||||
ac = a2i.write_data(SHARED_RAM_START_ADDRESS, current_channel_n);
|
||||
ac = a2i.write_string_to_shared_ram(String(conversation.channelNames[current_channel_n]), ac + 1);
|
||||
ac = a2i.write_string_to_shared_ram(String(conversation.purpose[current_channel_n]), ac + 1);
|
||||
ac = a2i.write_string_to_shared_ram(String(conversation.topic[current_channel_n]), ac + 1);
|
||||
a2i.write_data(ESP_COMMAND_ADDRESS, EOT);
|
||||
}
|
||||
|
||||
|
||||
void send_message_to_channel(String message) {
|
||||
Serial.println("send_message_to_channel()");
|
||||
Serial.print(" current_channel_n: "); Serial.println(current_channel_n);
|
||||
SlackMessage slackMessage;
|
||||
char m[250];
|
||||
message.toCharArray(m, 250);
|
||||
//char c[250];
|
||||
//channel_name.toCharArray(c, 250);
|
||||
slackMessage = slack.postMessage(conversation.channelIds[current_channel_n], m);
|
||||
Serial.print(" current_channel_n: "); Serial.println(current_channel_n);
|
||||
Serial.print(" message sent to channel: "); Serial.println(conversation.channelIds[current_channel_n]);
|
||||
find_channel_number("equant-test");
|
||||
}
|
||||
|
||||
|
||||
/*################################################
|
||||
# Setup #
|
||||
################################################*/
|
||||
@ -63,49 +157,36 @@ void setup() {
|
||||
Serial.println(WiFi.localIP()); //Show ESP32 IP on serial
|
||||
client.setCACert(slack_server_cert);
|
||||
|
||||
//Serial.println(conversation);
|
||||
//get_slack_channels();
|
||||
//current_channel_n = find_channel_number("equant-test");
|
||||
//yield();
|
||||
|
||||
int slack_attempts=1;
|
||||
do {
|
||||
yield();
|
||||
conversation = slack.usersConversations();
|
||||
} while (conversation.error && ++slack_attempts < 5);
|
||||
//Serial.println("");
|
||||
//send_message_to_channel("Insufficient facts always invite danger.");
|
||||
|
||||
yield();
|
||||
Serial.println("+-+-+-+- CHANNELS -+-+-+-+-+-+-+-+:");
|
||||
//for (int i=0; i< sizeof(conversation.channelNames)-5; i++) {
|
||||
//for (int i=0; i<5; i++) {
|
||||
//Serial.print(conversation.channelNames[i]);
|
||||
//Serial.print(" -> ");
|
||||
//Serial.println(conversation.channelIds[i]);
|
||||
//}
|
||||
yield();
|
||||
Serial.println(conversation.channelNames[0]);
|
||||
Serial.println(conversation.channelNames[1]);
|
||||
Serial.println(conversation.channelNames[2]);
|
||||
Serial.println(conversation.channelNames[-1]);
|
||||
//slack.channelHistory(conversation.channelIds[current_channel_n]);
|
||||
get_channel_messages();
|
||||
|
||||
Serial.println("Setup done");
|
||||
}
|
||||
|
||||
/*################################################
|
||||
# Functions #
|
||||
################################################*/
|
||||
|
||||
|
||||
/*################################################
|
||||
# Main #
|
||||
################################################*/
|
||||
|
||||
//String channel_name = "equant-test";
|
||||
String channel_name = "C02EAQECY5A";
|
||||
String message = "";
|
||||
|
||||
void showthing(char *thing) {
|
||||
Serial.println(thing);
|
||||
for (int j=0; j<strlen(thing)+2; j++) {
|
||||
Serial.print("["); Serial.print(thing[j]); Serial.print("]");
|
||||
}
|
||||
Serial.println();
|
||||
}
|
||||
|
||||
void loop() {
|
||||
|
||||
if ((millis() - lastReadLoopTime) > readLoopInterval) {
|
||||
|
||||
|
||||
byte command_byte = a2i.read_data(APPLE_COMMAND_ADDRESS);
|
||||
if (command_byte == RAM_BUSY) {
|
||||
Serial.println("Command Read: RAM BUSY");
|
||||
@ -115,36 +196,60 @@ void loop() {
|
||||
Serial.print("Command Switch command_byte: ");
|
||||
Serial.println(command_byte);
|
||||
switch(command_byte) {
|
||||
case COMMAND_GET_CHANNEL_MESSAGES:
|
||||
|
||||
case COMMAND_GET_MESSAGES:
|
||||
Serial.println("COMMAND_GET_CHANNEL_MESSAGES");
|
||||
a2i.write_data(ESP_COMMAND_ADDRESS, ACK); // notify Apple IIe we are processing command byte
|
||||
char cc[250];
|
||||
channel_name.toCharArray(cc, 250);
|
||||
conversation = slack.usersConversations();
|
||||
//char cc[250];
|
||||
//channel_name.toCharArray(cc, 250);
|
||||
//conversation.channelIds[current_channel_n];
|
||||
//conversation = slack.usersConversations();
|
||||
//serializeJsonPretty(conversation.messageObj, Serial);
|
||||
a2i.write_data(APPLE_COMMAND_ADDRESS, ACK);
|
||||
a2i.write_data(ESP_COMMAND_ADDRESS, EOT); // notify Apple IIe we are done processing command byte
|
||||
break;
|
||||
|
||||
case COMMAND_SET_CHANNEL:
|
||||
Serial.println("COMMAND_SET_CHANNEL");
|
||||
a2i.write_data(ESP_COMMAND_ADDRESS, ACK); // notify Apple IIe we are processing command byte
|
||||
channel_name = a2i.read_string_from_ram(SHARED_RAM_START_ADDRESS);
|
||||
Serial.println("Received: ["+channel_name+"]");
|
||||
current_channel_str = a2i.read_string_from_ram(SHARED_RAM_START_ADDRESS);
|
||||
current_channel_n = find_channel_number(current_channel_str);
|
||||
if (current_channel_n < 0) {
|
||||
a2i.write_data(ESP_COMMAND_ADDRESS, NOT_FOUND);
|
||||
Serial.println(" Couldn't find requested channel.");
|
||||
} else {
|
||||
Serial.println(" Set channel to: ["+current_channel_str+"]");
|
||||
send_channel_info(current_channel_n);
|
||||
a2i.write_data(ESP_COMMAND_ADDRESS, EOT);
|
||||
}
|
||||
a2i.write_data(APPLE_COMMAND_ADDRESS, ACK);
|
||||
a2i.write_data(ESP_COMMAND_ADDRESS, EOT); // notify Apple IIe we are done processing command byte
|
||||
break;
|
||||
|
||||
case COMMAND_GET_CHANNEL_N:
|
||||
Serial.println("COMMAND_GET_CHANNEL_N");
|
||||
a2i.write_data(ESP_COMMAND_ADDRESS, ACK);
|
||||
int requested_n;
|
||||
requested_n = a2i.read_data(SHARED_RAM_START_ADDRESS);
|
||||
send_channel_info(requested_n);
|
||||
a2i.write_data(APPLE_COMMAND_ADDRESS, ACK);
|
||||
a2i.write_data(ESP_COMMAND_ADDRESS, EOT);
|
||||
break;
|
||||
|
||||
case COMMAND_GET_CHANNEL_STR:
|
||||
Serial.println("COMMAND_GET_CHANNEL_STR");
|
||||
//a2i.write_data(ESP_COMMAND_ADDRESS, ACK);
|
||||
//send_channel_info(current_channel_n);
|
||||
//a2i.write_data(APPLE_COMMAND_ADDRESS, ACK);
|
||||
//a2i.write_data(ESP_COMMAND_ADDRESS, EOT);
|
||||
break;
|
||||
|
||||
case COMMAND_SEND_MESSAGE:
|
||||
Serial.println("COMMAND_SEND_MESSAGE:");
|
||||
SlackMessage slackMessage;
|
||||
a2i.write_data(ESP_COMMAND_ADDRESS, ACK); // notify Apple IIe we are processing command byte
|
||||
message = a2i.read_string_from_ram(SHARED_RAM_START_ADDRESS);
|
||||
char m[250];
|
||||
message.toCharArray(m, 250);
|
||||
char c[250];
|
||||
channel_name.toCharArray(c, 250);
|
||||
slackMessage = slack.postMessage(c, m);
|
||||
send_message_to_channel(message);
|
||||
a2i.write_data(APPLE_COMMAND_ADDRESS, ACK);
|
||||
a2i.write_data(ESP_COMMAND_ADDRESS, result); // notify Apple IIe we are done processing command byte
|
||||
a2i.write_data(ESP_COMMAND_ADDRESS, EOT); // notify Apple IIe we are done processing command byte
|
||||
break;
|
||||
}
|
||||
lastAppleCommand = command_byte;
|
||||
|
83
examples/slack/tags
Normal file
83
examples/slack/tags
Normal file
@ -0,0 +1,83 @@
|
||||
!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
|
||||
!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
|
||||
!_TAG_PROGRAM_AUTHOR Darren Hiebert /dhiebert@users.sourceforge.net/
|
||||
!_TAG_PROGRAM_NAME Exuberant Ctags //
|
||||
!_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/
|
||||
!_TAG_PROGRAM_VERSION 5.9~svn20110310 //
|
||||
ArduinoSlack ArduinoSlack.cpp /^ArduinoSlack::ArduinoSlack(Client &client, const char *bearerToken)$/;" f class:ArduinoSlack
|
||||
ArduinoSlack ArduinoSlack.h /^class ArduinoSlack$/;" c
|
||||
ArduinoSlack_h ArduinoSlack.h 10;" d
|
||||
CREDENTIALS_H credentials.h 2;" d
|
||||
NUM_USERS_TO_SUPPORT ArduinoSlack.h 60;" d
|
||||
SLACK_ACCESS_TOKEN credentials.h 6;" d
|
||||
SLACK_CONVERSATIONS_HISTORY_ENDPOINT ArduinoSlack.h 48;" d
|
||||
SLACK_DEBUG_SERIAL ArduinoSlack.h 30;" d
|
||||
SLACK_DEBUG_SERIAL ArduinoSlack.h 33;" d
|
||||
SLACK_DEBUG_SERIAL_LN ArduinoSlack.h 31;" d
|
||||
SLACK_DEBUG_SERIAL_LN ArduinoSlack.h 34;" d
|
||||
SLACK_ENABLE_DEBUG ArduinoSlack.h 19;" d
|
||||
SLACK_ENABLE_SERIAL ArduinoSlack.h 16;" d
|
||||
SLACK_FINGERPRINT ArduinoSlack.h 39;" d
|
||||
SLACK_HOST ArduinoSlack.h 37;" d
|
||||
SLACK_POST_MESSAGE_ENDPOINT ArduinoSlack.h 47;" d
|
||||
SLACK_PRESENCE_AUTO ArduinoSlack.h 43;" d
|
||||
SLACK_PRESENCE_AWAY ArduinoSlack.h 42;" d
|
||||
SLACK_SERIAL ArduinoSlack.h 22;" d
|
||||
SLACK_SERIAL ArduinoSlack.h 25;" d
|
||||
SLACK_SERIAL_LN ArduinoSlack.h 23;" d
|
||||
SLACK_SERIAL_LN ArduinoSlack.h 26;" d
|
||||
SLACK_TIMEOUT ArduinoSlack.h 40;" d
|
||||
SLACK_USERS_CONVERSATIONS_ENDPOINT ArduinoSlack.h 49;" d
|
||||
SLACK_USERS_PROFILE_SET_ENDPOINT ArduinoSlack.h 45;" d
|
||||
SLACK_USERS_SET_PRESENCE_ENDPOINT ArduinoSlack.h 46;" d
|
||||
SlackMessage ArduinoSlack.h /^struct SlackMessage$/;" s
|
||||
SlackMessages ArduinoSlack.h /^struct SlackMessages {$/;" s
|
||||
SlackProfile ArduinoSlack.h /^struct SlackProfile$/;" s
|
||||
SlackUsers ArduinoSlack.h /^struct SlackUsers$/;" s
|
||||
SlackUsersConversations ArduinoSlack.h /^struct SlackUsersConversations {$/;" s
|
||||
WIFI_PASSWORD credentials.h 5;" d
|
||||
WIFI_SSID credentials.h 4;" d
|
||||
_bearerToken ArduinoSlack.h /^ const char *_bearerToken;$/;" m class:ArduinoSlack
|
||||
channelHistory ArduinoSlack.cpp /^SlackMessages ArduinoSlack::channelHistory(char *channelId) {$/;" f class:ArduinoSlack
|
||||
channelIds ArduinoSlack.h /^ char *channelIds[22];$/;" m struct:SlackUsersConversations
|
||||
channelNames ArduinoSlack.h /^ char *channelNames[22];$/;" m struct:SlackUsersConversations
|
||||
channelsObj ArduinoSlack.h /^ JsonObject channelsObj;$/;" m struct:SlackUsersConversations
|
||||
client ArduinoSlack.h /^ Client *client;$/;" m class:ArduinoSlack
|
||||
closeClient ArduinoSlack.cpp /^void ArduinoSlack::closeClient()$/;" f class:ArduinoSlack
|
||||
displayName ArduinoSlack.h /^ char *displayName;$/;" m struct:SlackProfile
|
||||
error ArduinoSlack.h /^ bool error;$/;" m struct:SlackMessages
|
||||
error ArduinoSlack.h /^ bool error;$/;" m struct:SlackMessage
|
||||
error ArduinoSlack.h /^ bool error;$/;" m struct:SlackProfile
|
||||
error ArduinoSlack.h /^ bool error;$/;" m struct:SlackUsersConversations
|
||||
getConvHistEndpointArgs ArduinoSlack.h /^ const char *getConvHistEndpointArgs =$/;" m class:ArduinoSlack
|
||||
getHttpStatusCode ArduinoSlack.cpp /^int ArduinoSlack::getHttpStatusCode()$/;" f class:ArduinoSlack
|
||||
id ArduinoSlack.h /^ char *id[NUM_USERS_TO_SUPPORT];$/;" m struct:SlackUsers
|
||||
is_channel ArduinoSlack.h /^ bool is_channel;$/;" m struct:SlackUsersConversations
|
||||
makeGetRequest ArduinoSlack.cpp /^int ArduinoSlack::makeGetRequest(const char *command)$/;" f class:ArduinoSlack
|
||||
makePostRequest ArduinoSlack.cpp /^int ArduinoSlack::makePostRequest(const char *command, const char *body, const char *contentType)$/;" f class:ArduinoSlack
|
||||
messages ArduinoSlack.h /^ SlackMessage messages[30];$/;" m struct:SlackMessages
|
||||
n_channels ArduinoSlack.h /^ int n_channels;$/;" m struct:SlackUsersConversations
|
||||
n_messages ArduinoSlack.h /^ int n_messages;$/;" m struct:SlackMessages
|
||||
n_messages ArduinoSlack.h /^ int n_messages;$/;" m struct:SlackMessage
|
||||
name ArduinoSlack.h /^ char *name[NUM_USERS_TO_SUPPORT];$/;" m struct:SlackUsers
|
||||
portNumber ArduinoSlack.h /^ int portNumber = 443;$/;" m class:ArduinoSlack
|
||||
postMessage ArduinoSlack.cpp /^SlackMessage ArduinoSlack::postMessage(const char *channel, const char *text) {$/;" f class:ArduinoSlack
|
||||
profileBufferSize ArduinoSlack.h /^ int profileBufferSize = 10000;$/;" m class:ArduinoSlack
|
||||
purpose ArduinoSlack.h /^ char *purpose[200];$/;" m struct:SlackUsersConversations
|
||||
setConvoHistoryBody ArduinoSlack.h /^ const char *setConvoHistoryBody =$/;" m class:ArduinoSlack
|
||||
setCustomStatus ArduinoSlack.cpp /^SlackProfile ArduinoSlack::setCustomStatus(const char *text, const char *emoji, int expiration)$/;" f class:ArduinoSlack
|
||||
setEndpointBody ArduinoSlack.h /^ const char *setEndpointBody =$/;" m class:ArduinoSlack
|
||||
setMessageBody ArduinoSlack.h /^ const char *setMessageBody =$/;" m class:ArduinoSlack
|
||||
setPresence ArduinoSlack.cpp /^bool ArduinoSlack::setPresence(const char *presence)$/;" f class:ArduinoSlack
|
||||
skipHeaders ArduinoSlack.cpp /^void ArduinoSlack::skipHeaders(bool tossUnexpectedForJSON)$/;" f class:ArduinoSlack
|
||||
slack_server_cert ArduinoSlackCert.h /^const char *slack_server_cert = "-----BEGIN CERTIFICATE-----\\n"$/;" v
|
||||
statusEmoji ArduinoSlack.h /^ char *statusEmoji;$/;" m struct:SlackProfile
|
||||
statusExpiration ArduinoSlack.h /^ int statusExpiration;$/;" m struct:SlackProfile
|
||||
statusText ArduinoSlack.h /^ char *statusText;$/;" m struct:SlackProfile
|
||||
stripBadDataFromClientResponse ArduinoSlack.cpp /^void ArduinoSlack::stripBadDataFromClientResponse(char *payload) {$/;" f class:ArduinoSlack
|
||||
text ArduinoSlack.h /^ char *text;$/;" m struct:SlackMessage
|
||||
topic ArduinoSlack.h /^ char *topic[200];$/;" m struct:SlackUsersConversations
|
||||
type ArduinoSlack.h /^ char *type;$/;" m struct:SlackMessage
|
||||
userid ArduinoSlack.h /^ char *userid;$/;" m struct:SlackMessage
|
||||
username ArduinoSlack.h /^ char *username;$/;" m struct:SlackMessage
|
||||
usersConversations ArduinoSlack.cpp /^SlackUsersConversations ArduinoSlack::usersConversations()$/;" f class:ArduinoSlack
|
Loading…
Reference in New Issue
Block a user