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!