Discord-Autorole wird nicht zugewiesen
Verfasst: Sonntag 12. August 2018, 14:59
Hallo,
mein Discord Bot soll bei Beitritt eines neuen Mitglieds diesem automatisch eine vorher definierte Rolle zuweisen. So sieht der Code aus:
und hier der im Code erwähnte cmd_autorole:
Also, am Anfang muss der Owner des Server mit ~autorole ROLENAME festelgen, was die Autorolle ist. Ab dann soll automatisch die Rolle einem jedem neuen Mitglied zugewiesen werden. wenn nun ein neues Mitglied joint, wird aber nichts neues zugewiesen, nur dieser Error hier erscheint:
Ignoring exception in on_member_join
Traceback (most recent call last):
File "/home/phobit/PycharmProjects/DiscordSippenBot/venv/lib/python3.6/site-packages/discord/client.py", line 307, in _run_event
yield from getattr(self, event)(*args, **kwargs)
File "/home/phobit/PycharmProjects/DiscordSippenBot/Discord/Main.py", line 189, in on_member_join
await client.add_roles(member, role)
File "/home/phobit/PycharmProjects/DiscordSippenBot/venv/lib/python3.6/site-packages/discord/client.py", line 2915, in add_roles
new_roles = utils._unique(role.id for role in itertools.chain(member.roles, roles))
File "/home/phobit/PycharmProjects/DiscordSippenBot/venv/lib/python3.6/site-packages/discord/utils.py", line 232, in _unique
return [x for x in iterable if not (x in seen or adder(x))]
File "/home/phobit/PycharmProjects/DiscordSippenBot/venv/lib/python3.6/site-packages/discord/utils.py", line 232, in <listcomp>
return [x for x in iterable if not (x in seen or adder(x))]
File "/home/phobit/PycharmProjects/DiscordSippenBot/venv/lib/python3.6/site-packages/discord/client.py", line 2915, in <genexpr>
new_roles = utils._unique(role.id for role in itertools.chain(member.roles, roles))
AttributeError: 'coroutine' object has no attribute 'id'
/home/phobit/PycharmProjects/DiscordSippenBot/venv/lib/python3.6/site-packages/discord/client.py:314: RuntimeWarning: coroutine 'get' was never awaited
pass
Ignoring exception in on_member_join
Traceback (most recent call last):
File "/home/phobit/PycharmProjects/DiscordSippenBot/venv/lib/python3.6/site-packages/discord/client.py", line 307, in _run_event
yield from getattr(self, event)(*args, **kwargs)
File "/home/phobit/PycharmProjects/DiscordSippenBot/Discord/Main.py", line 189, in on_member_join
await client.add_roles(member, role)
File "/home/phobit/PycharmProjects/DiscordSippenBot/venv/lib/python3.6/site-packages/discord/client.py", line 2915, in add_roles
new_roles = utils._unique(role.id for role in itertools.chain(member.roles, roles))
File "/home/phobit/PycharmProjects/DiscordSippenBot/venv/lib/python3.6/site-packages/discord/utils.py", line 232, in _unique
return [x for x in iterable if not (x in seen or adder(x))]
File "/home/phobit/PycharmProjects/DiscordSippenBot/venv/lib/python3.6/site-packages/discord/utils.py", line 232, in <listcomp>
return [x for x in iterable if not (x in seen or adder(x))]
File "/home/phobit/PycharmProjects/DiscordSippenBot/venv/lib/python3.6/site-packages/discord/client.py", line 2915, in <genexpr>
new_roles = utils._unique(role.id for role in itertools.chain(member.roles, roles))
AttributeError: 'coroutine' object has no attribute 'id'
Ich habe den Code eigentlich aus einem Tutorial, deswegen wundert mich dieser Error.
Der Bot besitzt die Rechte, diese Rolle zuzuornden, falls jemand denkt es liegt daran!
mein Discord Bot soll bei Beitritt eines neuen Mitglieds diesem automatisch eine vorher definierte Rolle zuweisen. So sieht der Code aus:
Code: Alles auswählen
@client.event
async def on_member_join(member):
await client.send_message(member, "**Hey! %s**\n Willkommen auf dem %s Discord Server von %s! \n Viel Spaß!"
% (member.name, member.server.name, member.server.owner.mention))
role = cmd_autorole.get(member.server)
if role is not None:
await client.add_roles(member, role)
try:
await client.send_message(member, "Dir wurde automatisch die Rolle " + role.mention + "zugewiesen!")
except Exception:
await client.send_message(member, "Entschuldigung, der Bot besitzt keine Rechte um dir die Rolle "
+ role.name + " zuzuordnen! \nBitte kontaktiere den Besitzer des Servers, "
+ member.server.owner.mention + "!")
raise Exception
Code: Alles auswählen
async def error(content, channel, client):
await client.send_message(channel, embed=discord.Embed(color=discord.Color.red(), description=content))
async def get(server):
f = "SETTINGS/" + server.id + "/autorole"
if path.isfile(f):
with open(f) as f:
return discord.utils.get(server.roles, id=f.read())
else:
return None
async def savefile(id, server):
if not path.isdir("SETTINGS/" + server.id):
os.makedirs("SETTINGS/" + server.id)
with open("SETTINGS/" + server.id + "/autorole", "w") as f:
f.write(id)
f.close()
async def ex(args, message, client, invoke):
if len(args) > 0:
rolename = args.__str__()[1:-1].replace(",", "").replace("'", "")
print(rolename)
role = discord.utils.get(message.server.roles, name=rolename)
if role == None:
await error("Bitte eine -auf diesem Server existierende- Rolle eingeben", message.channel, client)
else:
try:
await savefile(role.id, message.server)
await client.send_message(message.channel, embed=discord.Embed(color=discord.Color.green(),
description=("Automatische Rolle wurde "
"geändert zu Rolle: %s!"
% role.name)))
except Exception:
await error("Unbekannter Fehler beim Speichern der Autorolle!", message.channel, client)
raise Exception
Ignoring exception in on_member_join
Traceback (most recent call last):
File "/home/phobit/PycharmProjects/DiscordSippenBot/venv/lib/python3.6/site-packages/discord/client.py", line 307, in _run_event
yield from getattr(self, event)(*args, **kwargs)
File "/home/phobit/PycharmProjects/DiscordSippenBot/Discord/Main.py", line 189, in on_member_join
await client.add_roles(member, role)
File "/home/phobit/PycharmProjects/DiscordSippenBot/venv/lib/python3.6/site-packages/discord/client.py", line 2915, in add_roles
new_roles = utils._unique(role.id for role in itertools.chain(member.roles, roles))
File "/home/phobit/PycharmProjects/DiscordSippenBot/venv/lib/python3.6/site-packages/discord/utils.py", line 232, in _unique
return [x for x in iterable if not (x in seen or adder(x))]
File "/home/phobit/PycharmProjects/DiscordSippenBot/venv/lib/python3.6/site-packages/discord/utils.py", line 232, in <listcomp>
return [x for x in iterable if not (x in seen or adder(x))]
File "/home/phobit/PycharmProjects/DiscordSippenBot/venv/lib/python3.6/site-packages/discord/client.py", line 2915, in <genexpr>
new_roles = utils._unique(role.id for role in itertools.chain(member.roles, roles))
AttributeError: 'coroutine' object has no attribute 'id'
/home/phobit/PycharmProjects/DiscordSippenBot/venv/lib/python3.6/site-packages/discord/client.py:314: RuntimeWarning: coroutine 'get' was never awaited
pass
Ignoring exception in on_member_join
Traceback (most recent call last):
File "/home/phobit/PycharmProjects/DiscordSippenBot/venv/lib/python3.6/site-packages/discord/client.py", line 307, in _run_event
yield from getattr(self, event)(*args, **kwargs)
File "/home/phobit/PycharmProjects/DiscordSippenBot/Discord/Main.py", line 189, in on_member_join
await client.add_roles(member, role)
File "/home/phobit/PycharmProjects/DiscordSippenBot/venv/lib/python3.6/site-packages/discord/client.py", line 2915, in add_roles
new_roles = utils._unique(role.id for role in itertools.chain(member.roles, roles))
File "/home/phobit/PycharmProjects/DiscordSippenBot/venv/lib/python3.6/site-packages/discord/utils.py", line 232, in _unique
return [x for x in iterable if not (x in seen or adder(x))]
File "/home/phobit/PycharmProjects/DiscordSippenBot/venv/lib/python3.6/site-packages/discord/utils.py", line 232, in <listcomp>
return [x for x in iterable if not (x in seen or adder(x))]
File "/home/phobit/PycharmProjects/DiscordSippenBot/venv/lib/python3.6/site-packages/discord/client.py", line 2915, in <genexpr>
new_roles = utils._unique(role.id for role in itertools.chain(member.roles, roles))
AttributeError: 'coroutine' object has no attribute 'id'
Ich habe den Code eigentlich aus einem Tutorial, deswegen wundert mich dieser Error.
Der Bot besitzt die Rechte, diese Rolle zuzuornden, falls jemand denkt es liegt daran!