Open Ryan-Dia opened 1 year ago
로직 분리 리팩터링 파트 분배를 정해야하지 않을까 생각합니다~
release note 적는거 좋다고 생각해요~
https://github.com/CorwinDev/Discord-Bot/tree/main/src
네 여기 참고하면서 파일 구조 만들죵
먼저 기존 채널의 권한을 변경하는 기능은 어떻게 분류할까요?
채널 권한 변경 로직을 modifyChannelPermissions.js
로 분리하는게 어떨까요?
파일 구조 참고해본 결과 handler
쪽이 가까워보이네요
그럼 handler
- channel
- channelPermissions.js
로 할까여?
그럼 handler - channel - channelPermissions.js 로 할까여?
그러면 channelPermissions내에 channelCreate랑 ready 핸들러 다 넣나요? 파일을 두개로 나누면 어떨까요?
네 나누면 좋을 것 같아요
네 나누면 좋을 것 같아요
아니면 handler
- channelPermissions
- 파일 2개(ready.js, channelCreate.js)
어떠신가요?
그것도 좋은 것 같습니다.
그러면 handlers/channel/permissions
이렇게 가시나요?
그럼 만들어지는건 handler
- channel
- permissions
- ready.js
, channelCreate.js
이렇게 가는건가여
ready
는 너무 추상적이지 않나용?
그러면
handlers/channel/permissions
이렇게 가시나요?
레퍼런스 자료 처럼 clientReady.js
는 어떠신가요?
레퍼런스 자료 처럼
clientReady.js
는 어떠신가요?
readyPermissions
/ channelCreatePermissions
같은건 어떤가여
굿 이게 제일 좋네용!
다음은 인터랙션은 어떻게 할까요?
이런식으로 접근해보면 좋을거 같아요
좋습니다 이제 어떻게 옮길지 이야기해보져
핸들러 부분 분리
// example
module.exports = async (interaction) => {
if (!interaction.isChatInputCommand()) return;
if (interaction.commandName === 'developer') {
await interaction.reply('https://github.com/woowacourse-bot/discord-bot');
}
};
핸들러함수 사용
const interactionCreateHandler = require('./events/interactionCreate');
// ... 다른 이벤트 핸들러들도 불러옵니다.
client.on('interactionCreate', interactionCreateHandler); // ... 다른 이벤트 핸들러들도 연결합니다.
제안드려봅니다
// .../readyPermissions.js
export default (client) => {
console.log(`Logged in as ${client.user.tag}!`);
try {
// '스스로 만들기' 카테고리의 ID를 확인합니다.
const guild = client.guilds.cache.get(process.env.APP_ID); // 해당 서버의 ID를 넣어야 합니다.
// ...
이걸 index.js에서 client.on('ready', readyPermissions);
이렇게 적는건가요?
이걸 index.js에서
client.on('ready', readyPermissions);
이렇게 적는건가요?
저대로 쓴다면 그렇게 될거같아요
const readyPermissions = async (client) => {
console.log(`Logged in as ${client.user.tag}!`);
try {
// '스스로 만들기' 카테고리의 ID를 확인합니다.
const guild = client.guilds.cache.get(process.env.APP_ID); // 해당 서버의 ID를 넣어야 합니다.
const category = guild.channels.cache.find((ch) => ch.name === '스스로 만들기');
if (!category) {
console.error("Category '스스로 만들기' not found.");
return;
}
// '스스로 만들기' 카테고리에 속한 채널들을 가져옵니다.
const channelsInCategory = guild.channels.cache.filter((ch) => ch.parentId === category.id);
// refactor
// 각 채널에 권한을 설정합니다.
channelsInCategory.forEach(async (channel) => {
try {
// 채널을 만든 사용자의 정보를 가져옵니다.
const logs = await guild.fetchAuditLogs({
limit: 100,
type: 10,
});
const channelLog = logs.entries.find((entry) => entry.target.id === channel.id);
if (!channelLog) {
// 해당 채널의 생성 로그 항목이 없는 경우
return;
}
// 생성자 ID를 가져옵니다.
const creatorId = channelLog.executor.id;
const creator = await channel.guild.members.fetch(creatorId);
// 생성자에게만 'MANAGE_CHANNELS' 권한 부여
await channel.permissionOverwrites.edit(creator.id, {
ManageChannels: true,
});
// @everyone에 대한 'MANAGE_CHANNELS' 권한 제거
await channel.permissionOverwrites.edit(guild.roles.everyone, {
ManageChannels: false,
});
} catch (error) {
console.error(`Error setting permissions for channel ${channel.name}:`, error);
}
});
} catch (error) {
console.error('Error setting permissions for channels in category:', error);
}
};
export default readyPermissions;
일정
2023 10/29 19:00 커뮤니케이션 : 디코
📖 의논 사항