【问题标题】:Getting function instead of link获取功能而不是链接
【发布时间】:2021-12-13 04:15:52
【问题描述】:

所以我为我朋友的服务器做了一个命令,这样我们就可以得到我们服务器的邀请列表。当我运行机器人并输入“.servers”时,我得到 而不是邀请链接。

    @commands. command()
    async def servers(self, ctx):
        async def serversInvite(guild = discord.Guild):
            for guild in self.bot.guilds:
                channel = guild.text_channels[0]
                link = await channel.create_invite(max_age=0)
                invitelink = str(link)
            if link:
                msg = '```js\n'
                for guild in self.bot.guilds:
                    msg += f'ID: {guild.id} | Members: {guild.member_count} | Guild Name: {guild.name} | Owner: {guild.owner} | Server Invite: {serversInvite}\n'
                msg += '```'
                await ctx.send(msg)
            else:
                msg = '```js\n'
                for guild in self.bot.guilds:
                    msg += f'ID: int({guild.id}) | Members: {guild.member_count} | Guild Name: {guild.name} | Owner: {guild.owner} | \n'
                msg += '```'
                await ctx.send(msg)

【问题讨论】:

  • 您正在发送str({serversInvite}serversInvite 是一个函数,因此当您将其转换为字符串时,您会得到 <function ...> 文本。您没有调用该函数。当您不将括号放在末尾时,您只是指的是函数本身。我会说您需要调用该函数并获取其值,但您似乎是在 serversInvite 函数本身内执行此操作,因此这将是一个无限循环。我对 Discord.py 一无所知,所以我不明白你想在那里做什么,或者你需要在那里放什么。
  • 是的,关于 str() 我正在测试不同的方法,因为我不知道我需要如何调用该函数。默认情况下它没有字符串,我已经编辑了代码:)
  • 你是说invitelink不是SeverInvite

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


【解决方案1】:

你的变量invitelink定义为:

invitelink = str(link)

未在您的代码中使用。

您不是说在下一行中使用invitelink 代替serversInvite 吗?

之前

msg += f'ID: {guild.id} ... | Server Invite: {serversInvite}\n'

之后

msg += f'ID: {guild.id} ... | Server Invite: {invitelink}\n'

顺便说一下,serversInvite函数参数guild没有用到,因为函数后面用到的guild是self.bot.guilds的一项。

编辑 1:以下更改如何?

@commands. command()
async def servers(self, ctx):
    async def serversInvite(guild = discord.Guild):
        for index, guild in enumerate(self.bot.guilds):
            channel = guild.text_channels[0]
            link = await channel.create_invite(max_age=0)
            invitelink = str(link)
            if link:
                msg = '```js\n'
                msg += f'ID: {guild.id} | Members: {guild.member_count} | Guild Name: {guild.name} | Owner: {guild.owner} | Server Invite: {invitelink}\n'
                msg += '```'
                await ctx.send(msg)
            else:
                msg = '```js\n'
                msg += f'ID: int({guild.id}) | Members: {guild.member_count} | Guild Name: {guild.name} | Owner: {guild.owner} | \n'
                msg += '```'
                await ctx.send(msg)

【讨论】:

  • 嗨!感谢您的回复,但是当我使用邀请链接而不是 serversInvite 时,我得到了 2 个不同服务器的相同邀请。这就是整个问题,这就是为什么我用 serverinvite 改变它
  • 您使用的是公会成员,而公会成员又是 self.bot.guilds 的一个项目,您需要遍历所有元素。但是,inviteLink 是唯一对所有项目都通用的,这说明您获得了相同的邀请。
  • 也许您应该在第一个 for 循环中移动 if/else,以便它们获得 inviteLink 的值。现在,您将获得最新版本的 str(link) 值。或者你可以尝试做guild.invitelink = str(link),然后用guild.invitelink访问元素
  • 所以 guild.invitelink 不起作用,因为我得到“AttributeError: 'Guild' object has no attribute 'invitelink'”
  • 你能告诉我为什么你有 2 个 for 循环(嵌套)循环通过相同的 self.bot.guilds 吗?
猜你喜欢
  • 2012-01-27
  • 2010-11-27
  • 2014-02-07
  • 2018-01-24
  • 1970-01-01
  • 2019-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多