如何制作一个Discord机器人以获取我与用户的所有私信

0 投票
1 回答
43 浏览
提问于 2025-04-13 13:42

我正在尝试制作一个Discord机器人,想让它把我和某个用户之间的消息(可以是我的消息,也可以是他们的消息,或者最好是两者都包括)写到控制台上。

我试过以下代码:

import requests
import json

DISCORD_TOKEN = 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'

CHANNEL_ID = '12345678901234567890'
MESSAGE_URL = f'https://discord.com/api/v9/channels/{CHANNEL_ID}/messages/'

headers = {
    'Authorization': f'Bot {DISCORD_TOKEN}'
}

def fetch_messages(url):
    response = requests.get(url, headers=headers)
    if response.status_code == 200:
        return response.json()
    else:
        print(f'Failed to fetch messages. Status code: {response.status_code}')
        return None

# Fetch and print messages
messages = fetch_messages(MESSAGE_URL)
if messages:
    for message in messages:
        print(f'{message["author"]["username"]} ({message["author"]["id"]}): {message["content"]}')
else:
    print('No messages fetched.')

但是出现了404错误。我还尝试了另一种方法:

import discord
from discord import Intents
import asyncio

TOKEN = 'qdyglygyagfgdhiesdoafjarjhfasejksgldfhf'

intents = Intents.default()
intents.messages = True
intents.guilds = True

client = discord.Client(intents=intents)

@client.event
async def on_ready():
    print(f'Logged in as {client.user}')

    recipient_id = '57574664743777'
    recipient = client.get_user(recipient_id)

    if recipient:
        dm_channel = recipient.dm_channel
        if dm_channel:
            await fetch_messages(dm_channel)
        else:
            dm_channel = await recipient.create_dm()
            await fetch_messages(dm_channel)
    else:
        print('Recipient not found')


async def fetch_messages(channel):
    messages = []
    async for message in channel.history(limit=None):  # Fetch all messages
        messages.append(message.content)

    print(f'Fetched {len(messages)} messages:')
    for msg in messages:
        print(msg)

client.run(TOKEN)

但系统告诉我收件人不存在。

我试着理解这些东西是怎么工作的,但就是搞不明白。请帮帮我。

1 个回答

0

在你的第二种方法中,应该使用 client.fetch_user 而不是 client.get_user,因为 get_user 这个方法是试图从缓存中获取用户,而 fetch_user 则是直接从 Discord 获取用户信息。

更新后的代码将是:


import discord
from discord import Intents
import asyncio

TOKEN = 'qdyglygyagfgdhiesdoafjarjhfasejksgldfhf'

intents = Intents.default()
intents.messages = True
intents.guilds = True

client = discord.Client(intents=intents)

@client.event
async def on_ready():
    print(f'Logged in as {client.user}')

    recipient_id = '57574664743777'
    recipient = await client.fetch_user(recipient_id) # here instead of get_user we are using fetch_user

    if recipient:
        dm_channel = recipient.dm_channel
        if dm_channel:
            await fetch_messages(dm_channel)
        else:
            dm_channel = await recipient.create_dm()
            await fetch_messages(dm_channel)
    else:
        print('Recipient not found')


async def fetch_messages(channel):
    messages = []
    async for message in channel.history(limit=None):  # Fetch all messages
        messages.append(message.content)

    print(f'Fetched {len(messages)} messages:')
    for msg in messages:
        print(msg)

client.run(TOKEN)

文档参考:

撰写回答