<p>我很确定您没有启用任何意图,DM的消息需要<code>intents.dm_messages</code>,<code>get_guild</code>需要<code>intents.guilds</code>。您还可以使用<code>commands.dm_only</code>装饰器而不是<code>isinstance</code>。此外,<strong>ID必须始终为整数</strong></p>
<p>以下是如何启用意图:</p>
<pre class="lang-py prettyprint-override"><code># Enabling default intents (everything apart from privileged ones)
intents = discord.Intents.default()
bot = commands.Bot(..., intents=intents)
</code></pre>
<p>这里还有正在使用的<code>dm_only</code>装饰器</p>
<pre class="lang-py prettyprint-override"><code>@bot.command()
@commands.dm_only()
async def appeal(ctx, guild_id: int, *, reason):
# ...
</code></pre>
<p>您还可以在<code>on_ready</code>事件中获取<code>guild</code>和<code>appeal</code>通道,无需每次调用命令时都获取它</p>
<pre class="lang-py prettyprint-override"><code>@bot.event
async def on_ready():
bot.main_guild = bot.get_guild(some_guild_id) # You'd need to hardcode this
bot.appeals = discord.utils.get(bot.main_guild.text_channels, name='appeals') # I'm not sure why it's not possible with `bot.main_guild.appeals`, but this should work
# Now you can simply bot.main_guild.appeals.send('some content')
</code></pre>