community-relations/mdn.ts

68 lines
3.1 KiB
TypeScript
Raw Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

import { Message } from 'eris';
import axios from 'axios';
import { Client, Command, RichEmbed } from '../class';
export default class Mdn extends Command {
constructor(client: Client) {
super(client);
this.name = 'mdn';
this.description = 'Get information from mdn about JavaScript.';
this.usage = 'mdn <Object>[.property/.method]';
this.permissions = 0;
this.guildOnly = false;
this.enabled = true;
this.aliases = ['js'];
}
public async run(message: Message, args: string[]) {
try {
if (!args[0]) return this.error(message.channel, 'You need to specify an argument.');
args[0] = args[0].replace('.', '.prototype.');
args[0] = args[0].replace('#', '.prototype.');
return axios.get(`https://mdn.pleb.xyz/search?q=${args[0]}`)
.then((res) => {
if (res.status !== 200 || res.statusText !== 'OK') return this.error(message.channel, 'Please try again later, something unexpected happened.');
const { data } = res;
if (!data.Title || !data.Summary || !data.URL) return this.error(message.channel, 'Could not find information. Try something else.');
// Do not touch to the next block of code. Don't even look at it. your brain could stop working
data.Summary = data.Summary.replace(/<code><strong>/g, '<strong><code>');
data.Summary = data.Summary.replace(/<\/strong><\/code>/g, '</code></strong>');
data.Summary = data.Summary.replace(/<code>/g, '`');
data.Summary = data.Summary.replace(/<\/code>/g, '`');
data.Summary = data.Summary.replace(/<strong>/g, '**');
data.Summary = data.Summary.replace(/<\/strong>/g, '**');
const url = data.Summary.match(/<a href=.*>/);
if (url !== null) {
url[0] = url[0].replace('<a href="', '');
url[0] = url[0].replace('</a>', '');
const name = url[0].match(/>.*/);
name[0] = name[0].replace('>', '');
url[0] = url[0].replace(/>.*/, '');
url[0] = url[0].replace('"', '');
const title = url[0].match(/title=".*"/);
if (title !== null) url[0] = url[0].replace(title[0], '');
data.Summary = data.Summary.replace(/<a href=.*>/, `[${name[0]}](https://developer.mozilla.org${url[0]})`);
}
const embed = new RichEmbed();
embed.setAuthor('Mozilla Developer Network', 'https://i.imgur.com/DFGXabG.png', 'https://developer.mozilla.org/en-US');
embed.setTitle(data.Title);
embed.setDescription(data.Summary);
embed.setURL(`developer.mozilla.org${data.URL}`);
embed.setColor(0x066fad);
embed.setFooter(this.client.user.username, this.client.user.avatarURL);
embed.setTimestamp();
return message.channel.createMessage({ embed });
})
.catch((err) => {
this.client.util.handleError(err, message, this);
this.error(message.channel, 'Please try again later, something unexpected happened.');
});
} catch (err) {
return this.client.util.handleError(err, message, this);
}
}
}