如何制作一个Discord机器人以获取我与用户的所有私信
我正在尝试制作一个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)
文档参考: