使用Python创建一个私人Discord频道



我正在尝试创建一个discord bot,当您键入>合同,它创建了一个新的私人渠道&将消息作者和管理员角色添加到新通道中。到目前为止,我有这段代码,但当试图运行命令时,机器人什么也不做。不确定我的问题是从哪里来的,如果有人能看看并分享一些见解?tia

import discord
from discord.ext import commands
from discord.utils import get
Token = '..'
client = discord.Client()
bot = commands.Bot(command_prefix='>')
@client.event
async def on_ready():
print('We have logged on as {0.user}'.format(client))
@bot.command()
async def contract(ctx, *, name=None):
if ctx.author == client.user:
return
guild = ctx.guild
member = ctx.author
admin_role = get(guild.roles, name="Admin")
overwrites = {
guild.default_role: discord.PermissionOverwrite(read_messages=False),
member: discord.PermissionOverwrite(read_messages=True),
admin_role: discord.PermissionOverwrite(read_messages=True)
}
if name == None:
await ctx.channel.send('Sorry, but you have to insert a name. Try again, but do it like this: `>contract [channel name]`')
else:
await ctx.guild.create_text_channel(name, overwrites=overwrites)
await ctx.channel.send(f"Created a channel named {name}")
client.run(Token)

仔细查看您的缩进。

contract中的代码大部分在if ctx.author == client.user: return块内,并且应该知道,return之后没有执行任何代码。(好的IDE和编辑器会警告您无法访问的代码。(

这样的事情可能会让你过得更好——先处理特殊情况和错误,然后在函数结束时做真正的工作。

@bot.command()
async def contract(ctx, *, name=None):
if ctx.author == client.user:
return
if not name:
await ctx.channel.send(
"Sorry, but you have to insert a name. "
"Try again, but do it like this: `>contract [channel name]`"
)
return
guild = ctx.guild
member = ctx.author
admin_role = get(guild.roles, name="Admin")
overwrites = {
guild.default_role: discord.PermissionOverwrite(read_messages=False),
member: discord.PermissionOverwrite(read_messages=True),
admin_role: discord.PermissionOverwrite(read_messages=True),
}
await ctx.guild.create_text_channel(name, overwrites=overwrites)
await ctx.channel.send(f"Created a channel named {name}")

最新更新