Discord.py 显示谁邀请了用户
问题描述
我目前正在尝试找出一种方法来了解谁邀请了用户.从官方文档中,我认为 member
类将具有显示谁邀请他们的属性,但事实并非如此.我对获取邀请的用户的可能方法有一个非常模糊的想法,那就是获取服务器中的所有邀请,然后获取使用次数,当有人加入服务器时,它会检查是否有增加的邀请一种用途.但我不知道这是否是最有效的方法,或者至少是使用过的方法.
I am currently trying to figure out a way to know who invited a user. From the official docs, I would think that the member
class would have an attribute showing who invited them, but it doesn't. I have a very faint idea of a possible method to get the user who invited and that would be to get all invites in the server then get the number of uses, when someone joins the server, it checks to see the invite that has gone up a use. But I don't know if this is the most efficient method or at least the used method.
解决方案
制作一个 config.json
文件,内容为
Make a config.json
file with the content of
{
"token": "Bot token here",
"server-id": "server id here",
"logs-channel-id": "invite channel here"
}
然后保存.
创建一个名为 invites
的频道,然后填写 config.json
文件.然后创建一个名为 bot.py
的文件并将内容放入:
Make a channel called invites
then fill in the config.json
file. And then create a file called bot.py
and put the contents of:
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.
Then open the terminal and run python3 bot.py
. And for more help join this.
相关文章