【问题标题】:How to get member name when member leaves server after bot restarts?bot重启后成员离开服务器时如何获取成员名?
【发布时间】:2021-02-22 21:43:54
【问题描述】:

下面给出的代码在以下情况下可以正常工作:

  1. 我启动机器人
  2. 用户加入服务器 => 我得到用户名
  3. 用户离开服务器 => 我得到了离开的成员的用户名

但是当我有这样的顺序时:

  1. 我启动机器人
  2. 用户加入服务器 => 我得到用户名
  3. 我重新启动机器人:将其关闭然后再打开
  4. 用户离开服务器 => 我没有得到用户名

我有带有用户名的数据库,所以在用户离开后,我需要将他从数据库中删除。例如,当我部署更新的机器人版本时,机器人会重新启动。这是我的代码:

import discord
from discord.ext import commands, tasks

intents = discord.Intents(messages=True, members=True)
bot = commands.Bot(command_prefix='!', intents=intents)


@bot.event
async def on_member_join(member):
    username = member.name
    await member.send('Hello')
    print(username)


@bot.event
async def on_member_remove(member):
    username = member.name
    print(username)

bot.run('TOKEN')

我正在使用 discord.py 1.5.0。我该如何解决这个问题?

【问题讨论】:

  • 我将您的代码复制到我的测试机器人中,但无法重现您的问题。我唯一能想到的是,当您的成员离开时,您的机器人可能还没有“准备好”?尝试添加一个on_ready 事件,以便您知道您的机器人已加载。在我的机器人上进行测试,我将其关闭并打开了几次,它总是会给我用户名
  • @AbdurJ 我正在使用on_ready,当它准备好时我有一条消息,但我仍然有同样的问题:当成员在机器人重新启动后离开服务器时,我没有与成员的消息名字。
  • 我已经尝试了好几次,但我似乎无法重现您的问题。我做的测试短视频:link
  • @AbdurJ 谢谢你的视频!这对我来说很奇怪。我会尝试在另一台机器上运行我的代码

标签: python python-3.x discord.py discord.py-rewrite


【解决方案1】:

我不知道为什么这段代码在我的情况下不起作用:

intents = discord.Intents(messages=True, members=True)
bot = commands.Bot(command_prefix='!', intents=intents)

但我试图在他的视频中将意图声明为@AbdurJ:

intents = discord.Intents.default()
intents.members = True

bot = commands.Bot(command_prefix='!', intents=intents)

而且它有效!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-03
    • 2021-05-07
    • 2020-07-31
    • 2022-01-24
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    相关资源
    最近更新 更多