Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Set up ESLint #1

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
language: node_js
node_js: node
script: npm run lint
88 changes: 33 additions & 55 deletions bot.js
Original file line number Diff line number Diff line change
@@ -1,78 +1,57 @@
'use strict';
"use strict";

import dotenv from 'dotenv';
import dotenv from "dotenv";
// Reads .env file and sets environment variables
dotenv.config();


import Discord from 'discord.js';
import moment from 'moment';
import commander from 'commander';
import Discord from "discord.js";
import moment from "moment";
import commander from "commander";

import {promises as fs} from 'fs';

import {findAllMemberJoinDates} from './member-join-dates.js';
import {subscribeImposterData} from "./imposter.js";
import {performRoleAudit} from "./role-audit.js";
import { subscribeImposterData } from "./imposter.js";

// I don't know what this person is doing differently from every other node module...
import stringArgv from 'string-argv';
import stringArgv from "string-argv";
const createArgvArray = stringArgv.parseArgsStringToArgv;


const snakeroomServerID = '429823323585773568';
const welcomeChannelID = '429829794897723403';
const imposterUpdatesChannelID = '694974723154640978';
const snakeroomServerID = "429823323585773568";
const imposterUpdatesChannelID = "694974723154640978";

const sneklingRoleID = '560999332002922506';
const originalSnekRoleID = '692180758311469077';
const veteran19RoleID = '692180904239431711';
const trustedRoleID = '688762713756926032';
const developerRoleID = '562359091196854282';
const trustedDeveloperRoleID = '692180684218826752';
const sneklingRoleID = "560999332002922506";
const originalSnekRoleID = "692180758311469077";
const veteran19RoleID = "692180904239431711";
const trustedRoleID = "688762713756926032";
const developerRoleID = "562359091196854282";
const trustedDeveloperRoleID = "692180684218826752";

const allRoleIDs = [
sneklingRoleID,
originalSnekRoleID,
veteran19RoleID,
trustedRoleID,
developerRoleID,
trustedDeveloperRoleID
trustedDeveloperRoleID,
];

const melissaMemberID = '430911637948727296';

const today = moment();
const ogSnekCutoffDate = new Date('2018-05-17');
const vet19CutoffDate = new Date('2019-04-05');
const sixMonthsAgo = today.subtract(6, 'months');
const melissaMemberID = "430911637948727296";

let Snakeroom = null;
let imposterUpdateChannel = null;

// set up DRY access to roles prior to the bot logging in and knowing about them.
// Set up DRY access to roles prior to the bot logging in and knowing about them.
const rolesMap = new Map();


const RoleAction = Object.freeze({add: 1, remove: 2});

const roleAuditMethodMap = new Map();
const roleAuditRuleMap = new Map();

export const bot = new Discord.Client();

const usersWhoTriedIt = [];

const getRoleByName = (guild, roleName) => {
return guild.roles.cache.find(role => role.name === roleName);
};


