def starboard(self, ctx, *, name: str = 'starboard'):
"""Sets up the starboard for this server.
This creates a new channel with the specified name
and makes it into the server's "starboard". If no
name is passed in then it defaults to "starboard".
If the channel is deleted then the starboard is
deleted as well.
You must have Administrator permissions to use this
command or the Bot Admin role.
"""
server = ctx.message.server
stars = self.stars.get(server.id, {})
old_starboard = self.bot.get_channel(stars.get('channel'))
if old_starboard is not None:
fmt = 'This server already has a starboard ({.mention})'
await self.bot.say(fmt.format(old_starboard))
return
# an old channel might have been deleted and thus we should clear all its star data
stars = {}
my_permissions = ctx.message.channel.permissions_for(server.me)
args = [server, name]
if my_permissions.manage_roles:
mine = discord.PermissionOverwrite(send_messages=True, manage_messages=True, embed_links=True)
everyone = discord.PermissionOverwrite(read_messages=True, send_messages=False, read_message_history=True)
args.append((server.me, mine))
args.append((server.default_role, everyone))
try:
channel = await self.bot.create_channel(*args)
except discord.Forbidden:
await self.bot.say('\N{NO ENTRY SIGN} I do not have permissions to create a channel.')
except discord.HTTPException:
await self.bot.say('\N{PISTOL} This channel name is bad or an unknown error happened.')
else:
stars['channel'] = channel.id
await self.stars.put(server.id, stars)
await self.bot.say('\N{GLOWING STAR} Starboard created at ' + channel.mention)
评论列表
文章目录