3

我目前正在尝试找出一种方法来了解谁邀请了用户。从官方文档中,我认为该member课程将具有显示谁邀请他们的属性,但事实并非如此。我对获取邀请的用户的可能方法有一个非常模糊的想法,那就是获取服务器中的所有邀请,然后获取使用次数,当有人加入服务器时,它会检查是否有增加的邀请一种用途。但我不知道这是否是最有效的方法,或者至少是使用过的方法。

4

3 回答 3

3

制作一个config.json包含以下内容的文件

{
    "token": "Bot token here",
    "server-id": "server id here",
    "logs-channel-id": "invite channel here"
}

然后保存。

创建一个通道,invites然后填写config.json文件。然后创建一个名为的文件bot.py并放入以下内容:

import asyncio
import datetime
import json
import os
import commands

client = discord.Client()
cfg = open("config.json", "r")
tmpconfig = cfg.read()
cfg.close()
config = json.loads(tmpconfig)

token = config["token"]
guild_id = config["server-id"]
logs_channel = config["logs-channel-id"]


invites = {}
last = ""

async def fetch():
 global last
 global invites
 await client.wait_until_ready()
 gld = client.get_guild(int(guild_id))
 logs = client.get_channel(int(logs_channel))
 while True:
  invs = await gld.invites()
  tmp = []
  for i in invs:
   for s in invites:
    if s[0] == i.code:
     if int(i.uses) > s[1]:
      usr = gld.get_member(int(last))
      testh = f"{usr.name} **joined**; Invited by **{i.inviter.name}** (**{str(i.uses)}** invites)"
      await logs.send(testh)
   tmp.append(tuple((i.code, i.uses)))
  invites = tmp
  await asyncio.sleep(4)


@client.event
async def on_ready():
 print("ready!")
 await client.change_presence(activity = discord.Activity(name = "joins", type = 2))


@client.event
async def on_member_join(meme):
 global last
 last = str(meme.id)




client.loop.create_task(fetch())
client.run(token)

然后打开终端并运行python3 bot.py。如需更多帮助,请加入

于 2020-04-01T15:45:22.193 回答
1

在 Discord 中,您永远无法 100% 确定谁邀请了用户。

使用邀请,您知道是谁创建了邀请。

使用 on_member_join,您知道谁加入了。

所以,是的,您可能必须检查邀请并查看哪个邀请被撤销。但是,您永远无法确定邀请了谁,因为任何人都可以在任何地方粘贴相同的邀请链接。

于 2017-06-29T16:53:32.110 回答
0

观察邀请的使用次数,或者当他们用完并被撤销时,是查看用户如何被邀请到服务器的唯一方法。

于 2017-08-08T14:31:21.990 回答