diff --git a/commands/cowsay.js b/commands/cowsay.js index 56fe807..b9734a9 100644 --- a/commands/cowsay.js +++ b/commands/cowsay.js @@ -52,7 +52,7 @@ exports.run = async (message, args) => { ]; if (args.length === 0) { return `${message.author.mention}, you need to provide some text for the cow to say!`; - } else if (cowList.indexOf(args[0].toLowerCase()) > -1) { + } else if (cowList.includes(args[0].toLowerCase())) { const cow = args.shift().toLowerCase(); return `\`\`\`\n${cowsay.say({ text: args.join(" "), diff --git a/commands/spam.js b/commands/spam.js index e8952b1..9f5add1 100644 --- a/commands/spam.js +++ b/commands/spam.js @@ -1,5 +1,5 @@ exports.run = async (message, args) => { if (args.length === 0) return `${message.author.mention}, you need to provide what you want to spam!`; - if (message.content.indexOf("@everyone") > -1 || message.content.indexOf("@here") > -1) return "I don't know about you, but that seems like a bad idea."; + if (message.content.includes("@everyone") || message.content.includes("@here")) return "I don't know about you, but that seems like a bad idea."; return args.join(" ").repeat(500).substring(0, 500); }; \ No newline at end of file diff --git a/commands/tags.js b/commands/tags.js index cfb127f..e6ac2a0 100644 --- a/commands/tags.js +++ b/commands/tags.js @@ -10,7 +10,7 @@ exports.run = async (message, args) => { switch (args[0].toLowerCase()) { case "add": if (args[1] === undefined) return `${message.author.mention}, you need to provide the name of the tag you want to add!`; - if (blacklist.indexOf(args[1].toLowerCase()) > -1) return `${message.author.mention}, you can't make a tag with that name!`; + if (blacklist.includes(args[1].toLowerCase())) return `${message.author.mention}, you can't make a tag with that name!`; if (tags.has(args[1].toLowerCase())) return `${message.author.mention}, this tag already exists!`; await setTag(args.slice(2).join(" "), args[1].toLowerCase(), message, guild); return `${message.author.mention}, the tag \`${args[1].toLowerCase()}\` has been added!`; diff --git a/commands/xkcd.js b/commands/xkcd.js index 33dffc6..c7f3ea3 100644 --- a/commands/xkcd.js +++ b/commands/xkcd.js @@ -2,18 +2,22 @@ const fetch = require("node-fetch"); exports.run = async (message, args) => { const url = args.length > 0 && args[0].match(/^\d+$/) ? `http://xkcd.com/${args[0]}/info.0.json` : "http://xkcd.com/info.0.json"; - const request = await fetch(url); - const json = await request.json(); - const embed = { - "embed": { - "title": json.safe_title, - "url": `https://xkcd.com/${json.num}`, - "color": 16711680, - "description": json.alt, - "image": { - "url": json.img + try { + const request = await fetch(url); + const json = await request.json(); + const embed = { + "embed": { + "title": json.safe_title, + "url": `https://xkcd.com/${json.num}`, + "color": 16711680, + "description": json.alt, + "image": { + "url": json.img + } } - } - }; - return message.channel.createMessage(embed); + }; + return message.channel.createMessage(embed); + } catch { + return `${message.author.mention}, I couldn't find that XKCD!`; + } }; \ No newline at end of file diff --git a/events/messageCreate.js b/events/messageCreate.js index 84b4f84..441e61c 100644 --- a/events/messageCreate.js +++ b/events/messageCreate.js @@ -17,25 +17,20 @@ module.exports = async (message) => { // xp stuff const xp = (await database.xp.find({ id: message.channel.guild.id }).exec())[0]; - if (xp.enabled === true) { - //console.log(xp.members); + if (xp.enabled === true && !message.member.roles.includes("631290345824714762")) { const info = xp.members.get(message.author.id); if (!info) { logger.log("Member not in XP database, adding"); const memberInfo = { - xpAmount: 1, + xpAmount: 10, level: 0 }; xp.members.set(message.author.id, memberInfo); await xp.save(); } else { - let newLevel; const newAmount = info.xpAmount + 10; - //xp.members[message.author.id].xpAmount++; const level = Math.floor(0.1 * Math.sqrt(newAmount)); if (info.level < level) { - newLevel = info.level++; - //xp.members[message.author.id].level++; logger.log(`${message.author.username} has leveled up`); if (message.channel.guild.id === "631290275456745502" && level === 5) { await message.author.addRole("638759280752853022", "level 5"); @@ -52,14 +47,14 @@ module.exports = async (message) => { } xp.members.set(message.author.id, { xpAmount: newAmount, - level: newLevel ? newLevel : info.level + level: level }); await xp.save(); } } // ignore other stuff - if (message.content.startsWith(prefix) === false && message.mentions.indexOf(client.user) <= -1 && message.channel.id !== "573553254575898626" && (!message.content.match(/https?:\/\/(media|cdn)\.discordapp\.(net|com)\/attachments\/596766080014221373\/606176845871972383\/1561668913236-3.gif/))) return; + if (message.content.startsWith(prefix) === false && !message.mentions.includes(client.user) && message.channel.id !== "573553254575898626") return; // funny stuff if (message.channel.id === "573553254575898626" && message.channel.guild.id === "433408970955423765") { @@ -75,12 +70,6 @@ module.exports = async (message) => { await client.createMessage(generalChannel.id, message.content); } } - // || (message.attachments && message.attachments[0].filename === "1561668913236-3.gif") - if (message.channel.guild.id === "322114245632327703" && (message.content.match(/https?:\/\/(media|cdn)\.discordapp\.(net|com)\/attachments\/596766080014221373\/606176845871972383\/1561668913236-3.gif/))) { - const odyMessages = ["Nope!", "No jojo gif here", "sorry ody, this gif is illegal", "get owned"]; - await message.delete("anti-jojo mechanism"); - await client.createMessage(message.channel.id, misc.random(odyMessages)); - } // separate commands and args const escapedPrefix = misc.regexEscape(prefix); diff --git a/events/ready.js b/events/ready.js index cc4763d..a070cfa 100644 --- a/events/ready.js +++ b/events/ready.js @@ -49,22 +49,37 @@ module.exports = async () => { })(); // tweet stuff - if (twitter !== null) { + if (twitter !== null && twitter.active === false) { const tweet = async () => { const tweets = (await database.tweets.find({ enabled: true }).exec())[0]; const tweetContent = await misc.getTweet(tweets); - const info = await twitter.client.post("statuses/update", { status: tweetContent }); - logger.log(`Tweet with id ${info.data.id_str} has been tweeted with status code ${info.resp.statusCode} ${info.resp.statusMessage}`); + try { + const info = await twitter.client.post("statuses/update", { status: tweetContent }); + logger.log(`Tweet with id ${info.data.id_str} has been tweeted with status code ${info.resp.statusCode} ${info.resp.statusMessage}`); + } catch (e) { + const error = JSON.stringify(e); + if (error.includes("Status is a duplicate.")) { + logger.log("Duplicate tweet, will retry in 30 minutes"); + } else { + logger.error(e); + } + } }; tweet(); setInterval(tweet, 1800000); + twitter.active = true; const stream = twitter.client.stream("statuses/filter", { track: `@${process.env.HANDLE}` }); stream.on("tweet", async (tweet) => { if (tweet.user.screen_name !== "esmBot_") { const tweets = (await database.tweets.find({ enabled: true }).exec())[0]; - const tweetContent = await misc.getTweet(tweets, true); + let tweetContent; + if (tweet.text.includes("@this_vid") || tweet.text.includes("@DownloaderBot") || tweet.text.includes("@GetVideoBot") || tweet.text.includes("@DownloaderB0t") || tweet.text.includes("@thisvid_")) { + tweetContent = await misc.getTweet(tweet, true, true); + } else { + tweetContent = await misc.getTweet(tweets, true); + } const payload = { status: `@${tweet.user.screen_name} ${tweetContent}`, in_reply_to_status_id: tweet.id_str diff --git a/utils/database.js b/utils/database.js index eb8e885..73e72a5 100644 --- a/utils/database.js +++ b/utils/database.js @@ -22,6 +22,7 @@ const tweetSchema = new mongoose.Schema({ phrases: [String], games: [String], characters: [String], + download: [String], enabled: Boolean }); const TweetCollection = mongoose.model("TweetCollection", tweetSchema); diff --git a/utils/misc.js b/utils/misc.js index 1a586c7..5ed0951 100644 --- a/utils/misc.js +++ b/utils/misc.js @@ -29,16 +29,15 @@ exports.clean = async (text) => { }; // get random tweet to post -exports.getTweet = async (tweets, reply = false) => { - const randomTweet = this.random(reply ? tweets.replies : tweets.tweets); +exports.getTweet = async (tweets, reply = false, isDownload = false) => { + const randomTweet = this.random(reply ? (isDownload ? tweets.download : tweets.replies) : tweets.tweets); if (randomTweet.match("{{message}}")) { - const randomMessage = await this.getRandomMessage(); - return randomTweet.replace("{{message}}", randomMessage); + return randomTweet.replace(/{{message}}/g, await this.getRandomMessage()); } else { - return randomTweet.replace("{{media}}", this.random(tweets.media)) - .replace("{{games}}", this.random(tweets.games)) - .replace("{{phrases}}", this.random(tweets.phrases)) - .replace("{{characters}}", this.random(tweets.characters)); + return randomTweet.replace(/{{media}}/g, this.random(tweets.media)) + .replace(/{{games}}/g, this.random(tweets.games)) + .replace(/{{phrases}}/g, this.random(tweets.phrases)) + .replace(/{{characters}}/g, this.random(tweets.characters)); } }; diff --git a/utils/twitter.js b/utils/twitter.js index 79a4ca0..71bab87 100644 --- a/utils/twitter.js +++ b/utils/twitter.js @@ -6,6 +6,7 @@ const T = new Twit({ access_token_secret: process.env.ACCESS_SECRET }); exports.client = T; +exports.active = false; require("../utils/database.js").tweets.find({ enabled: true }, (error, docs) => { if (error) throw error; exports.tweets = docs[0];