【发布时间】:2021-04-25 12:52:19
【问题描述】:
我已尝试阅读文档,但我不明白这里发生了什么以及如何修复它。我正在尝试将提及映射到其正确的Name#NNNN 形式,但是,事实证明这对我来说是徒劳的。
import discord
from discord.ext import commands
from collections import defaultdict
client = commands.Bot(command_prefix=">")
@client.event
async def on_ready():
print('Ready!')
jobz = {}
'''PART 1 v v v'''
@client.event
if message.content.startswith('>jobsched'):
author = message.author
jobz[author].append(...)
await channel.send(jobz[author])
'''PART 2 v v v'''
if message.content.startswith('>when '):
channel = message.channel
worker = list(filter(None, message.content[6:].split(' ')))[0]
uname = message.mentions[0].mention
await channel.send(jobz[uname])
第 1 部分: 我首先运行它,发送按预期工作,如下所示:
>jobsched 'a'
>jobsched 'b'
如最后一行所示,这吐出了['1a', '2b']
第 2 部分: 这是我的问题所在。
>when @Name
我预计这会吐出['1a', '2b'],因为我预计它会查找或翻译提到的名称,找到其各自的名称和鉴别器。我认为这应该发生,因为在上面的文章中,这就是名字被写入字典的方式,即 Name#1234:['1a','2b']
打印出.keys() 表明该键具有名称和鉴别符,即“jobz”字典中的Name#1234。
但是,我似乎无法提及给我名称和鉴别器。我已经尝试根据我在stackoverflow上看到的内容执行mentions[0].mention,但它不会为我生成Member class,只是一个字符串,大概只是'@Name'。如果我不理会它,如我的“worker”变量所示,它会传递一个空列表。它应该拉出列表,因为当我将其覆盖为 jobz['Name#1234'] 时,它会给出我期望的列表。
有人可以帮忙吗?
【问题讨论】:
-
你应该试试
print(message.mentions[0].mention)。结果可能会让你大吃一惊:)我在@effprime 的回答中解释了为什么。 -
你不应该使用 on_message 命令。
-
@FluxedScript 对不起,这对我来说是全新的,我一时兴起。 discordpy.readthedocs.io/en/latest/… 我只是像我在这里看到的例子那样做。我应该如何正确地重写这个?
-
那将是另一个问题@andru
标签: python-3.x discord discord.py