我目前正试图找出一种方法来了解谁邀请了用户。从官方文档中,我认为member
类会有一个属性来显示谁邀请了它们,但事实并非如此。我有一个非常微弱的想法,一个可能的方法来获取邀请的用户,这将是获取服务器中的所有邀请然后获得使用次数,当有人加入服务器时,它检查以查看已经上升的邀请一个用途。但我不知道这是最有效的方法还是至少是使用过的方法。
答案 0 :(得分:1)
在Discord中,您永远不会100%确定谁邀请了用户。
使用邀请,您知道谁创建了邀请。
使用on_member_join,你知道谁加入了。
所以,是的,你可以检查邀请,看看哪个邀请被撤销了。但是,您永远不会确定谁邀请,因为任何人都可以在任何地方粘贴相同的邀请链接。
答案 1 :(得分:1)
制作一个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
。要获得更多帮助,请加入this。
答案 2 :(得分:0)
查看邀请的使用次数,或者当用户停止使用并被撤销时,是查看用户如何被邀请加入服务器的唯一方法。