You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Discord机器人发送文件?指令触发图片发送技术求助

Solution: Sending Images via User.send() on Command Trigger

I get it—you tried bot.sendFile which didn't work, and now you're looking to use User.send() to send a Killer Bean image when someone types ;killerbean. Let's break this down step by step, including dependency checks and working code examples.

Step 1: Verify Your Dependencies (package.json)

First, let's confirm your bot library setup. Assuming you're using discord.js (the most common Discord bot library), here's a valid package.json snippet for your emoji-bot:

{
  "name": "emoji-bot",
  "version": "1.0.0",
  "main": "bot.js",
  "dependencies": {
    "discord.js": "^14.11.0",
    "node-fetch": "^3.3.2" // Only needed if sending images from URLs
  },
  "engines": {
    "node": ">=16.9.0" // Required for discord.js v14+
  }
}

If you're using an older version of discord.js (like v12), the syntax will differ slightly, but we'll focus on the latest stable version first.

Step 2: Implement the Command with User.send()

User.send() is the correct method to send messages (including files) directly to a user. Here's how to integrate it into your bot.js to respond to the ;killerbean command:

Option 1: Send a Local Image File

If you have the Killer Bean image saved locally (e.g., ./assets/killerbean.png):

const { Client, GatewayIntentBits } = require('discord.js');
const client = new Client({
  intents: [
    GatewayIntentBits.Guilds,
    GatewayIntentBits.GuildMessages,
    GatewayIntentBits.MessageContent // Critical for reading message commands
  ]
});

client.on('messageCreate', async (message) => {
  // Ignore bots and non-matching commands
  if (message.author.bot || !message.content.trim() === ';killerbean') return;

  try {
    // Send the image to the user's DMs
    await message.author.send({
      files: [
        {
          attachment: './assets/killerbean.png', // Path to your local file
          name: 'killerbean.png' // Optional: rename the file when sent
        }
      ]
    });
    // Optional: Confirm in the server channel
    message.reply('Check your DMs for the Killer Bean drop! 🎬');
  } catch (error) {
    console.error('Failed to send image:', error);
    message.reply('Oops, I couldn\'t send you the image. Make sure your DMs are open!');
  }
});

client.login('YOUR_BOT_TOKEN_HERE');

Option 2: Send an Image from a URL

If you want to use an online image instead of a local file:

// Inside the messageCreate event handler
await message.author.send({
  files: [
    {
      attachment: 'https://your-image-host.com/killerbean.png', // Replace with your image URL
      name: 'killerbean.png'
    }
  ]
});

Key Things to Remember

  • Intents: Enable the MessageContent intent in your Discord Developer Portal (under Bot > Privileged Gateway Intents) and in your client setup—without it, your bot can't read message commands like ;killerbean.
  • Permissions: Your bot needs the SendMessages permission in the server, and the user must have DMs open to receive the image.
  • Error Handling: The try/catch block ensures your bot doesn't crash if something goes wrong (like a user having DMs closed or a missing file).

Troubleshooting Tips

  • Run npm install to ensure all dependencies are installed correctly.
  • If you're using a different library (like Eris), the file-sending syntax will vary—let me know and I can adjust the example!
  • Double-check that your file path is correct (relative paths are based on where you run node bot.js from).

内容的提问来源于stack exchange,提问作者notjoshno

火山引擎 最新活动