forked from GeorgeCiesinski/poke-guesser-bot
-
Notifications
You must be signed in to change notification settings - Fork 0
/
util.js
126 lines (113 loc) · 3.81 KB
/
util.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
const { EmbedBuilder, AttachmentBuilder } = require("discord.js");
/*
UTILITIES
*/
// Wraps reply in poke-guesser themed embed
function returnEmbed(title, message, color=0x00AE86, image=null) {
// Creates new embedded message
let embed = new EmbedBuilder()
.setTitle(title) // Adds title
.setAuthor({
name: 'POKé-GUESSER BOT',
url: 'https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/items/poke-ball.png',
iconURL: 'https://github.com/GeorgeCiesinski/poke-guesser-bot'
})
.setColor(0x00AE86)
.setDescription(message) // Adds message
.setThumbnail('https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/items/master-ball.png')
.setFooter({
text: 'By borreLore, Wissididom and Valley Orion',
iconURL: 'https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/items/great-ball.png'
});
if (image) {
const attachment = new AttachmentBuilder(image, { name: 'pokemon.png' });
embed.setImage('attachment://pokemon.png');
return {
embed,
attachment
}
} else {
return embed;
}
}
// Capitalizes first letter of pokemon name
function capitalize(string){
return string[0].toUpperCase() + string.slice(1).toLowerCase();
}
// Finds the GuildMember by User-IDs (either string or array)
function findMember(client, ids) {
// Return member or undefined if not found (force specifies if cache should be checked)
// I could have omitted the force property, but i have put it there to make it clear
return message.guild.members.fetch({ user: ids, force: false});
}
// Finds the User by User-ID
function findUser(client, id) {
return findMember(client, id).then((member) => {
// If member found, return member, else return null
if (member) {
console.log(`User ID ${id} found in guild.`);
return member.user;
} else {
console.log(`WARNING: User ID ${id} not found in guild.`);
return null;
}
});
}
// Checks if the User is the Server Owner or has the Administrator Permission
function isAdmin(member) {
return member.id == member.guild.ownerId || member.permissions.has(Permissions.FLAGS.ADMINISTRATOR);
}
function isUser(mentionable) {
return mentionable.hoist == undefined;
}
function isRole(mentionable) {
return !isUser(mentionable);
}
function generatePokemon() {
// Fetch json of all available pokemon up to a limit of 2000 (~1200 available)
return fetch('https://pokeapi.co/api/v2/pokemon/?limit=2000').then(res => {
return res.json(); // Parse json
}).then(json => {
return json.results; // Extract results
}).then(resultList => {
return resultList[Math.floor(Math.random() * resultList.length)]; // Return random item from list
});
}
// Fetches the sprite using the pokemon's api url
function fetchSprite(url) {
return fetch(url).then(res => {
return res.json(); // Parse json
}).then(json => {
return json.sprites; // returns an array of urls for the sprites
});
}
// Fetches the pokemon's names in different languages
function fetchNames(nameOrId) {
return fetch(`https://pokeapi.co/api/v2/pokemon-species/${nameOrId}/`).then(res => {
return res.json(); // Parse json
}).then(json => {
return json.names; // Get names as array
}).then(names => {
let resultNames = [];
for (let i = 0; i < names.length; i++) {
resultNames.push({
languageName: names[i].language.name,
languageUrl: names[i].language.url,
name: names[i].name
});
}
return resultNames;
}).catch(err => {
// For example id 10220 returns 404 Not Found
});
}
module.exports.returnEmbed = returnEmbed;
module.exports.capitalize = capitalize;
module.exports.findMember = findMember;
module.exports.findUser = findUser;
module.exports.isAdmin = isAdmin;
module.exports.isUser = isUser;
module.exports.isRole = isRole;
module.exports.generatePokemon = generatePokemon;
module.exports.fetchSprite = fetchSprite;
module.exports.fetchNames = fetchNames;