Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
async handleMessage (bot, sender, channel, isDirect, msg) {
// Ignore ourself.
if (sender === bot.identity.id || sender === bot.identity.name) return
const {mbMeta} = bot
const team = bot.identifyTeam()
const shouldLearn = isDirect || mbMeta.ambient // Should we be learning factoids?
const shouldReply = isDirect || !mbMeta.direct // Should we reply to this?
const isVerbose = mbMeta.verbose // TODO: Combine with shouldLearn
// Sometimes Slack sends HTML entities.
msg = Entities.decode(msg)
// Basic input sanitization.
msg = msg.substr(0, MAX_FACTOID_SIZE).trim().replace(/\0/g, '').replace(/\n/g, ' ')
// Simple reply helper.
const reply = text => bot.reply({channel}, {text})
// Used to parse a factoid's contents and reply with it.
const parseAndReply = async (key, value, tell = null) => {
// Factoids are stored as { key: "foo", value: "is bar" }
let [, verb, rest] = Array.from(value.match(/^(is|are)\s+(.*)/i))
value = rest
// Split on |, but don't split on \|. Use an HTML entity as a separator.
value = value.replace(/\\\|/g, '\\|')
value = this.oneOf(value.split(/\|/i)).trim()
const assert = require('assert');
const queryString = require('query-string');
const Entities = require('html-entities').AllHtmlEntities;
const pify = require('pify');
const cheerio = require('cheerio');
const striptags = require('striptags');
const forOwn = require('lodash.forown');
const es6Promise = require('es6-promise');
es6Promise.polyfill();
const isoFetch = require('isomorphic-fetch');
let parseString = require('xml2js').parseString;
const entities = new Entities();
const decode = entities.decode;
parseString = pify(parseString);
const flattenArticles = article => {
let flattenObj = {};
forOwn(article, (value, key) => {
// omit guid
if (key === 'guid') {
return;
}
const mergeObj = {};
mergeObj[key] = value[0];
flattenObj = Object.assign(flattenObj, mergeObj);
});
return flattenObj;
CONVERSATION_SUCCESS,
CONVERSATION_ID_REQUEST,
CONVERSATIONS_REQUEST,
CONVERSATIONS_SUCCESS,
MESSAGE_SUCCESS,
MESSAGE_READ,
WEBSOCKET_MESSAGE,
CONVERSATION_ID_SUCCESS,
BELLS_SUCCESS
} from '../common/constants'
import { MessageType, Bell } from '../common/typings'
import { Actions } from 'react-native-router-flux'
const entities = new AllHtmlEntities()
,countUnread = (conversations: any[]) =>
conversations.reduce(
(num, conversation) => num + (conversation.unread !== "0" ? 1 : 0),
0
)
function* fetch() {
try {
// Pull the conversations from the API
const conversations = yield getConversations()
// Decode HTML entities before the content gets into the hands of any other method
for (const conversation of conversations)
conversation.last_message = entities.decode(conversation.last_message)
// ... and publish it on the bus
const cheerio = require('cheerio');
const Entities = require('html-entities').AllHtmlEntities;
const entities = new Entities();
const TITLE = /^H[123456]$/;
const POINTLESS_P = /<p><br><\/p>/g;
const RAW_IFRAME = /]*>[^<]*<\/iframe>/g;
function getImageOrientation(width, height) {
if (!width || !height)
return 'paysage';
// TODO: What about squares?
// TODO: keep with and height to help with browser rendering
return width >= height ? 'paysage' : 'portrait';
}
function getImageClassName(format, width, height, even) {</p>
const urlUtils = require('lib/urlUtils.js');
const Entities = require('html-entities').AllHtmlEntities;
const htmlentities = new Entities().encode;
// [\s\S] instead of . for multiline matching
// https://stackoverflow.com/a/16119722/561309
const imageRegex = //gi;
const anchorRegex = //gi;
class HtmlUtils {
headAndBodyHtml(doc) {
const output = [];
if (doc.head) output.push(doc.head.innerHTML);
if (doc.body) output.push(doc.body.innerHTML);
return output.join('\n');
}
extractImageUrls(html) {
if (!html) return [];
import * as md5 from 'md5';
import { Component, AfterContentInit } from '@angular/core';
import { RichEditor, INLINE_STYLES, BLOCK_TYPES } from '../../../angular-draft-js/editors/rich';
import * as html from 'html';
import { js_beautify } from 'js-beautify';
import { AllHtmlEntities } from 'html-entities';
const htmlEntities = new AllHtmlEntities();
// In these strings whitespace and linebreaks are important,
// as they will be rendered inside of a <pre>.
const configHead = htmlEntities.encode(`@Component({template: \`
`);
const configFoot = htmlEntities.encode(`\`})
class NgxDraftDemo {
`);
</pre>
game[id].correctId = 0;
}
else {
// Sort the answers in reverse alphabetical order.
answers.sort();
answers.reverse();
for(var i = 0; i <= answers.length-1; i++) {
answers[i] = answers[i].toString();
if(answers[i] === correct_answer) {
game[id].correctId = i;
}
answerString = `${answerString}**${Letters[i]}:** ${entities.decode(answers[i])}${getConfigVal("debug-mode")&&i===game[id].correctId?" *(Answer)*":""}\n`;
}
}
var categoryString = entities.decode(question.category);
var timer = getConfigVal("round-length", channel);
if(gameMode === 2) {
// Hangman games get an extra ten seconds for balance.
timer = timer+10000;
}
var infoString = "";
if(!scheduled) {
infoString = "\n";
Trivia.parseAnswerHangman = function(str, id, userId, username, scoreValue) {
var input = str.toLowerCase();
// Decode and remove all non-alphabetical characters
var answer = entities.decode(game[id].answer).toLowerCase().replace(/\W/g, "");
// Return -1 if the input is a command.
// If the input is much longer than the actual answer, assume that it is not an attempt to answer.
if(input.startsWith(getConfigVal("prefix", id)) || input.length > answer.length*2) {
return -1;
}
if(input.replace(/\W/g, "") === answer) {
return Trivia.parseAnswer(Letters[game[id].correctId], id, userId, username, scoreValue);
}
else {
// The string doesn't match, so we'll pass the first incorrect answer.
var incorrect = Letters.slice(0); // Copy to avoid modifying it
incorrect.splice(game[id].correctId, 1);
return Trivia.parseAnswer(incorrect[0], id, userId, username, scoreValue);
}
case "hard":
color = 14164000;
break;
}
}
game[id].color = color;
var answerString = "";
if(gameMode === 2) {
var answer = entities.decode(correct_answer);
var obscuredAnswer = createObscuredAnswer(answer);
answerString = obscuredAnswer;
if(getConfigVal("debug-mode")) {
answerString = `${answerString} *(Answer: ${entities.decode(correct_answer)})*`;
}
game[id].correctId = 0;
}
else {
// Sort the answers in reverse alphabetical order.
answers.sort();
answers.reverse();
for(var i = 0; i <= answers.length-1; i++) {
answers[i] = answers[i].toString();
if(answers[i] === correct_answer) {
game[id].correctId = i;
}
function Player(roomName, descriptorUrl, uuid, discovery) {
var _this = this;
var positionInfoTimeout;
//var sids = {};
var subscriptions = {};
var xmlEntities = new XmlEntities();
// for prototype access
this.discovery = discovery;
this.address = descriptorUrl.replace(/http:\/\/([\d\.]+).*/, "$1");
this.roomName = xmlEntities.decode(roomName);
this.zoneType = 0;
this.uuid = uuid;
this.state = {
currentTrack: {
artist: "",
title: "",
album: "",
albumArtURI: "",
duration: 0,
uri: ""
},
nextTrack: {