const timestampLog = (message) => {
console.log(`[${moment().format('YYYY-MM-DD HH:mm:ss.SSS')}] ${message}`);
const timestampLog = message => {
process.stdout.write(`[${moment().format("YYYY-MM-DD HH:mm:ss.SSS")}] ${message}\n`);
};

bot.on('ready', () => {
bot.on("ready", () => {
timestampLog(`Logged in as ${bot.user.tag}`);
Snakeroom = bot.guilds.resolve(snakeroomServerID);

Expand All @@ -87,45 +66,44 @@ bot.on('ready', () => {
});


const onNewImposterUpdate = (updateData) => {
const onNewImposterUpdate = updateData => {
sendImposterUpdate(imposterUpdateChannel, updateData);
};

const sendImposterUpdate = (channel, update) => {
channel.send(update);
//console.log(update);
};

const extractCommandString = (inputMessage) => {
const extractCommandString = inputMessage => {
let matchResult = inputMessage.match(/^rs\s+(?<commandString>.*)/);
if (matchResult) {
matchResult = matchResult.groups.commandString;
}
return matchResult;
};

bot.on('message', inputMessage => {
bot.on("message", inputMessage => {
const commandString = extractCommandString(inputMessage.content);
if (commandString) {
commander.parse(createArgvArray(commandString), {from: 'user'});
commander.parse(createArgvArray(commandString), { from: "user" });
const senderMemberID = inputMessage.member.id;
if(senderMemberID === melissaMemberID) {
inputMessage.channel.send('Hi Melissa.')
.then(response => console.log(`Responded to '${inputMessage.content}'.`))
.catch(console.error);
inputMessage.channel.send("Hi Melissa.")
.then(() => process.stdout.write(`Responded to '${inputMessage.content}'.\n`))
.catch(error => process.stderr.write(error + "\n"));
} else {
inputMessage.react('❌');
inputMessage.react("❌");
if (!(senderMemberID in usersWhoTriedIt)) {
usersWhoTriedIt.push(senderMemberID);
message.channel.send('Only Melissa can use me rn.')
.then(response => console.log(`${inputMessage.member.displayName} tried it!`))
.catch(console.error);
inputMessage.channel.send("Only Melissa can use me rn.")
.then(() => process.stdout.write(`${inputMessage.member.displayName} tried it!\n`))
.catch(error => process.stderr.write(error + "\n"));
}
}
}
});

/*/
/* /
commander
.command('audit-roles')
.description('Run a role audit to ensure user roles make sense')
Expand Down
22 changes: 2 additions & 20 deletions imposter.js
Original file line number Diff line number Diff line change
@@ -1,27 +1,9 @@
'use strict';

import fetch from 'node-fetch';
"use strict";

const subscriberCallbackList = [];

const newResultsEndpoint = `${process.env.SNEKNET_API}y20/recent/`;

export const subscribeImposterData = (subCallback) => {
export const subscribeImposterData = subCallback => {
if (!subscriberCallbackList.find(subCallback)) {
subscriberCallbackList.push(subCallback);
}
};

const pollForNewResults = () => {
fetch(newResultsEndpoint)
.then(response => response.json())
.then(console.log)
.then(parsedData => {
for (const subscriberCallback of subscriberCallbackList) {
subscriberCallback(parsedData);
}
})
.catch(console.error);
};

//setInterval(pollForNewResults, 1000);
33 changes: 16 additions & 17 deletions member-join-dates.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,11 @@
'use strict';


const guildMemberJoin = 'GUILD_MEMBER_JOIN';
"use strict";

const memberJoinDates = new Map();

const updateMemberJoinDate = (message) => {
const updateMemberJoinDate = message => {
let memberID;
// TODO: Actually add reading Dyno's Join notifs
if (message.author === 'DYNO') {

} else {
if (message.author !== "DYNO") {
const member = message.channel.guild.member(message.author);
if (member) {
memberID = member.id;
Expand All @@ -21,51 +16,55 @@ const updateMemberJoinDate = (message) => {
memberJoinDates.set(memberID, newMessageTimestamp);
}
} else {
memberJoinDates.set(memberID, newMessageTimestamp)
memberJoinDates.set(memberID, newMessageTimestamp);
}
}
}
};

const updateAllMemberJoinDates = async (channel, searchBeforeMessage=null) => {
if (searchBeforeMessage===null) {
const listOfOneMessage = await channel.messages.fetch({limit: 1});
const updateAllMemberJoinDates = async (channel, searchBeforeMessage = null) => {
if (searchBeforeMessage === null) {
const listOfOneMessage = await channel.messages.fetch({ limit: 1 });
if (listOfOneMessage.size > 0) {
updateMemberJoinDate(listOfOneMessage.last());
return updateAllMemberJoinDates(channel, listOfOneMessage.last());
}
} else {
let nextMessageBatch = await channel.messages.fetch({limit: 100, before: searchBeforeMessage.id});
let nextMessageBatch = await channel.messages.fetch({
before: searchBeforeMessage.id,
limit: 100,
});

if (nextMessageBatch.size > 0) {
/* eslint-disable-next-line no-unused-vars */
for (const [messageID, message] of nextMessageBatch) {
updateMemberJoinDate(message);
}

const earliestFetchedMessage = nextMessageBatch.last();
nextMessageBatch = null;

//console.log(earliestFetchedMessage.id);
return updateAllMemberJoinDates(channel, earliestFetchedMessage);
}
}
};

export const findAllMemberJoinDates = async (guild) => {
export const findAllMemberJoinDates = async guild => {

guild.members.cache.each(member => {
memberJoinDates.set(member.id, member.joinedTimestamp);
});

const guildTextChannels = guild.channels.cache.filter(channel => channel.type === 'text');
const guildTextChannels = guild.channels.cache.filter(channel => channel.type === "text");


const memberJoinDatePromises = [];
/* eslint-disable-next-line no-unused-vars */
for (const [channelID, channel] of guildTextChannels) {
memberJoinDatePromises.push(updateAllMemberJoinDates(channel));
}

await Promise.all(memberJoinDatePromises);

return memberJoinDates;
};
};
Loading