Discord.py AttributeError:“用户”对象没有属性“公会”

时间:2020-10-14 15:48:53

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

我正在开发一个自定义discord机器人,主要是为了娱乐。我从另一台服务器Kurisu找到了另一台不和谐的机器人,它是完全自定义和开源的。这是github:https://github.com/nh-server/Kurisu。在mod.py(https://github.com/nh-server/Kurisu/blob/port/cogs/mod.py)的第432行中,有一项功能基本上为用户提供了无帮助角色(在服务器中,这限制了对特定频道的访问)。我正在尝试做类似的事情,在该角色中,没有语音功能会限制您访问语音通道。我正在使用他们的一些代码,即在函数的参数中。我在做异步def takevoice(ctx,成员:FetchMember):作为函数。完整的功能在这里:

@bot.command(name="takevoice", pass_context=True, description="Removes access to voice channels. Admin only.")
@commands.has_role("Admin") # This must be exactly the name of the appropriate role
async def takevoice(ctx, member: FetchMember):
   role = get(member.guild.roles, name="No-Voice")
   await member.add_roles(role)

程序中的其他功能可以正常工作,但是每当我尝试以另一个用户为目标运行此功能时,它都将不起作用,并给我回溯错误。它的结尾是:AttributeError:“用户”对象没有属性“公会”。我到处都在寻找答案,但是找不到答案。任何帮助将不胜感激。

谢谢!

我的机器人的完整代码在这里:(我正在使用其他两个文件,所有这些文件都可以在Kurisu github的utils文件夹中找到。即,我正在使用checks.py,converters.py,数据库.py,manager.py和utils.py。我还使用了一个名为keep_alive.py的文件,因为我是在repl.it上运行它的。)

import asyncio
import aiohttp
import json
import keep_alive
from discord import Game
from discord.ext.commands import Bot
import datetime
import re
import time
from subprocess import call
import discord
from discord.ext import commands
from checks import is_staff, check_staff_id, check_bot_or_staff
from database import DatabaseCog
from converters import SafeMember, FetchMember
import utils
from discord.ext import commands
from discord.utils import get
TOKEN = ""  # Get at discordapp.com/developers/applications/me
bot=commands.Bot(command_prefix=".")
client=discord.Client()

@bot.command(name="hi")
async def hi(ctx):
    await ctx.channel.send("hello")

@bot.command (name="elsewhere", description="Gives acess to the #elsewhere channel")
async def elsewhere(ctx):
    role = discord.utils.get(ctx.guild.roles, name="Elsewhere")
    user = ctx.message.author
    if role in user.roles:
        await user.remove_roles(role)
    if role not in user.roles:
        await user.add_roles(role)

2 个答案:

答案 0 :(得分:2)

那是因为 User 对象不能有特定的公会 - 用户是指不再属于公会的人。 async def takevoice(ctx, member: FetchMember): 更改为 async def takevoice(ctx, member: discordMember):,问题将得到解决。这样,您将获得一个 Member 而不是 User 对象,并且会有一个特定的公会。但是(我不知道这是否重要)您不能再对不在公会中的人执行此操作。

答案 1 :(得分:0)

member: FetchMember更改为member: discord.Member即可解决。成员需要大写。