如何让我的 discord 机器人在 Python 中读取 dms?
How do I make my discord bot reading dms in Python?
我有一个 discord 机器人,它运行良好,但我遇到了一个问题:如果机器人由于某些命令向某人发送 DM,我希望它收到对该 DM 的答复。我不明白它对 DM 有用。我已经尝试了一些我在互联网上找到的东西,但没有什么是接近工作的。任何帮助将非常感激 :)
这是我试过的(很抱歉我不能给你那么多)
@bot.event
async def on_private_message(ctx):
if ctx.channel.id == ctx.author.dm_channel.id:
# here I've tried using ctx.content in several ways but there was no ctx.content...
on_private_message
不是不和谐事件,我们只是使用 on_message
并检查它是否是 dm。
@bot.event()
async def on_message(message):
if message.guild is None:
#this is a dm message
但是,我看到您的问题是接受用户在私人消息中的回答,这可以通过 wait_for
来完成。
@bot.command()
async def something(ctx):
await ctx.author.send('hello there')
await ctx.author.send("you have 30 seconds to reply")
msg = bot.wait_for('message', check = lambda x: x.author == ctx.author and x.channel == ctx.author.dm_channel, timeout=30)
# do stuff with msg
参考文献:
- dm_channel
- refer to my previous answer for info on
wait_for
好的,根据你的问题,它说,你想收到dms的答复,为了收到答复,你可能已经问了一个问题,所以我会用一个例子来解释,所以假设你运行 命令 !question
,机器人会私信给你或任何人 运行 命令,一个需要检查其答案的问题。为此,我建议使用 bot.wait_for()
:-
bot.command()
async def question(ctx):
channel = await ctx.author.create_dm()
def check(m):
return m.author == ctx.author and m.channel == channel
try:
await ctx.author.send("") #your question inside ""
msg = await bot.wait_for('message', timeout=100.0, check=check)
message_content = msg.content
print(message_content) #you can do anything with the content of the message
except:
await ctx.author.send("You did not answer in given time")
我有一个 discord 机器人,它运行良好,但我遇到了一个问题:如果机器人由于某些命令向某人发送 DM,我希望它收到对该 DM 的答复。我不明白它对 DM 有用。我已经尝试了一些我在互联网上找到的东西,但没有什么是接近工作的。任何帮助将非常感激 :) 这是我试过的(很抱歉我不能给你那么多)
@bot.event
async def on_private_message(ctx):
if ctx.channel.id == ctx.author.dm_channel.id:
# here I've tried using ctx.content in several ways but there was no ctx.content...
on_private_message
不是不和谐事件,我们只是使用 on_message
并检查它是否是 dm。
@bot.event()
async def on_message(message):
if message.guild is None:
#this is a dm message
但是,我看到您的问题是接受用户在私人消息中的回答,这可以通过 wait_for
来完成。
@bot.command()
async def something(ctx):
await ctx.author.send('hello there')
await ctx.author.send("you have 30 seconds to reply")
msg = bot.wait_for('message', check = lambda x: x.author == ctx.author and x.channel == ctx.author.dm_channel, timeout=30)
# do stuff with msg
参考文献:
- dm_channel
- refer to my previous answer for info on
wait_for
好的,根据你的问题,它说,你想收到dms的答复,为了收到答复,你可能已经问了一个问题,所以我会用一个例子来解释,所以假设你运行 命令 !question
,机器人会私信给你或任何人 运行 命令,一个需要检查其答案的问题。为此,我建议使用 bot.wait_for()
:-
bot.command()
async def question(ctx):
channel = await ctx.author.create_dm()
def check(m):
return m.author == ctx.author and m.channel == channel
try:
await ctx.author.send("") #your question inside ""
msg = await bot.wait_for('message', timeout=100.0, check=check)
message_content = msg.content
print(message_content) #you can do anything with the content of the message
except:
await ctx.author.send("You did not answer in given time")