728x90
반응형
디스코드 봇을 만들어 /명령어 [지갑주소]를 입력하면 해당 지갑주소를 구글 스프레드시트에 자동으로 추가하는 기능을 구현해야했음.
필요 api : Google API, Discord API
전체 코드
const { Client, Intents, Collection } = require('discord.js');
const { token, spreadsheetId, serverId } = require('./walletConfig.json');
const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILD_MEMBERS] });
const { google } = require('googleapis');
const auth = new google.auth.GoogleAuth({
keyFile: './credentials.json', // 다운로드 받은 인증 정보 경로
scopes: ['https://www.googleapis.com/auth/spreadsheets'],
});
const commandData = {
name: 'addwallet',
description: 'Enter your klaytn wallet address',
options: [{
name: 'wallet_address',
type: 'STRING',
description: 'Enter your Klaytn wallet address',
required: true,
}],
async execute(interaction) {
const { value } = interaction.options.get('wallet_address');
const username = interaction.user.username + '#' + interaction.user.discriminator;
if(username == '' || !value || !/^(0x)?[0-9a-fA-F]{40}$/i.test(value)) {
return await interaction.reply('Invalid Klaytn wallet address!');
} else {
const sheets = google.sheets({ version: 'v4', auth });
const readResponse = await sheets.spreadsheets.values.get({
spreadsheetId,
range: 'ID&Wallet!A:A',
});
const idData = readResponse.data.values.flat();
if(idData.indexOf(username) == -1) {
const writeResponse = await sheets.spreadsheets.values.append({
spreadsheetId,
range: 'ID&Wallet!A:B',
valueInputOption: 'USER_ENTERED',
insertDataOption: 'INSERT_ROWS',
resource: {
values: [[username, value]],
},
});
console.log(`${writeResponse.data.updates.updatedRows} 개의 행이 업데이트되었습니다.`);
} else {
const index = idData.indexOf(username) + 1;
const writeResponse = await sheets.spreadsheets.values.update({
spreadsheetId,
range: `ID&Wallet!A${index}:B${index}`,
valueInputOption: 'USER_ENTERED',
resource: {
values: [[username, value]],
},
});
console.log(`${writeResponse.data.updatedRows} 개의 행이 업데이트되었습니다.`);
}
return await interaction.reply('Add Wallet Success!');
}
}
}
client.commands = new Collection();
let data = [];
client.commands.set(commandData.name, commandData)
data.push({
name: commandData.name,
description: commandData.description,
options: commandData.options
});
client.once('ready', async () => {
console.log(`Logged in as ${client.user.tag}!`);
await client.guilds.cache.get(serverId)?.commands.set(data)
});
client.on('interactionCreate', async interaction => {
if (!interaction.isCommand()) return;
if (!client.commands.has(interaction.commandName)) return
const command = client.commands.get(interaction.commandName);
try {
await command.execute(interaction);
} catch (error) {
console.log(error)
}
})
client.login(`${token}`);
기능 : 명령어를 입력해 지갑 주소를 입력하면 구글 스프레드 시트에 자동으로 ID와 지갑 주소 등록
지갑주소 유효성 검증, 이미 스프레드 시트에 있으면 지갑 주소 수정
상세 코드 분석 나중에 정리 !
반응형
'습득 내용 & 해결 기록 일지' 카테고리의 다른 글
slither - 솔리디티 분석 프레임워크 (0) | 2023.05.24 |
---|---|
vue i18n 다국어 설정 (0) | 2023.05.24 |
rust 시작하기 (0) | 2023.05.18 |
redis 도입 (0) | 2023.04.26 |
react coreui pagination & Search Filter (0) | 2023.04.25 |