Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
// Initialize using verification token from environment variables
require('dotenv').config();
const PORT = process.env.PORT;
const SLACK_TOKEN = process.env.SLACK_TOKEN;
const EVENT_TOKEN = process.env.EVENT_TOKEN;
const createSlackEventAdapter = require('@slack/events-api').createSlackEventAdapter;
const { WebClient } = require('@slack/client');
const { getUserLocations, mentionedUsers } = require('./slack');
const { isTeamPlaying, getPlayingGames } = require('./footbal');
const { buildNationalTeamPlayingMessage, isCurrentGameQuestion, buildCurrentGamesMessage, buildGenericAnswer } = require('./language');
const web = new WebClient(SLACK_TOKEN);
const slackEvents = createSlackEventAdapter(EVENT_TOKEN);
const sendMessage = (channel, text) => {
web.chat.postMessage({ channel, text }).catch(console.error);
};
slackEvents.on('message', async (event) => {
try {
const userIds = mentionedUsers(event.text);
if (userIds) {
const userDetails = await getUserLocations(SLACK_TOKEN, userIds);
const playingDetails = [];
for (let userDetail of userDetails) {
const isPlaying = await isTeamPlaying(userDetail.country);
if(isPlaying) playingDetails.push(userDetail);
}
if (playingDetails.length > 0) {
function handler(req, res) {
// https://cloud.google.com/functions/docs/writing/http
const body = isOnGoogleCloud() ? req.rawBody.toString() : req.body.toString();
console.log(`Request body: ${body}`);
try {
console.log(`X-Slack-Signature: ${req.get('X-Slack-Signature')}`);
// https://github.com/slackapi/node-slack-events-api/blob/v2.2.0/src/http-handler.js#L22-L58
verifyRequestSignature({
signingSecret: config.SLACK_SIGNING_SECRET,
requestSignature: req.get('X-Slack-Signature'),
requestTimestamp: req.get('X-Slack-Request-Timestamp'),
body: body
});
} catch (verificationErr) {
console.error(`Slack signature validation failed: ${verificationErr}`)
return res.status(401).json({ ok: false });
}
if (body.startsWith('{')) {
// application/json
const payload = JSON.parse(body);
if (payload.type === 'url_verification') {
// ------------------------------------
// Events API: url_verification
require('dotenv').config();
const http = require('http');
const express = require('express');
const bodyParser = require('body-parser');
const slackEventsAPI = require('@slack/events-api');
const slackInteractiveMessages = require('@slack/interactive-messages');
const normalizePort = require('normalize-port');
const bot = require('./lib/bot');
// --- Slack Events ---
const slackEvents = slackEventsAPI.createSlackEventAdapter(process.env.SLACK_VERIFICATION_TOKEN);
bot.getAuthorizedUser();
slackEvents.on('message', (event) => {
// Filter out messages from this bot itself or updates to messages
if (event.subtype === 'bot_message' || event.subtype === 'message_changed' || event.subtype === 'message_deleted') {
return;
}
bot.handleDirectMessage(event.user, event.channel, event.text);
});
// --- Slack Interactive Messages ---
const slackMessages =
slackInteractiveMessages.createMessageAdapter(process.env.SLACK_VERIFICATION_TOKEN);
// Action handling
const bodyParser = require('body-parser');
const WebClient = require('@slack/client').WebClient;
const createSlackEventAdapter = require('@slack/events-api').createSlackEventAdapter;
/**
* Tokens:
* Slack, Firebase, Twilio
*/
// Retrieve bot token from dotenv file
const bot_token = process.env.SLACK_BOT_TOKEN || '';
// Authorization token
const auth_token = process.env.SLACK_AUTH_TOKEN || '';
// Verification token for Events Adapter
const slackEvents = createSlackEventAdapter(process.env.SLACK_VERIFICATION_TOKEN);
// Twilio client authorization
const twilio_sid = process.env.TWILIO_SID || '';
const twilio_auth = process.env.TWILIO_AUTH_TOKEN || '';
/**
* App Configuration:
* Express, BodyParser, Firebase, Events API, Web Clients, Twilio
*/
// Creates our express app
const app = express();
// Use BodyParser for app
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
// Slack events client
// Load environment variables from `.env` file (optional)
require('dotenv').config();
const { createEventAdapter } = require('@slack/events-api');
const { WebClient } = require('@slack/web-api');
const passport = require('passport');
const LocalStorage = require('node-localstorage').LocalStorage;
const SlackStrategy = require('@aoberoi/passport-slack').default.Strategy;
const http = require('http');
const express = require('express');
// *** Initialize event adapter using signing secret from environment variables ***
const slackEvents = createEventAdapter(process.env.SLACK_SIGNING_SECRET, {
includeBody: true
});
// Initialize a Local Storage object to store authorization info
// NOTE: This is an insecure method and thus for demo purposes only!
const botAuthorizationStorage = new LocalStorage('./storage');
// Helpers to cache and lookup appropriate client
// NOTE: Not enterprise-ready. if the event was triggered inside a shared channel, this lookup
// could fail but there might be a suitable client from one of the other teams that is within that
// shared channel.
const clients = {};
function getClientByTeamId(teamId) {
if (!clients[teamId] && botAuthorizationStorage.getItem(teamId)) {
clients[teamId] = new WebClient(botAuthorizationStorage.getItem(teamId));
}
import express from "express";
import { createEventAdapter } from "@slack/events-api";
import interactionController from "../controllers/interaction";
import { getChannel } from "../utils/interactions";
import { isValidChannel, getStyleLog } from "../utils";
const router = express.Router();
const slackEvents = createEventAdapter(process.env.SLACK_SIGNIN_EVENTS);
router.use("/events", slackEvents.expressMiddleware());
const handleEvent = async e => {
const channel = getChannel(e);
if (isValidChannel(channel)) {
if (e.type === "article") {
e.origin = "blog";
}
e.type === "reaction_removed"
? interactionController.remove(e)
: interactionController.save(e);
console.log(getStyleLog("blue"), "\nevent:", e);
} else {
console.log(
const { WebClient } = require('@slack/client');
const { createSlackEventAdapter } = require('@slack/events-api');
module.exports = {
web: new WebClient(process.env.SLACK_ACCESS_TOKEN),
events: createSlackEventAdapter(process.env.SLACK_VERIFICATION_TOKEN),
};