남우성

Merge branch 'release3.0'

1 +config.json
...\ No newline at end of file ...\ No newline at end of file
...@@ -23,7 +23,7 @@ module.exports = { ...@@ -23,7 +23,7 @@ module.exports = {
23 23
24 let info_island = []; 24 let info_island = [];
25 let info_contents = []; 25 let info_contents = [];
26 - let All_contents = ["유령선", "카오스게이트", "필드 보스"]; 26 + let All_contents = ["유령선", "카오스 게이트"];
27 const $IslandList = $("ul.today-quest-list").children("li.list"); 27 const $IslandList = $("ul.today-quest-list").children("li.list");
28 const $ContentList = $("ul.item-list").children("li.list"); 28 const $ContentList = $("ul.item-list").children("li.list");
29 29
......
1 +const { SlashCommandBuilder } = require('@discordjs/builders');
2 +const { MessageEmbed } = require('discord.js');
3 +const axios = require("axios");
4 +const cheerio = require("cheerio");
5 +
6 +module.exports ={
7 + data: new SlashCommandBuilder()
8 + .setName('공략')
9 + .setDescription('로스트아크 인벤의 군단장 레이드 공략 글 정보를 소개합니다.')
10 + .addStringOption((option) =>
11 + option.setName('레이드')
12 + .setDescription('군단장 레이드 이름')
13 + .setRequired(true)
14 + .addChoices({ name: "발탄", value: "발탄"})
15 + .addChoices({ name: "비아키스", value: "비아키스"})
16 + .addChoices({ name: "쿠크세이튼", value: "쿠크세이튼"})
17 + .addChoices({ name: "아브렐슈드", value: "아브렐슈드"})),
18 + async execute(interaction){
19 + const rade_name = interaction.options.getString('레이드');
20 +
21 + const getHtml = async() => {
22 + try {
23 + return await axios.get("https://lostark.inven.co.kr/")
24 + } catch (error){
25 + console.error(error);
26 + }
27 + }
28 +
29 + await getHtml()
30 + .then(html => {
31 + const $ = cheerio.load(html.data);
32 +
33 + const $radeList = $("div.menu_item01 div.item_body ul.list").children("li.row");
34 +
35 + let rade_info = [];
36 + let rade_url = [];
37 +
38 + $radeList.each(function(i, elem){
39 + if($(this).text().indexOf(rade_name) != -1){
40 + rade_info.push($(this).text());
41 + rade_url.push($(this).find('a').attr('href'));
42 + }
43 + })
44 +
45 + let rade_print = "";
46 +
47 + for(var i = 0; i < rade_info.length; i++){
48 + rade_print += `[${rade_info[i]}](${rade_url[i]})\n`;
49 + }
50 +
51 + const guideembed = new MessageEmbed()
52 + .setColor('#6FF3E0')
53 + .setTitle("공략 정보")
54 + .setDescription(rade_print)
55 +
56 + interaction.reply({ embeds: [guideembed], allowedMentions: {repliedUser: false} });
57 + })
58 + }
59 +}
...\ No newline at end of file ...\ No newline at end of file
...@@ -24,7 +24,9 @@ module.exports = { ...@@ -24,7 +24,9 @@ module.exports = {
24 .addField('/정보 <닉네임>', '전투정보실 조회', true) 24 .addField('/정보 <닉네임>', '전투정보실 조회', true)
25 .addField('/로아와 <닉네임>', '로아와 조회', true) 25 .addField('/로아와 <닉네임>', '로아와 조회', true)
26 .addField('/나침반', '금일 스케줄 조회', true) 26 .addField('/나침반', '금일 스케줄 조회', true)
27 - .addField('/용어 <단어>', '로스트아크 용어 설명', true); 27 + .addField('/용어 <단어>', '로스트아크 용어 설명', true)
28 + .addField('/각인 <클래스>', '클래스 별 각인 분석 정보 제공', true)
29 + .addField('/공략 <레이드>', '군단장 레이드 공략 글 정보 제공', true);
28 await interaction.reply({embeds: [helpEmbed], allowedMentions: {repliedUser: false}}); 30 await interaction.reply({embeds: [helpEmbed], allowedMentions: {repliedUser: false}});
29 } else if(helpCommand === "도움") { 31 } else if(helpCommand === "도움") {
30 const helpEmbed = new MessageEmbed() 32 const helpEmbed = new MessageEmbed()
...@@ -65,9 +67,21 @@ module.exports = { ...@@ -65,9 +67,21 @@ module.exports = {
65 } else if(helpCommand === "용어"){ 67 } else if(helpCommand === "용어"){
66 const helpEmbed = new MessageEmbed() 68 const helpEmbed = new MessageEmbed()
67 .setColor('#0099ff') 69 .setColor('#0099ff')
68 - .setTitle(`/용어 사용방법`) 70 + .setTitle(`/용어 <단어> 사용방법`)
69 .setDescription(`<단어>에 해당하는 로스트아크 용어 설명을 제공합니다.`); 71 .setDescription(`<단어>에 해당하는 로스트아크 용어 설명을 제공합니다.`);
70 await interaction.reply({embeds: [helpEmbed], allowedMentions: {repliedUser: false}}); 72 await interaction.reply({embeds: [helpEmbed], allowedMentions: {repliedUser: false}});
73 + } else if(helpCommand === "각인"){
74 + const helpEmbed = new MessageEmbed()
75 + .setColor('#0099ff')
76 + .setTitle(`/각인 <클래스> 사용방법`)
77 + .setDescription(`<클래스>에 해당하는 로아와 상위 20명의 각인 정보를 분석하고 제공합니다.`);
78 + await interaction.reply({embeds: [helpEmbed], allowedMentions: {repliedUser: false}});
79 + } else if(helpCommand === "공략") {
80 + const helpEmbed = new MessageEmbed()
81 + .setColor('#0099ff')
82 + .setTitle(`/공략 <레이드> 사용방법`)
83 + .setDescription(`<레이드>에 해당하는 로스트아크 인벤 사이트의 공략 글 정보를 제공합니다.`);
84 + await interaction.reply({embeds: [helpEmbed], allowedMentions: {repliedUser: false}});
71 } else { 85 } else {
72 await interaction.reply("해당 명령어는 없습니다."); 86 await interaction.reply("해당 명령어는 없습니다.");
73 } 87 }
......
1 -{
2 - "clientId": "951774447977771068",
3 - "token": "OTUxNzc0NDQ3OTc3NzcxMDY4.YisXBw.GRzmw_os4hM2yHsEqTl5CyQN30A",
4 - "guildIds": ["951774261612265522", "915096999152484393", "917734102466195507"]
5 -}
...\ No newline at end of file ...\ No newline at end of file
...@@ -20,11 +20,22 @@ const rest = new REST({ version: "9" }).setToken(token); ...@@ -20,11 +20,22 @@ const rest = new REST({ version: "9" }).setToken(token);
20 (async () => { 20 (async () => {
21 guildIds.map(async (guildId) => { 21 guildIds.map(async (guildId) => {
22 try { 22 try {
23 - await rest.put(Routes.applicationGuildCommands(clientId, guildId), {body: commands}); 23 + await rest.put(Routes.applicationGuildCommands(clientId, guildId), {body: {}});
24 console.log(`${guildId} 서버 성공`); 24 console.log(`${guildId} 서버 성공`);
25 } 25 }
26 catch (error) { 26 catch (error) {
27 console.error(error); 27 console.error(error);
28 } 28 }
29 }); 29 });
30 +
31 + try {
32 + await rest.put(
33 + Routes.applicationCommands(clientId),
34 + { body: commands },
35 + );
36 + console.log('글로벌 커맨드 등록 성공');
37 + } catch (error) {
38 + console.error(error);
39 + }
40 +
30 })(); 41 })();
...\ No newline at end of file ...\ No newline at end of file
......