Задать вопрос
@zeekyo

Что делать, если отправляет «канал предложений не настроен», хотя он настроен?

В общем, ситуация такая: При нажатии на кнопку пишет, что канал для предложений не настроен, хотя он был установлен.
65a412440b315257206814.png

За это отвечает InteractionCreate и database.
InteractionCreate.js:
const client = require("../index");
const { MessageActionRow } = require("discord.js");
const { fail, success } = require('../config.json');
const suggestionsChannel = require("../models/suggestion");
const server = require('../models/config');
const db = require('../database'); // Путь к вашему файлу database.js

data = {
    _id: '1182737917911777371',
    suggestionsChannel: '1195397048372056185'
  };
  

client.on("interactionCreate", async (interaction) => {
    if (interaction.isCommand()) {
        await interaction.deferReply({ ephemeral: false }).catch(() => {});

        const cmd = client.slashCommands.get(interaction.commandName);
        if (!cmd)
            return interaction.followUp({ content: "Произошла ошибка " });

        const args = [];

        for (let option of interaction.options.data) {
            if (option.type === "SUB_COMMAND") {
                if (option.name) args.push(option.name);
                option.options?.forEach((x) => {
                    if (x.value) args.push(x.value);
                });
            } else if (option.value) args.push(option.value);
        }
        interaction.member = interaction.guild.members.cache.get(interaction.user.id);

        if (!interaction.guild.roles.everyone.permissions.has("USE_EXTERNAL_EMOJIS")) {
            return interaction.followUp({
                content: 'У роли "@everyone" отсутствует разрешение на "USE_EXTERNAL_EMOJIS`, включите его'
            });
        }

        if (!interaction.member.permissions.has(cmd.userPermissions || [])) {
            return interaction.followUp({
                content: `${fail} Вам нужны разрешения \`${cmd.userPermissions.join(", ")}\``
            });
        }

        if (!interaction.guild.me.permissions.has(cmd.clientPermissions || [])) {
            return interaction.followUp({
                content: `${fail} I need \`${cmd.clientPermissions.join(", ")}\` Permissions`
            });
        }

        cmd.run(client, interaction, args);
    }

    if (!interaction.isButton() || !interaction.customId.startsWith('sug-')) return;
    await interaction.deferReply({
        ephemeral: true
    });

 // Добавьте это для отладки

 let data = db.config.get(interaction.guildId) || { channel: { suggestionsChannel: null } };

if (!data.channel || !data.channel.suggestionsChannel) {
    console.error("Channel not configured:", data);
    return interaction.followUp({
        content: `${fail} Канал предложений не настроен`,
    });
}

const id = interaction.customId.replace('sug-', '').substring(0, 8);
const sugg = db.suggestionsChannel.get(id);

// Остальной код...
 // Остальной код...
 
  
    if (!sugg)
        return interaction.followUp({
            content: `${fail} предложение было удалено из базы данных`,
            ephemeral: true
        });
  
    const channelId = data.channel.suggestionsChannel;
    const channel = (await interaction.guild.channels.fetch(channelId).catch(() => null));
          
    if (!channel) {
        return interaction.followUp({
            content: `${fail} Канал предложений не найден`,
            ephemeral: true
        });
    }
  
    const message = (await channel.messages.fetch(sugg.messageId).catch(() => null));
  
    if (!message)
        return interaction.followUp({
            content: `${fail} Я не могу найти это предложение, возможно, оно было удалено`,
            ephemeral: true
        });
    
    const action = interaction.customId.replace(`sug-${id}-`, '') == 'yes' ? 'upvote' : 'downvote';
    const find = Array.isArray(sugg.answers) ? sugg.answers.find(x => x.id == interaction.user.id) : null;

    if (find) {
        if (action == find.type)
            return interaction.followUp({
                content: `${fail} Вы уже проголосовали за это предложение`,
                ephemeral: true
            });

        sugg.answers = sugg.answers.map(item => {
            if (item.id == interaction.user.id) return {
                ...item,
                type: action
            };
            else return item;
        });

        if (action == 'downvote') sugg.votes.up -= 1
        else sugg.votes.down -= 1
    } else {
        sugg.answers = Array.isArray(sugg.answers) ? sugg.answers : [];
        sugg.answers.push({
            id: interaction.user.id,
            type: action
        });
    }

    if (action == 'downvote') sugg.votes.down += 1;
    else sugg.votes.up += 1;

    const btnUp = message.components[0].components[0];
    const btnDown = message.components[0].components[1];

    btnUp.setLabel(`${sugg.votes.up}`);
    btnDown.setLabel(`${sugg.votes.down}`);

    await sugg.save();
    message.edit({
        components: [new MessageActionRow({
            components: [btnUp, btnDown]
        })]
    });

    return interaction.followUp({
        content: `${success} Ваш голос подсчитан`,
        ephemeral: true
    });
});


database.js:
const sqlite3 = require('better-sqlite3');
const fs = require('fs');

const db = new sqlite3('database.db');

const createServerTable = db.prepare(`
  CREATE TABLE IF NOT EXISTS config (
    _id TEXT PRIMARY KEY,
    suggestionsChannel TEXT DEFAULT NULL
  )
`);

createServerTable.run();

const createSuggestionsTable = db.prepare(`
  CREATE TABLE IF NOT EXISTS suggestions (
    _id TEXT PRIMARY KEY,
    messageId TEXT,
    upvotes INTEGER DEFAULT 0,
    downvotes INTEGER DEFAULT 0,
    answers TEXT,
    statusMode TEXT DEFAULT 'Pending',
    statusReason TEXT DEFAULT NULL
  )
`);

createSuggestionsTable.run();

module.exports = {
  config: {
    get: (_id) => db.prepare('SELECT * FROM config WHERE _id = ?').get(_id),
    set: (_id, suggestionsChannel) => db.prepare('INSERT OR REPLACE INTO config (_id, suggestionsChannel) VALUES (?, ?)').run(_id, suggestionsChannel),
  },
  suggestionsChannel: {
    get: (_id) => db.prepare('SELECT * FROM suggestionsChannel WHERE _id = ?').get(_id),
    set: (_id, messageId, upvotes, downvotes, answers, statusMode, statusReason) => {
        answers = answers || [];
        db.prepare('INSERT OR REPLACE INTO suggestionsChannel (_id, messageId, upvotes, downvotes, answers, statusMode, statusReason) VALUES (?, ?, ?, ?, ?, ?, ?)').run(_id, messageId, upvotes, downvotes, JSON.stringify(answers), statusMode, statusReason);
    }
  },
  db: db
};


Уже несколько часов мучаюсь, не могу понять. Помогите, пожалуйста.
  • Вопрос задан
  • 63 просмотра
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы