This commit is contained in:
Justin Wilaby 2018-02-20 13:25:46 -08:00
Родитель 0e1ec7315e
Коммит f54757a679
12 изменённых файлов: 228 добавлений и 0 удалений

4
Chatdown/.chatrc Normal file
Просмотреть файл

@ -0,0 +1,4 @@
{
"in": "sample.chat",
"out": "sample.transcript"
}

Просмотреть файл

30
Chatdown/lib/activity.js Normal file
Просмотреть файл

@ -0,0 +1,30 @@
const ActivityType = require('./activityType');
class Activity {
/**
*
* @property {Attachment[]} attachments
*/
/**
* @property text
*/
/**
* @property timestamp
*/
/**
* @property id
*/
/**
* @property type
*/
constructor({ attachments = [], text = '', timestamp = '', id = -1, type = ActivityType.Message } = {}) {
Object.assign(this, { attachments, text, timestamp, id, type });
}
}
module.exports = Activity;

Просмотреть файл

@ -0,0 +1,3 @@
module.exports = {
Attachments: 'attachments'
};

Просмотреть файл

@ -0,0 +1,16 @@
module.exports = {
Message: 'message',
ContactRelationUpdate: 'contactRelationUpdate',
ConversationUpdate: 'conversationUpdate',
Typing: 'typing',
Ping: 'ping',
EndOfConversation: 'endOfConversation',
Event: 'event',
Invoke: 'invoke',
DeleteUserData: 'deleteUserData',
MessageUpdate: 'messageUpdate',
MessageDelete: 'messageDelete',
InstallationUpdate: 'installationUpdate',
MessageReaction: 'messageReaction',
Suggestion: 'suggestion',
};

Просмотреть файл

@ -0,0 +1,7 @@
class Attachment {
constructor({ contentType = '', contentUrl = '', content = null }) {
Object.assign(this, { contentType, contentUrl, content });
}
}
module.exports = Attachment;

61
Chatdown/lib/chatdown.js Normal file
Просмотреть файл

@ -0,0 +1,61 @@
const Activity = require('./activity');
const ActivityType = require('./activityType');
const ActivityField = require('./activityField');
const Attachment = require('./attachment');
module.exports = async function readFileContents(fileContents) {
const activities = [];
let currentActivity;
let aggregate = '';
let len = fileContents.length;
let i = 0;
for (; i < len; i++) {
const char = fileContents.charAt(i);
if (char !== '[') {
aggregate += char;
continue;
}
if (aggregate && currentActivity) {
currentActivity.message = aggregate.trim();
aggregate = '';
}
const { index, activity } = await readActivity(++i, fileContents);
i = index;
currentActivity = activity;
activities.push(activity);
}
return activities;
};
async function readActivity(index, fileContents) {
let len = fileContents.length;
let activity = new Activity();
let aggregate = '';
for (; index < len; index++) {
const char = fileContents.charAt(index);
if (char === ']') {
break;
}
aggregate += char;
}
const [ typeOrField, ...rest ] = aggregate.split(':');
const type = ActivityType[ typeOrField ];
if (type) {
activity.type = type;
}
const field = ActivityField[ typeOrField ];
if (field === ActivityField.Attachments) {
let [ contentType, content ] = rest;
if (contentType.includes('json')) {
try {
content = JSON.parse(content);
} catch (e) {
throw new Error(`The attachment contentType was "${contentType}" but the contents failed to parse correctly.`);
}
}
activity.attachments.push(new Attachment({ contentType, content }));
}
return { index, activity };
}

Просмотреть файл

62
Chatdown/package-lock.json сгенерированный Normal file
Просмотреть файл

@ -0,0 +1,62 @@
{
"name": "chatdown",
"version": "0.0.1",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"ansi-styles": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
"integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
"requires": {
"color-convert": "1.9.1"
}
},
"chalk": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz",
"integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==",
"requires": {
"ansi-styles": "3.2.0",
"escape-string-regexp": "1.0.5",
"supports-color": "5.2.0"
}
},
"color-convert": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
"integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
"requires": {
"color-name": "1.1.3"
}
},
"color-name": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
},
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
},
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
},
"minimist": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
},
"supports-color": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz",
"integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==",
"requires": {
"has-flag": "3.0.0"
}
}
}
}

29
Chatdown/package.json Normal file
Просмотреть файл

@ -0,0 +1,29 @@
{
"name": "chatdown",
"version": "0.0.1",
"description": "Tool for parsing chat files and outputting replayable activities",
"main": "lib/chatdown.js",
"directories": {
"doc": "docs"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git+https://github.com/Microsoft/botbuilder-tools.git"
},
"author": "Microsoft",
"license": "ISC",
"bugs": {
"url": "https://github.com/Microsoft/botbuilder-tools/issues"
},
"homepage": "https://github.com/Microsoft/botbuilder-tools#readme",
"dependencies": {
"chalk": "^2.3.1",
"minimist": "^1.2.0"
},
"bin": {
"chatdown": "./bin/chatdown.js"
}
}

Просмотреть файл

16
Chatdown/sample.chat Normal file
Просмотреть файл

@ -0,0 +1,16 @@
[Message:LulaBot] Hi!
[Message:Joe] yo!
[Typing:LulaBot:3000]
[Message:LulaBot] Greetings!
What would you like to do?
* update - You can update your account
* List - You can list your data
* help - you can get help
[Message:Joe] I need help
[Message:LulaBot]
Here you go.
[Attachments:LulaBot:content-type/json:{"imageUrl":"http://someimageurl"}]