【问题标题】:Is it possible to create a invite link of a server using the guild id in discord.py是否可以使用 discord.py 中的公会 ID 创建服务器的邀请链接
【发布时间】:2021-01-04 01:02:12
【问题描述】:

我想创建一个命令,通过该命令我可以通过输入公会 ID 来获取服务器邀请链接。 喜欢

@bot.command()
async def createinvitelink(ctx,guildid):
   pass

所以每当有人使用该命令时,他们必须输入机器人所在的任何公会 ID。机器人会将邀请链接提供给该服务器的用户。 到目前为止,我已经编写了这段代码,但它不起作用。

@client.command(name='dm')
async def dm(ctx, guild_id: int):
    if ctx.author.id == owner:
        guild = client.get_guild(guild_id)
        guildchannel = guild.system_channel
        invitelink = await guildchannel.create_invite(max_uses=1,unique=True)
        await ctx.author.send(invitelink)

有人可以帮我吗?

【问题讨论】:

  • 关于“到目前为止我已经编写了这段代码但它不起作用”的附加信息。会有所帮助。有什么错误?

标签: python discord.py


【解决方案1】:

这里的问题是 system_channel 有时可以是 None 。因此,只需从服务器的频道中获取第一个频道并创建其邀请。

@client.command(name='dm')
async def _dm(ctx, guild_id: int):
    guild = client.get_guild(guild_id)
    channel = guild.channels[0]
    invitelink = await channel.create_invite(max_uses=1)
    await ctx.author.send(invitelink)

【讨论】:

  • 非常感谢。有效。我遇到了麻烦,但不知道是那个ez。非常感谢,祝你有美好的一天:)
【解决方案2】:
@client.command()
async def createinvite(ctx, guildid: int):
  try:
    guild = client.get_guild(guildid)
    invitelink = ""
    i = 0
    while invitelink == "":
      channel = guild.text_channels[i]
      link = await channel.create_invite(max_age=300,max_uses=1)
      invitelink = str(link)
      i += 1
    await ctx.send(invitelink)
  except Exception:
    await ctx.send("Something went wrong")

我想我必须解释一下,不是吗……让我们看看

我们首先收到公会 ID 并将其输入为整数,因为我们不需要字符串

然后我为邀请链接创建了一个空白字符串和一个随机变量,其值设置为 0
然后我们运行一个 while 循环,我们这样做的原因是因为您的机器人没有必要为服务器中的第一个频道提供邀请权限,所以我们想要的是,如果机器人没有获得邀请第一个频道,它会尝试下一个,然后再尝试下一个,直到它检查了服务器中的每个频道。只有这样,您才能说您的机器人无法获得服务器的邀请

无论如何,我们检查文本通道并将我们的邀请链接变量的值设置为我们获得的任何字符串输出。这将一直持续到机器人真正找到邀请为止。如果没有,我们会得到一个异常

【讨论】:

    猜你喜欢
    • 2019-08-28
    • 2021-03-21
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    • 2019-03-02
    • 2019-06-25
    相关资源
    最近更新 更多