【问题标题】:Discord: How to get channel object where new member joined?Discord:如何获取新成员加入的频道对象?
【发布时间】:2018-08-08 02:42:36
【问题描述】:

我想制作一个机器人,向频道的新成员发送消息。 我正在使用 discord.py。

------------第二天-------

首先,谢谢你们三个人!(抱歉英语不好)。我学了很多。

但不幸的是,我发现此 url 不再存在“member.server.defaul_channel”(一定是这个问题的答案): Discord.py Invalid arguments inside member.server_default_channel

那么,如何向现在出现新人的频道发送提及?

1,我知道一种指定频道名称的方法。

@client.event
async def on_member_join(member):
    server = member.server
    channel = [channel for channel in client.get_all_channels() if channel.name == 'WRITE_YOUR_CHANNEL_NAME!!'][0]
    message = 'hello {}, welcome to {}'.format(member.mention, server.name)
    await client.send_message(channel, message)

2,但我想知道更通用的方法。比如使用“default_channel”。有什么办法吗?

【问题讨论】:

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


    【解决方案1】:

    API 发生了一些变化。现在应该可以工作了:

    @client.event
    async def on_member_join(member):
        for channel in client.get_all_channels():
            if channel.name == 'general':
                await channel.send(
                    f'Hi {member.mention}, Message to send when member joins')
    

    【讨论】:

      【解决方案2】:

      您可以使用on_member_join 事件。

      以下会在会员每次加入服务器时向“通用”频道发送消息。

      @client.event
      async def on_member_join(member):
          for channel in member.server.channels:
              if channel.name == 'general':
                  await client.send_message(channel, 'Message to send when member joins')
      

      如果您想检查其他频道属性而不是名称,请查看以下文档。

      http://discordpy.readthedocs.io/en/latest/api.html#discord.Channel

      请注意,我尝试过使用channel.is_default,但这总是返回False

      【讨论】:

      • 非常感谢!我可以私信你的建议!对不起,我想知道如何在默认频道上发送提及。不过谢谢你的建议,我试过了,我可以学习了!
      • 我已经更新了我的答案。代码现在向指定通道发送消息
      【解决方案3】:

      成员并不是真正加入频道,而是加入服务器。类似的东西

      @client.event
      async def on_server_join(member):
          server = member.server
          default channel = server.default_channel
          message = ''Hello {}, welcome to {}'.format(member.mention, server.name)'
          await client.send_message(default_channel, message)
      

      只要有人加入,就会在服务器的默认频道上发送消息。

      【讨论】:

      • 感谢您的建议!我试了一下,出现错误。 "discord.errors.InvalidArgument: Destination 必须是 Channel、PrivateChannel、User 或 Object。Received NoneType"
      • 我找到了答案?(defaul_channel 不再存在)stackoverflow.com/questions/46673995/…
      • @shshsh12 您知道要将消息发送到哪个频道吗?频道也有订单,因此您可以尝试将其发送到“顶级”频道。
      猜你喜欢
      • 2022-09-25
      • 2018-12-03
      • 1970-01-01
      • 2021-02-06
      • 2021-03-02
      • 1970-01-01
      • 1970-01-01
      • 2020-11-04
      • 2021-01-23
      相关资源
      最近更新 更多