在discord.py中创建秘密通道



我正在尝试制作一个机器人,当看到一个带有游戏名称的命令时,它会给你一个显示当前正在玩的角色,并制作一个私人频道,只有完成角色的人和输入命令的人才能访问该频道这是我迄今为止的代码-

@bot.command(name= 'playfata')
async def playfata(ctx):
member = ctx.author
_reading = discord.utils.get(ctx.guild.roles, name="Currently Reading")
finished = discord.utils.get(ctx.guild.roles, name="Finished Reading")
if _reading in member.roles:
await ctx.reply("You are already reading The House In Fata Morgana")
if finished in member.roles:
await ctx.reply("You have already finished playing The House In Fata Morgana")
else:
await member.add_roles(_reading)
await ctx.reply("You are now playing The House In Fata Morgana"
"nHope you enjoy your playthrough!")
overwrites = {
discord.utils.get(ctx.guild.roles, name="Currently Reading"): discord.PermissionOverwrite(read_messages=False),
discord.utils.get(ctx.guild.roles, name="Finished Reading"): discord.PermissionOverwrite(read_messages=True),
discord.utils.get(ctx.guild.roles, name="The Mansion's Residents"): discord.PermissionOverwrite(read_messages=False),
discord.utils.get(ctx.guild.roles, name="The Servants"): discord.PermissionOverwrite(read_messages=True),
member : discord.PermissionOverwrite(read_messages=True)}
x = ctx.author
fatachannel= (x,'-plays-fata')
channel = await ctx.guild.create_text_channel(fatachannel, overwrites=overwrites)

角色分配有效,但通道创建无效,这是错误-

Ignoring exception in command playfata:
Traceback (most recent call last):
File "C:UsersluvyaPycharmProjectsfatamorganabotvenvlibsite-packagesdiscordextcommandscore.py", line 85, in wrapped
ret = await coro(*args, **kwargs)
File "C:/Users/luvya/PycharmProjects/fatamorganabot/main.py", line 63, in playfata
channel = await ctx.guild.create_text_channel(fatachannel, overwrites=overwrites)
File "C:UsersluvyaPycharmProjectsfatamorganabotvenvlibsite-packagesdiscordguild.py", line 948, in create_text_channel
data = await self._create_channel(name, overwrites, ChannelType.text, category, reason=reason, **options)
File "C:UsersluvyaPycharmProjectsfatamorganabotvenvlibsite-packagesdiscordguild.py", line 844, in _create_channel
'id': target.id
AttributeError: 'NoneType' object has no attribute 'id'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:UsersluvyaPycharmProjectsfatamorganabotvenvlibsite-packagesdiscordextcommandsbot.py", line 939, in invoke
await ctx.command.invoke(ctx)
File "C:UsersluvyaPycharmProjectsfatamorganabotvenvlibsite-packagesdiscordextcommandscore.py", line 863, in invoke
await injected(*ctx.args, **ctx.kwargs)
File "C:UsersluvyaPycharmProjectsfatamorganabotvenvlibsite-packagesdiscordextcommandscore.py", line 94, in wrapped
raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'NoneType' object has no attribute 'id'
Process finished with exit code -1

如果我是正确的,那么您的回溯并不能完全代表错误。您正试图创建一个具有无意义值元组的通道为什么需要author作为参数

我猜你想在频道名称中加入作者的名字?

然后你应该通过创建通道

channelname = ctx.author.name + "-plays-fata"
channel = await ctx.guild.create_text_channel(name = channelname, overwrites = overwrites)

@bot.command(name= 'playfata')
async def playfata(ctx):
member = ctx.author
_reading = discord.utils.get(ctx.guild.roles, name="Currently Reading")
finished = discord.utils.get(ctx.guild.roles, name="Finished Reading")
if _reading in member.roles:
await ctx.reply("You are already reading The House In Fata Morgana")
if finished in member.roles:
await ctx.reply("You have already finished playing The House In Fata Morgana")
else:
await member.add_roles(_reading)
await ctx.reply("You are now playing The House In Fata Morgana"
"nHope you enjoy your playthrough!")
overwrites = {
discord.utils.get(ctx.guild.roles, name="Currently Reading"): discord.PermissionOverwrite(read_messages=False),
discord.utils.get(ctx.guild.roles, name="Finished Reading"): discord.PermissionOverwrite(read_messages=True),
discord.utils.get(ctx.guild.roles, name="The Mansion's Residents"): discord.PermissionOverwrite(read_messages=False),
discord.utils.get(ctx.guild.roles, name="The Servants"): discord.PermissionOverwrite(read_messages=True),
member : discord.PermissionOverwrite(read_messages=True)}
channelname = ctx.author.name + "-plays-fata"
channel = await ctx.guild.create_text_channel(name = channelname, overwrites = overwrites)

最新更新