Added proper license, removed unused stuff, more twitter bot work
This commit is contained in:
parent
143319a7e2
commit
e1347fcf52
14 changed files with 81 additions and 27 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -37,4 +37,5 @@ bannedusers.json
|
||||||
todo.txt
|
todo.txt
|
||||||
tweets.json
|
tweets.json
|
||||||
.vscode/
|
.vscode/
|
||||||
migratedb.js
|
migratedb.js
|
||||||
|
migratetweets.js
|
21
LICENSE
Normal file
21
LICENSE
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2019 Essem
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
13
commands/addtweet.js
Normal file
13
commands/addtweet.js
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
const db = require("../utils/database.js");
|
||||||
|
|
||||||
|
exports.run = async (message, args) => {
|
||||||
|
if (message.author.id !== process.env.OWNER) return `${message.author.mention}, only the bot owner can add tweets!`;
|
||||||
|
if (args.length === 0) return `${message.author.mention}, you need to provide some text to add to the tweet database!`;
|
||||||
|
if (args[1] === undefined) return `${message.author.mention}, you need to provide the content you want to add!`;
|
||||||
|
const tweets = (await db.tweets.find({ enabled: true }).exec())[0];
|
||||||
|
tweets[args[0]].push(args.slice(1).join(" "));
|
||||||
|
await tweets.save();
|
||||||
|
return `${message.author.mention}, the content has been added.`;
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.aliases = ["add"];
|
|
@ -30,7 +30,7 @@ module.exports = async (message) => {
|
||||||
await xp.save();
|
await xp.save();
|
||||||
} else {
|
} else {
|
||||||
let newLevel;
|
let newLevel;
|
||||||
const newAmount = info.xpAmount + 1;
|
const newAmount = info.xpAmount + 10;
|
||||||
//xp.members[message.author.id].xpAmount++;
|
//xp.members[message.author.id].xpAmount++;
|
||||||
const level = Math.floor(0.1 * Math.sqrt(newAmount));
|
const level = Math.floor(0.1 * Math.sqrt(newAmount));
|
||||||
if (info.level < level) {
|
if (info.level < level) {
|
||||||
|
|
|
@ -44,24 +44,27 @@ module.exports = async () => {
|
||||||
|
|
||||||
// set activity (a.k.a. the gamer code)
|
// set activity (a.k.a. the gamer code)
|
||||||
(async function activityChanger() {
|
(async function activityChanger() {
|
||||||
client.editStatus("dnd", { name: `${misc.random(messages)} | @esmBot help`, url: "https://essem.space/esmBot/commands.html?dev=true" });
|
client.editStatus("dnd", { name: `${misc.random(messages)} | @esmBot help` });
|
||||||
setTimeout(activityChanger, 900000);
|
setTimeout(activityChanger, 900000);
|
||||||
})();
|
})();
|
||||||
|
|
||||||
// tweet stuff
|
// tweet stuff
|
||||||
if (twitter !== null) {
|
if (twitter !== null) {
|
||||||
(async function tweet() {
|
const tweet = async () => {
|
||||||
const tweetContent = await misc.getTweet(twitter);
|
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 });
|
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}`);
|
logger.log(`Tweet with id ${info.data.id_str} has been tweeted with status code ${info.resp.statusCode} ${info.resp.statusMessage}`);
|
||||||
setTimeout(tweet, 1800000);
|
};
|
||||||
})();
|
tweet();
|
||||||
|
setInterval(tweet, 1800000);
|
||||||
const stream = twitter.client.stream("statuses/filter", {
|
const stream = twitter.client.stream("statuses/filter", {
|
||||||
track: `@${process.env.HANDLE}`
|
track: `@${process.env.HANDLE}`
|
||||||
});
|
});
|
||||||
stream.on("tweet", async (tweet) => {
|
stream.on("tweet", async (tweet) => {
|
||||||
if (tweet.user.screen_name !== "esmBot_") {
|
if (tweet.user.screen_name !== "esmBot_") {
|
||||||
const tweetContent = await misc.getTweet(twitter, true);
|
const tweets = (await database.tweets.find({ enabled: true }).exec())[0];
|
||||||
|
const tweetContent = await misc.getTweet(tweets, true);
|
||||||
const payload = {
|
const payload = {
|
||||||
status: `@${tweet.user.screen_name} ${tweetContent}`,
|
status: `@${tweet.user.screen_name} ${tweetContent}`,
|
||||||
in_reply_to_status_id: tweet.id_str
|
in_reply_to_status_id: tweet.id_str
|
||||||
|
|
|
@ -12,9 +12,6 @@
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "git+https://github.com/TheEssem/esmBot.git"
|
"url": "git+https://github.com/TheEssem/esmBot.git"
|
||||||
},
|
},
|
||||||
"scripts": {
|
|
||||||
"report-coverage": "nyc report --reporter=text-lcov > coverage.lcov && codecov"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"bufferutil": "^4.0.1",
|
"bufferutil": "^4.0.1",
|
||||||
"cowsay": "^1.4.0",
|
"cowsay": "^1.4.0",
|
||||||
|
|
|
@ -2,3 +2,4 @@ const { Collection } = require("eris");
|
||||||
|
|
||||||
exports.commands = new Collection();
|
exports.commands = new Collection();
|
||||||
exports.aliases = new Collection();
|
exports.aliases = new Collection();
|
||||||
|
exports.voiceConnections = new Collection();
|
||||||
|
|
|
@ -15,5 +15,17 @@ const xpSchema = new mongoose.Schema({
|
||||||
});
|
});
|
||||||
const XP = mongoose.model("XP", xpSchema);
|
const XP = mongoose.model("XP", xpSchema);
|
||||||
|
|
||||||
|
const tweetSchema = new mongoose.Schema({
|
||||||
|
tweets: [String],
|
||||||
|
replies: [String],
|
||||||
|
media: [String],
|
||||||
|
phrases: [String],
|
||||||
|
games: [String],
|
||||||
|
characters: [String],
|
||||||
|
enabled: Boolean
|
||||||
|
});
|
||||||
|
const TweetCollection = mongoose.model("TweetCollection", tweetSchema);
|
||||||
|
|
||||||
exports.guilds = Guild;
|
exports.guilds = Guild;
|
||||||
exports.xp = XP;
|
exports.xp = XP;
|
||||||
|
exports.tweets = TweetCollection;
|
|
@ -29,15 +29,16 @@ exports.clean = async (text) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
// get random tweet to post
|
// get random tweet to post
|
||||||
exports.getTweet = async (twitter, reply = false) => {
|
exports.getTweet = async (tweets, reply = false) => {
|
||||||
const randomTweet = this.random(reply ? twitter.tweets.replies : twitter.tweets.tweets);
|
const randomTweet = this.random(reply ? tweets.replies : tweets.tweets);
|
||||||
if (randomTweet.match("{{message}}")) {
|
if (randomTweet.match("{{message}}")) {
|
||||||
const randomMessage = await this.getRandomMessage();
|
const randomMessage = await this.getRandomMessage();
|
||||||
return randomTweet.replace("{{message}}", randomMessage);
|
return randomTweet.replace("{{message}}", randomMessage);
|
||||||
} else {
|
} else {
|
||||||
return randomTweet.replace("{{media}}", this.random(twitter.tweets.media))
|
return randomTweet.replace("{{media}}", this.random(tweets.media))
|
||||||
.replace("{{games}}", this.random(twitter.tweets.games))
|
.replace("{{games}}", this.random(tweets.games))
|
||||||
.replace("{{phrases}}", this.random(twitter.tweets.phrases));
|
.replace("{{phrases}}", this.random(tweets.phrases))
|
||||||
|
.replace("{{characters}}", this.random(tweets.characters));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,27 +1,32 @@
|
||||||
const client = require("./client.js");
|
const client = require("./client.js");
|
||||||
const fs = require("fs");
|
const fs = require("fs");
|
||||||
const logger = require("./logger.js");
|
const logger = require("./logger.js");
|
||||||
|
const connections = require("./collections.js").voiceConnections;
|
||||||
|
|
||||||
module.exports = async (sound, message) => {
|
module.exports = async (sound, message) => {
|
||||||
if (message.member.voiceState.channelID) {
|
if (message.member.voiceState.channelID) {
|
||||||
if (!message.channel.guild.members.get(client.user.id).permission.has("voiceConnect") || !message.channel.permissionsOf(client.user.id).has("voiceConnect")) return client.createMessage(message.channel.id, `${message.author.mention}, I can't join this voice channel!`);
|
if (!message.channel.guild.members.get(client.user.id).permission.has("voiceConnect") || !message.channel.permissionsOf(client.user.id).has("voiceConnect")) return client.createMessage(message.channel.id, `${message.author.mention}, I can't join this voice channel!`);
|
||||||
const voiceChannel = message.channel.guild.channels.get(message.member.voiceState.channelID);
|
const voiceChannel = message.channel.guild.channels.get(message.member.voiceState.channelID);
|
||||||
if (!voiceChannel.permissionsOf(client.user.id).has("voiceConnect")) return client.createMessage(message.channel.id, `${message.author.mention}, I don't have permission to join this voice channel!`);
|
if (!voiceChannel.permissionsOf(client.user.id).has("voiceConnect")) return client.createMessage(message.channel.id, `${message.author.mention}, I don't have permission to join this voice channel!`);
|
||||||
|
const checkConnection = connections.get(message.channel.guild.id);
|
||||||
|
const connection = checkConnection ? checkConnection : await voiceChannel.join();
|
||||||
const playingMessage = await client.createMessage(message.channel.id, "🔊 Playing sound...");
|
const playingMessage = await client.createMessage(message.channel.id, "🔊 Playing sound...");
|
||||||
const connection = await client.joinVoiceChannel(voiceChannel.id);
|
connections.set(message.channel.guild.id, connection);
|
||||||
console.log(connection.current);
|
|
||||||
if (connection.playing) {
|
if (connection.playing) {
|
||||||
connection.stopPlaying();
|
connection.stopPlaying();
|
||||||
connection.play(fs.createReadStream(sound));
|
|
||||||
} else {
|
|
||||||
connection.play(fs.createReadStream(sound));
|
|
||||||
}
|
}
|
||||||
|
connection.play(fs.createReadStream(sound));
|
||||||
connection.on("error", (error) => {
|
connection.on("error", (error) => {
|
||||||
|
connections.delete(message.channel.guild.id);
|
||||||
voiceChannel.leave();
|
voiceChannel.leave();
|
||||||
playingMessage.delete();
|
playingMessage.delete();
|
||||||
logger.error(error);
|
logger.error(error);
|
||||||
});
|
});
|
||||||
|
connection.on("warn", (warn) => {
|
||||||
|
logger.warn(warn);
|
||||||
|
});
|
||||||
connection.once("end", () => {
|
connection.once("end", () => {
|
||||||
|
connections.delete(message.channel.guild.id);
|
||||||
voiceChannel.leave();
|
voiceChannel.leave();
|
||||||
playingMessage.delete();
|
playingMessage.delete();
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
const Twit = require("twit");
|
const Twit = require("twit");
|
||||||
const tweets = require("../tweets.json");
|
|
||||||
const T = new Twit({
|
const T = new Twit({
|
||||||
consumer_key: process.env.TWITTER_KEY,
|
consumer_key: process.env.TWITTER_KEY,
|
||||||
consumer_secret: process.env.CONSUMER_SECRET,
|
consumer_secret: process.env.CONSUMER_SECRET,
|
||||||
access_token: process.env.ACCESS_TOKEN,
|
access_token: process.env.ACCESS_TOKEN,
|
||||||
access_token_secret: process.env.ACCESS_SECRET
|
access_token_secret: process.env.ACCESS_SECRET
|
||||||
});
|
});
|
||||||
module.exports = {
|
exports.client = T;
|
||||||
client: T,
|
require("../utils/database.js").tweets.find({ enabled: true }, (error, docs) => {
|
||||||
tweets: tweets
|
if (error) throw error;
|
||||||
};
|
exports.tweets = docs[0];
|
||||||
|
});
|
Loading…
Reference in a new issue