Python 制作服务器信息机器人

Python 制作服务器信息机器人,python,discord,discord.py,discord.py-rewrite,Python,Discord,Discord.py,Discord.py Rewrite,我正在为服务器制作一个机器人,我想添加一个命令,例如!信息,并显示服务器名称、成员数等 @client.command(pass_context=True) @asyncio.coroutine def info(ctx): server = ctx.message.author.server server_name = server.name server_id = server.id server_owner = server.owner.name

我正在为服务器制作一个机器人,我想添加一个命令,例如!信息,并显示服务器名称、成员数等

@client.command(pass_context=True)
@asyncio.coroutine
def info(ctx):
    server = ctx.message.author.server
    server_name = server.name
    server_id = server.id
    server_owner = server.owner.name

    print("server name: {}"
          "server id: {}"
          "server owner: {}"
          .format(server_name, server_id, server_owner))
这就是我得到的错误

Ignoring exception in command info:
Traceback (most recent call last):
  File "C:\Users\cogan\AppData\Local\Programs\Python\Python37\lib\site-packages\discord\ext\commands\core.py", line 83, in wrapped
    ret = await coro(*args, **kwargs)
  File "C:\Users\cogan\AppData\Local\Programs\Python\Python37\lib\asyncio\coroutines.py", line 120, in coro
    res = func(*args, **kw)
  File "c:/Users/cogan/105.py", line 34, in info
    server = ctx.message.author.server
AttributeError: 'Member' object has no attribute 'server'

有人能帮忙吗。

看起来您要么在使用一些旧教程,要么在参考旧文档。我建议大家看看最近的教程并使用新文档(v1.x-rewrite)

Async(v0.16.x)已被弃用,自那以后也出现了一些。其中一个是。所以你要找的是
Member.guild
,而不是
Member.server

另一个更改是上下文自动传递到命令中-您不需要
pass\u context=True


参考文献:


    • 所以你的帖子是一些过时的discord.py代码,看起来太复杂,太过时了。首先,discord.py中的rewrite
      server
      已替换为
      discord.Guild
      。下面的示例显示了获取公会/服务器的名称、id和所有者的功能性方法,所有这些代码都可以从中获得。在我的例子中,我将其设置为嵌入消息,但您可以使用fmt格式或控制台中的print()命令轻松地将其重新传输到ctx.send消息

      我的代码:

      @client.command()
      async def information(ctx):
      
          embed = discord.Embed( timestamp=ctx.message.created_at)
      
          embed.set_author(name=f"Information for the {ctx.guild.name}")
      
          embed.add_field(name="Guild id:", value= f"{ctx.guild.id}")
      
          embed.add_field(name="The guilds owner is:", value = f" {ctx.guild.owner}")
      
          await ctx.send(embed=embed)
      
      注意:discord.py使用
      async
      重写函数,这意味着每次定义内容时,在创建新命令或事件时,必须将该字符串放在
      def
      前面


      我强烈建议您至少花一个小时慢慢阅读文档,以了解您正在使用的代码字符串及其描述 所以基本上,您还没有定义服务器。您可以这样做:

      @asyncio.coroutine
      def info(ctx):
          server = ctx.guild
          server = ctx.message.author.server
          server_name = server.name
          server_id = server.id
          server_owner = server.owner.name
      
          print("server name: {}"
                "server id: {}"
                "server owner: {}"
                .format(server_name, server_id, server_owner))```
      
      
      

      下面是你如何解决这个问题的:1。谷歌属性错误。2.谷歌在discord api 3中的“成员”。实现的成员没有“服务器”属性。你在做你想做的事。具有属性,而不是服务器。读这本书。