Python discord 模块,Colour() 实例源码
我们从Python开源项目中,提取了以下50个代码示例,用于说明如何使用discord.Colour()。
def _list_channels(self, ctx):
"""Lists YouTube channels with announcements enabled"""
guild = ctx.message.guild
if guild.id in self.ids:
try:
data = discord.Embed(
title="**__Announcement Channels__**\n", colour=discord.Colour(value=11735575))
k = self.ids[guild.id]['yt_channel']
data.add_field(
name="YouTube Channel", value=k)
data.add_field(
name="Discord Channel", value=self.ids[guild.id]['channel'])
data.set_footer(
text="Made with \U00002665 by Francis#6565. Support server: https://discord.gg/yp8WpMh")
await ctx.send(embed=data)
except IndexError as e:
logger.exception(
"An error occured while pulling data from list... {}".format(e))
def changecolour(self, ctx, roleColour: str, *, roleName: str):
'''
Changes the colour of a specified role
'''
# Get the role colour
roleColour = colourFixer(roleColour)
# Get the role itself
role = await getTextRoles(ctx, roleName, speak=True, sparcli=self.sparcli)
if type(role) == int: return
# Change the role colour
colour = Colour(int(roleColour, 16))
await self.sparcli.edit_role(ctx.message.server, role, colour=colour)
await self.sparcli.say('The colour of the role `{0.name}` has been changed to value `{1.value}`.'.format(role, colour))
def generate_help(commands, config):
e_title = config['help']['title']
e_colour = discord.Colour (0x123654)
e_url = config['help']['url']
e_desc = config['help']['description']
for com in commands:
if 'usage' in commands[com]:
h = f"**{com}** \n\t{commands[com]['description']}\
\n\t`@xkcd {commands[com]['usage']}`"
if 'alias' in commands[com]:
h += f"\n\tAliases: `{'`,`'.join(commands[com]['alias'])}`"
e_desc += f"\n\n{h}"
h_embed = discord.Embed (
title = e_title,
colour = e_colour,
url = e_url,
description = f"{e_desc}\n\n")
h_embed.set_footer (
text = config['help']['footer'],
icon_url = config['help']['icon_url'])
return h_embed
def helpful_link(self, link: str):
"""Currently the most useless function in the world"""
author = ctx.message.author
description = ("Have a helpful link: "
"[LINK]({})".format(link))
field_name = "Link name"
field_contents = "This is link"
footer_text = "Check out this link or not,who even cares."
embed = discord.Embed(colour=0xFF0000, description=description) # Can use discord.Colour() as well
embed.title = "Linky link"
embed.set_author(name=str(author.name), icon_url=author.avatar_url)
embed.add_field(name=field_name, value=field_contents) # Can add multiple fields.
embed.set_footer(text=footer_text)
await self.bot.say(embed=embed)
def rank(self, ctx):
if len(ctx.message.mentions) > 0:
ctx.message.author = ctx.message.mentions[0]
self.cur.execute('SELECT * FROM (SELECT *,row_number() OVER(ORDER BY exp DESC) FROM experience) AS filter WHERE filter.user_id={}'.format(ctx.message.author.id))
res = list(self.cur.fetchone())
self.cur.execute('SELECT count(*) from experience')
totalUsers = self.cur.fetchone()[0]
level = res[4]
totalExperience = res[3]
currentExperience = self.currentExp(level, totalExperience)
rank = res[6]
nextLevel = self.calcLevel(int(level))
embed = discord.Embed(colour=discord.Colour(0x1d86c9))
embed.set_author(name=ctx.message.author.name, icon_url=ctx.message.author.avatar_url)
embed.set_footer(text="CSSS-Minion")
embed.add_field(name="Rank", value="{}/{}".format(rank, totalUsers), inline=True)
embed.add_field(name="Level", value=level, inline=True)
embed.add_field(name="Experience", value="{} / {} XP [{} total]".format(int(currentExperience), int(nextLevel), int(totalExperience)), inline=True)
await self.bot.say(embed=embed)
def help(self):
embed = discord.Embed(title="gameR Commands", colour=discord.Colour(0xdc4643), timestamp=datetime.datetime.utcfromtimestamp(1490339531))
embed.set_thumbnail(url="https://cdn.discordapp.com/app-icons/293110345076047893/15e2a6722723827ff9bd53ca787df959.jpg")
embed.set_author(name="CSSS-Minion", icon_url="https://cdn.discordapp.com/app-icons/293110345076047893/15e2a6722723827ff9bd53ca787df959.jpg")
embed.set_footer(text="CSSS-Minion", icon_url="https://cdn.discordapp.com/app-icons/293110345076047893/15e2a6722723827ff9bd53ca787df959.jpg")
embed.add_field(name=".help", value="Displays this help menu.")
embed.add_field(name=".new <game>", value="Start a new game and join it with the given id")
embed.add_field(name=".join <game>", value="Joins the given game id")
embed.add_field(name=".players <game>", value="Lists players in a game")
embed.add_field(name=".list", value="Lists all games")
embed.add_field(name=".start", value="Starts the current game your in")
embed.add_field(name=".fire", value="When its your turn fire the curretly loaded chamber in the gun")
embed.add_field(name=".spin", value="When its your turn,randomize the location of the bullet and fire,everytime you spin you fire once more")
embed.add_field(name=".leave", value="Once a game is done you can leave the room")
embed.add_field(name=".restart", value="Once a game is done,reset the room to get ready to start again,and let new people join")
embed.add_field(name=".room", value="Displays your current game")
embed.add_field(name="Source Code", value="https://github.com/henrymzhao/csss-minion/")
await self.bot.say(embed=embed)
await removeAfterDelay(self.bot,ctx.message)
def mc(self, ctx):
"""Display the help menu for the minecraft server"""
if ctx.message.channel.name != "minecraft":
await self.bot.say("Please move to #minecraft for this command.")
else:
embed = discord.Embed(title="CSSS-Minion Minecraft Commands", colour=discord.Colour(
0xdc4643), timestamp=datetime.datetime.utcfromtimestamp(1490339531))
embed.set_thumbnail(
url="https://media-elerium.cursecdn.com/avatars/13/940/635581309636616244.png")
embed.set_author(
name="CSSS-Minion", icon_url="https://cdn.discordapp.com/app-icons/293110345076047893/15e2a6722723827ff9bd53ca787df959.jpg")
embed.set_footer(
text="CSSS-Minion", icon_url="https://s-media-cache-ak0.pinimg.com/originals/aa/65/70/aa657074a12fb0d961a1789c671b73e3.jpg")
embed.add_field(name=".help mc", value="Displays this help menu.\n")
embed.add_field(name=".status", value="Displays the current server status.\n")
embed.add_field(name=".info", value="Information about how to connect to server.\n")
await self.bot.say(embed=embed)
def announce(self, title, desc):
"""Make an announcement
Usage: announce <title> <body>
Restricted command
"""
author = ctx.message.author
if author.permissions_in(ctx.message.channel).manage_channels or author.server_permissions.manage_channels:
try:
color = author.colour
except Exception:
color = discord.Colour(r.randrange(0xffffff))
embed = discord.Embed(title = title, description = desc, color = color, timestamp = datetime.datetime.utcnow())
embed.set_thumbnail(url=author.avatar_url)
embed.set_author(name=author.display_name, icon_url = author.avatar_url)
await self.bot.say(embed = embed)
try:
await self.bot.delete_message(ctx.message)
except Exception:
#thats ok
print("Not allowed to delete message")
def modsay(self, *msg):
"""Give a stern message.
Heavily inspired by brenfan's .em code <3
"""
author = ctx.message.author
if author.permissions_in(ctx.message.channel).manage_channels or author.server_permissions.manage_channels:
try:
color = red
except Exception:
color = discord.Colour(0xff0000)
string = "\n\n["+" ".join(msg)+"]()"
embed = discord.Embed(description = string, title="An Echo From the Heavens Says...", footer="Moderator Warning")
embed.set_author(name=author.display_name, icon_url = author.avatar_url)
embed.set_footer(text="Moderator Warning")
await self.bot.say(embed=embed)
try:
await self.bot.delete_message(ctx.message)
except Exception:
print("Not allowed to delete message")
def ball(self, question: str):
"""...it's a 8-ball"""
if not question.endswith('?'):
return await ctx.send(f"{ctx.author.mention},that's not a question,I think.")
colour = discord.Colour(random.randint(0, 0xFFFFFF))
eight_ball_field_name = '\N{BILLIARDS} 8-ball'
embed = (discord.Embed(colour=colour)
.add_field(name='\N{BLACK QUESTION MARK ORNAMENT} Question', value=question)
.add_field(name=eight_ball_field_name, value='\u200b', inline=False)
)
msg = await ctx.send(content=ctx.author.mention, embed=embed)
new_colour = discord.Colour.from_rgb(*(round(c * 0.7) for c in colour.to_rgb()))
default = _8default._replace(colour=new_colour)
async with ctx.typing():
for answer in (default, random.choice(BALL_ANSWERS)):
await asyncio.sleep(random.uniform(0.75, 1.25) * 2)
embed.colour = answer.colour
embed.set_field_at(-1, name=eight_ball_field_name, value=answer.answer, inline=False)
await msg.edit(embed=embed)
def colour(self, ctx):
"""Generates a random colo(u)r."""
colour = discord.Colour(random.randint(0, 0xFFFFFF))
as_str = str(colour)
rgb = colour.to_rgb()
h, s, v = colorsys.rgb_to_hsv(*(v / 255 for v in rgb))
hsv = h * 360, s * 100, v * 100
colour_embed = (discord.Embed(title=as_str, colour=colour)
.set_thumbnail(url=f'http://colorhexa.com/{as_str[1:]}.png')
.add_field(name="RGB", value='%d,%d,%d' % rgb)
.add_field(name="HSV", value='%.03f,%.03f,%.03f' % hsv))
if webcolors:
colour_embed.description = get_colour_name(rgb)
await ctx.send(embed=colour_embed)
def colour(self, role: discord.Role, value: discord.Colour):
"""Edits a role's colour
Use double quotes if the role contains spaces.
Colour must be in hexadecimal format.
\"http://www.w3schools.com/colors/colors_picker.asp\"
Examples:
!editrole colour \"The Transistor\" #ff0000
!editrole colour Test #ff9900"""
author = ctx.message.author
try:
await self.bot.edit_role(ctx.message.server, color=value)
logger.info("{}({}) changed the colour of role '{}'".format(
author.name, author.id, role.name))
await self.bot.say("Done.")
except discord.Forbidden:
await self.bot.say("I need permissions to manage roles first.")
except Exception as e:
print(e)
await self.bot.say("Something went wrong.")
def valor(self, ctx):
user = ctx.message.author
server = ctx.message.server
roles = [role.name.replace('@', '@\u200b') for role in user.roles]
if 'Valor' in roles:
await self.bot.say("You already joined that team!")
elif 'Mystic' in roles or 'Instinct' in roles:
await self.bot.say("You have already joined a team please leave a team before adding a new one")
else:
serverroles = [role.name.replace('@', '@\u200b') for role in server.roles]
if 'Mystic' in serverroles and 'Valor' in serverroles and 'Instinct' in serverroles:
valor = discord.utils.find(lambda r: r.name == 'Valor', ctx.message.server.roles)
await self.bot.add_roles(user, valor)
await self.bot.say("Team succesfuly joined! :+1:")
else:
await self.bot.say("No roles found,creating them now.... ")
valor = await self.bot.create_role(ctx.message.server)
mystic = await self.bot.create_role(ctx.message.server)
instinct = await self.bot.create_role(ctx.message.server)
await self.bot.edit_role(ctx.message.server, valor, name='Valor', colour=discord.Colour(value=15995914))
await self.bot.edit_role(ctx.message.server, mystic, name='Mystic', colour=discord.Colour(value=423919))
await self.bot.edit_role(ctx.message.server, instinct, name='Instinct', colour=discord.Colour(value=16501507))
def mystic(self, ctx):
server = ctx.message.server
user = ctx.message.author
roles = [role.name.replace('@', '@\u200b') for role in user.roles]
if 'Mystic' in roles:
await self.bot.say("You already joined that team!")
elif 'Valor' in roles or 'Instinct' in roles:
await self.bot.say("You have already joined a team please leave a team before adding a new one")
else:
serverroles = [role.name.replace('@', '@\u200b') for role in server.roles]
if 'Mystic' in serverroles and 'Valor' in serverroles and 'Instinct' in serverroles:
mystic = discord.utils.find(lambda r: r.name == 'Mystic', mystic)
await self.bot.say("Team succesfuly joined! :+1:")
else:
await self.bot.say("No roles found, colour=discord.Colour(value=16501507))
def instinct(self, '@\u200b') for role in user.roles]
if 'Instinct' in roles:
await self.bot.say("You already joined that team!")
elif 'Mystic' in roles or 'Valor' in roles:
await self.bot.say("You have already joined a team please leave a team before adding a new one")
else:
serverroles = [role.name.replace('@', '@\u200b') for role in server.roles]
if 'Mystic' in serverroles and 'Valor' in serverroles and 'Instinct' in serverroles:
instinct = discord.utils.find(lambda r: r.name == 'Instinct', instinct)
await self.bot.say("Team succesfuly joined! :+1:")
else:
await self.bot.say("No roles found, colour=discord.Colour(value=16501507))
def status(self, ctx):
"""Shows the servers settings for welcomer."""
db = fileIO(self.load, "load")
if ctx.message.server.id not in db:
await self.bot.say(":x: **Welcomer has not been configured for this server,use `welcomer channel` first**")
return
server = ctx.message.server
color = ''.join([choice('0123456789ABCDEF') for x in range(6)])
color = int(color, 16)
e = discord.Embed(colour=discord.Colour(value=color), description="\n\a")
role = discord.utils.get(ctx.message.server.roles, id=db[server.id]["botrole"])
e.set_author(name="Settings for " + server.name, icon_url=server.icon_url)
e.add_field(name="Welcomer Channel:", value="#" + self.bot.get_channel(db[server.id]["Channel"]).name if self.bot.get_channel(db[server.id]["Channel"]) else None, inline=True)
e.add_field(name="Join Toggle:", value=db[server.id]["join"], inline=True)
e.add_field(name="Leave Toggle:", value=db[server.id]["leave"], inline=True)
e.add_field(name="Bot Role:", value=role.name if role else None)
e.add_field(name="Bot Role Toggle:", value=db[server.id]["botroletoggle"])
e.add_field(name="Embed", value=db[server.id]["Embed"], inline=True)
e.add_field(name="Leave Message:", value=db[server.id]["leavemessage"], inline=False)
e.add_field(name="Join Message:", value=db[server.id]["joinmessage"], inline=False)
try:
await self.bot.say(embed=e)
except Exception as e:
await self.bot.say(e)
def on_member_remove(self, member):
server = member.server
db = fileIO(self.load, "load")
if not server.id in db:
return
if db[server.id]['leave'] is False:
return
message = db[server.id]['leavemessage']
channel = db[server.id]["Channel"]
if db[server.id]["Embed"]:
color = ''.join([choice('0123456789ABCDEF') for x in range(6)])
color = int(color, 16)
data = discord.Embed(title="Member Left!".format(member.id),
description=message.format(member, server),
colour=discord.Colour(value=color))
data.set_thumbnail(url=member.avatar_url)
await self.bot.send_message(server.get_channel(channel), embed=data)
else:
await self.bot.send_message(server.get_channel(channel), message.format(member, server))
def pogoservers(self, ctx):
url = "http://cmmcd.com/PokemonTrainerClub/"
resp = await self.session.get(url, headers={'User-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3'})
soup = BeautifulSoup(await resp.text(), "html.parser")
links = soup.find_all('font')
for item in links:
level = item.text
url = "http://cmmcd.com/PokemonGo/"
resp = await self.session.get(url, "html.parser")
links = soup.find_all('font')
for item in links:
level2 = item.text
color = ''.join([choice('0123456789ABCDEF') for x in range(6)])
color = int(color, 16)
data = discord.Embed(description=level, colour=discord.Colour(value=color))
data.add_field(name="Pokémon Go Server Status", value=level2)
data.set_author(name="PTC Login status")
await self.bot.say(embed=data)
def colour(self, colour : discord.Colour, role : discord.Role):
"""Changes the colour of a role.
The colour must be a hexadecimal value,e.g. FF2AEF. Don't prefix it
with a pound (#) as it won't work. Colour names are also not supported.
To use this command you must have the Manage Roles permission or
have the Bot Admin role. The bot must also have Manage Roles permissions.
This command cannot be used in a private message.
"""
try:
await self.bot.edit_role(ctx.message.server, colour=colour)
except discord.Forbidden:
await self.bot.say('The bot must have Manage Roles permissions to use this.')
else:
await self.bot.say('\U0001f44c')
#changes the name of the role
#NOTE: Currently CANNOT change default bot role name (BotName=DafaultRoleName)
def whois(self, user_id: int):
"""
Searches for a user via ID
"""
try:
with ctx.channel.typing():
user = await self.bot.get_user_info(user_id)
embed = discord.Embed(colour=discord.Colour(0x30f9c7), description="ID: {}".format(user.id),
timestamp=datetime.datetime.now())
embed.set_thumbnail(
url=user.avatar_url)
embed.set_author(name=user)
embed.set_footer(text="Who Is: User")
embed.add_field(name="Bot?", value=user.bot, inline=False)
embed.add_field(name="Account Creation Date", value=user.created_at, inline=False)
await ctx.send(embed=embed)
except discord.NotFound:
await ctx.send("`No user found under this ID`")
except discord.HTTPException:
await ctx.send("`Error collecting user information`")
return
def about(self, user: discord.Member = None):
"""
Shows information about a user
"""
if user is None:
user = ctx.author
with ctx.channel.typing():
embed = discord.Embed(colour=discord.Colour(0x30f9c7),
timestamp=datetime.datetime.now())
embed.set_thumbnail(
url=user.avatar_url)
embed.set_author(name=user)
embed.set_footer(text="All about {}".format(user))
embed.add_field(name="Bot?", value=user.bot)
embed.add_field(name="Roles", value="{}".format(len(user.roles) - 1))
embed.add_field(name="Account Creation Date", value=user.created_at)
embed.add_field(name="Date Joined Guild", value=user.joined_at)
embed.add_field(name="Game", value=user.game)
embed.add_field(name="Status", value=user.status)
embed.add_field(name="Voice State", value=user.voice)
embed.add_field(name="Display Name", value=user.display_name)
await ctx.send(embed=embed)
def server(self, ctx):
"""
Provides information on the server
"""
with ctx.channel.typing():
embed = discord.Embed(title="ID: 58934178071780", colour=discord.Colour.gold(),
timestamp=datetime.datetime.now())
embed.set_thumbnail(
url=ctx.guild.icon_url)
embed.set_author(name=ctx.guild.name)
embed.set_footer(text="About Server")
embed.add_field(name="Members", value=str(len(ctx.guild.members)))
embed.add_field(name="Roles", value=str(len(ctx.guild.roles) - 1))
embed.add_field(name="Channels", value=str(len(ctx.guild.channels)))
embed.add_field(name="AFK Channel", value=ctx.guild.afk_channel)
embed.add_field(name="AFK Timeout", value=str(ctx.guild.afk_timeout / 60))
embed.add_field(name="Owner", value=ctx.guild.owner)
embed.add_field(name="Creation Date", value=ctx.guild.created_at)
embed.add_field(name="Region", value=ctx.guild.region)
embed.add_field(name="Verification Level", value=ctx.guild.verification_level)
embed.set_footer(text="About Server")
await ctx.send(embed=embed)
def cmd_rolecolor(self, message, author, server, rolename, new_hex, reason=None):
"""
Usage: {command_prefix}rolecolor ["role name"] "#hex color code" ["reason"]
Changes the color of a role to whatever hexadecimal color code is provided
"""
if await self.has_roles(message.channel, command='rolecolor'):
check = re.compile('^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$')
if check.match(new_hex):
try:
role = discord.utils.get(server.roles, name=rolename)
if not role:
int('this')
except:
raise CommandError('Invalid Role: {}'.format(rolename))
new_int = new_hex.replace('#', '0x')
new_int = int(new_int, 0)
await self.edit_role(server, colour=discord.Colour(value=new_int))
await self.write_to_modlog(message, reason)
else:
raise CommandError('Invalid Hex Code: {}'.format(new_hex))
def get_embed(self, bot):
"""Returns an embed corresponding to the log"""
embed = discord.Embed()
user = discord.utils.find(lambda u: u.id == self.user_id, \
bot.get_all_members())
if user:
embed.title = user.name + "#" + user.discriminator + " (" + user.id + ")"
embed.set_thumbnail(url=user.avatar_url)
else:
embed.title = "Unknown member (" + self.user_id + ")"
responsible = discord.utils.find(lambda u: u.id == self.responsible_id, \
bot.get_all_members())
if responsible:
embed.add_field(name="Responsible", \
value=responsible.name + "#" + responsible.discriminator + \
" (" + responsible.id + ")", inline=False)
else:
embed.add_field(name="Responsible", \
value="Uknown responsible (" + self.responsible_id + ")", inline=False)
embed.timestamp = datetime.strptime(self.date, "%d/%m/%Y %H:%M:%S")
embed.colour = discord.Colour(value=COLORS[self.type])
embed.set_author(name="Case #" + str(self.log_id))
embed.add_field(name="Reason", value=self.reason, inline=False)
return embed
def _colour(self, role: str, colour: str):
"""Set the Color of a Role."""
role = getRole(ctx, role)
colour = getColor(colour)
if not role:
return await edit(ctx, content="\N{HEAVY EXCLAMATION MARK SYMBOL} Role not found", ttl=5)
elif not colour:
return await edit(ctx, content="\N{HEAVY EXCLAMATION MARK SYMBOL} Colour not found", ttl=5)
else:
value = discord.Colour(int((colour.hex_l.strip('#')), 16))
try:
await role.edit(colour=value)
except discord.HTTPException:
await edit(ctx, content="\N{HEAVY EXCLAMATION MARK SYMBOL} Missing permissions to edit this role", ttl=5)
else:
e = discord.Embed(color=value)
e.set_author(name="Changed Role Color of: " + str(role))
await edit(ctx, embed=e)
def colour(self, role.name))
await self.bot.say("Done.")
except discord.Forbidden:
await self.bot.say("I need permissions to manage roles first.")
except Exception as e:
print(e)
await self.bot.say("Something went wrong.")
def embedsay(self, text: str):
"""Says Something as the bot in a embed"""
colour = ''.join([choice('0123456789ABCDEF') for x in range(6)])
colour = int(colour, 16)
randnum = randint(1, 10)
empty = u"\u2063"
emptyrand = empty * randnum
data = discord.Embed(description=str(
text), colour=discord.Colour(value=colour))
if ctx.message.author.avatar_url:
data.set_author(name=ctx.message.author.name,
url=ctx.message.author.avatar_url, icon_url=ctx.message.author.avatar_url)
else:
data.set_author(name=ctx.message.author.name)
try:
await self.bot.say(emptyrand, embed=data)
except:
await self.bot.say("I need the `Embed links` permission to send this")
def embedsayadmin(self, text: str):
"""Says Something as the bot without any trace of the message author in a embed"""
if ctx.message.server.me.bot:
try:
await self.bot.delete_message(ctx.message)
except:
await self.bot.send_message(ctx.message.author, 'Could not delete your message on ' + ctx.message.server.name)
colour = ''.join([choice('0123456789ABCDEF') for x in range(6)])
colour = int(colour, colour=discord.Colour(value=colour))
try:
await self.bot.say(emptyrand, embed=data)
except:
await self.bot.say("I need the `Embed links` permission "
"to send this")
def embedcoloradmin(self, color: str, text: str):
"""Says Something as the bot without any trace of the message author in a colored embed"""
if ctx.message.server.me.bot:
try:
await self.bot.delete_message(ctx.message)
except:
await self.bot.send_message(ctx.message.author, 'Could not delete your message on ' + ctx.message.server.name)
color = color.replace("#", "")
color = color.replace("0x", "")
color = int(color, colour=discord.Colour(value=color))
try:
await self.bot.say(emptyrand, embed=data)
except:
await self.bot.say("I need the `Embed links` permission to send this")
def embedsay(self, embed=data)
except:
await self.bot.say("I need the `Embed links` permission to send this")
def embedsayto(self, channel: discord.Channel, icon_url=ctx.message.author.avatar_url)
else:
data.set_author(name=ctx.message.author.name)
try:
await self.bot.send_message(channel, emptyrand, embed=data)
except:
await self.bot.say("I need the `Embed links` permission to send this")
def embedsayadmin(self, embed=data)
except:
await self.bot.say("I need the `Embed links` permission "
"to send this")
def Nep(self):
"""Displays a random Nep."""
nep = choice(self.nep)
nepsay = choice(self.nepsay)
if not nep or not nepsay:
await self.bot.say('Something went wrong')
return
colour = ''.join([choice('0123456789ABCDEF') for x in range(6)])
colour = int(colour, 16)
data = discord.Embed(
title=nepsay, colour=discord.Colour(value=colour))
data.set_image(url=nep)
try:
await self.bot.say(embed=data)
except:
await self.bot.say("I need the `Embed links` permission "
"to send this")
def resolve_color(value):
"""Resolve a custom or pre-defined color.
This allows html style #123456.
"""
if value.startswith('#'):
value = value[1:] # assumes no named color starts with #
try:
intval = int(value, 16)
except ValueError:
pass
else:
if intval >= (1 << 24):
raise errors.BadArgument("Invalid color {} is too big!".format(value))
return discord.Colour(intval)
try:
return getattr(discord.Colour, value)()
except AttributeError:
raise errors.BadArgument("Invalid color {}".format(value))
def colorrole(self, color):
"""Creates a colored role for you!
Example
[p]colorrole #8C5200
Hex pls."""
if not color.startswith("#"):
await send_cmd_help(ctx)
return
colorhex = color[1:]
color_role = await self.bot.create_role(server=ctx.message.server, name=color, colour=discord.Colour(value=int(colorhex, 16)))
await self.bot.add_roles(ctx.message.author, color_role)
await self.bot.say("Done!")
def setcolour(self, colour:str, user:Member=None):
'''
Creates a new role with a given colour,and assigns it to a user
'''
# Fix up some variables
server = ctx.message.server
user = ctx.message.author if not user else user
# Fix the colour string
colour = colourFixer(colour)
colourObj = Colour(int(colour, 16))
# permissions=Permissions(permissions=0)
# Find the role
tempRoleFinder = [i for i in server.roles if user.id in i.name]
if len(tempRoleFinder) > 0:
role = tempRoleFinder[0]
await self.sparcli.edit_role(server, colour=colourObj)
created = False
else:
role = await self.sparcli.create_role(server, name='SPARCLI - {}'.format(user.id), colour=colourObj)
await self.sparcli.add_roles(user, role)
created = True
# Print out to user
await self.sparcli.say(
'This role has been successfully {}. \n'
'You may need to move the positions of other roles to make it work properly.'.format({True:'created',False:'edited'}[created])
)
def asetcolour(self, colour:str):
'''
Creates a new role with a given colour,and assigns it to yourself
Requires enabling
'''
# Fix up some variables
server = ctx.message.server
user = ctx.message.author
# Fix the colour string
colour = colourFixer(colour)
colourObj = Colour(int(colour,False:'edited'}[created])
)
def randomColour(self):
co = ["A", "B", "C", "D", "E", "F", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
a = int(random.random() * len(co))
b = int(random.random() * len(co))
c = int(random.random() * len(co))
d = int(random.random() * len(co))
e = int(random.random() * len(co))
f = int(random.random() * len(co))
col = "{}{}{}{}{}{}".format(co[a], co[b], co[c], co[d], co[e], co[f])
return discord.Colour(int(col, 16))
def make_embed_message(title, datas, bot, message=None):
"""
Return an embed message for discord.
Datas must be a simple dict
"""
# embed properties
embed_title = title
embed_colour = discord.Colour(0x3c6d46)
embed_timestamp = datetime.datetime.utcnow()
embed = discord.Embed(title=embed_title, colour=embed_colour,
timestamp=embed_timestamp)
# author properties
if message is not None:
author = message.author.name
url = message.author.avatar_url
else:
author = datas.pop("author")
url = bot.user.avatar_url
author_name = author
author_icon_url = url
embed.set_author(name=author_name, icon_url=author_icon_url)
# footer properties
footer_text = bot.user.name
footer_icon_url = bot.user.avatar_url
embed.set_footer(text=footer_text, icon_url=footer_icon_url)
# content
inline = False
for key, data in datas.items():
if isinstance(data, bool):
data = states[data]
embed.add_field(name=key.title(), value=data, inline=inline)
return embed
def create_embed(xkcd):
comic = xkcd['comic']
embed_comic = discord.Embed \
(title = '{}: {}'.format(comic['num'], comic['title']), \
colour = discord.Colour(0x00ff00), url = comic['img'])
embed_comic.set_footer(text = '{}'.format(comic['alt']))
embed_comic.set_image(url = comic['img'])
embed_comic.set_author(name = 'xkcd', \
url = 'https://xkcd.com/{}'.format(comic['num']))
return embed_comic
def games(self, ctx):
"""Manages games for the roster."""
# Handle Database
try:
with db.cursor() as cursor:
sql = "SELECT `abv`,`name` FROM games ORDER BY `name`"
cursor.execute(sql)
result = cursor.fetchall()
cursor.close()
except Exception as e:
await self.bot.send_message(ctx.message.channel, "{0.mention},there was an error getting the list of games"
" for you. I'm sorry! ".format(ctx.message.author) + str(
e))
return
# Create Variables for Embed Table
abvs = ''
names = ''
for row in result:
abvs += (row['abv'] + '\n')
names += (row['name'] + '\n')
# Create Embed Table
embed = discord.Embed(title="Games List", colour=discord.Colour(0x55ff),
description="*The list of available games for the roster commands,as well as their "
"abbreviations for use in those commands.*")
embed.set_author(name="Zealot Gaming", url="https://www.zealotgaming.com",
icon_url="http://www.zealotgaming.com/discord/logos/zg.png")
embed.set_thumbnail(url="http://www.zealotgaming.com/discord/logos/zg.png")
embed.add_field(name="Abbreviation", value=abvs, inline=True)
embed.add_field(name="Game Name", value=names, inline=True)
# Send Table to User Privately
await self.bot.send_message(ctx.message.channel, embed=embed)
# COMMAND: !games add
def _setcolor(self, color : discord.Colour):
"""Sets the default color of embeds."""
data = self.bot.config.get("meta", {})
data['default_color'] = str(color)
await self.bot.config.put('meta', data)
await self.bot.responses.basic(message="The default color has been updated.")
def color(self):
"""
:return: attr of discord.Colour for player's default avatar
"""
name = self.current_player.default_avatar.name
if name == "grey":
name = "light_grey"
return getattr(discord.Colour, name)()
# @property
# def valid_moves(self):
# """
# :return: List of position coords (list x,y) that are not full
# """
# return [[self.board[i][-1],i] for i in self.order if self.board[i][-1] != 6]
def __init__(self, bot):
self.bot = bot
self.db = bot.db
self.app_name = bot.app_name
self.sessions = {}
self.timeout = 120
self.timeout_incr = 5
self.message_icon = ["?", "?", "?"] # :information_source:,:warning:,:no_entry:
self.message_color = [discord.Colour.blue(), discord.Colour.orange(), discord.Colour.red()]
def send_board(self, init=False, win=None):
session = self.session(ctx)
session.ctx = ctx
if session.msg is not None:
await session.msg.delete()
if win:
if win == "Draw":
turn = f"Game ended in a Draw."
color = discord.Colour.dark_grey()
elif win == "Forfeit":
turn = f"Game Over. {ctx.author.name} Forfeits."
color = discord.Colour.dark_grey()
elif win == "Timeout":
turn = f"Time Out. {session.current_player.name} Forfeits."
color = discord.Colour.dark_grey()
else:
turn = f"Game Over!\n{win.name} wins! ??"
color = 0xFDFF00
else:
turn = "New game! Turn: 1" if init else f"Turn: {(session.turn + 2) // 2}"
color = session.color
em = discord.Embed(title=f"{session.player_chip(session.p1)}{session.p1.name} ?? "
f"{session.p2.name}{session.player_chip(session.p2)}",
description=f"{turn}\n\n:one::two::three::four::five::six::seven:\n{session.draw_board}",
color=color)
if win:
self.sessions.pop(ctx.channel.id)
await ctx.send(embed=em)
else:
em.set_footer(text=f"{session.current_player.name}'s turn: {session.current_player_chip}")
session.msg = await ctx.send(embed=em)
if not win == "Timeout" and session.current_player.member is not ctx.guild.me:
if ctx.channel.permissions_for(ctx.guild.me).manage_messages:
await ctx.message.delete()
def generate_discord_embed(self):
embed = discord.Embed(type="rich")
# TODO: change the icon
embed.set_author(name="League of Legends", url="http://euw.leagueoflegends.com/", icon_url="https://cdn.discordapp.com/attachments/152150752523976704/307558194824216578/icon.png")
embed.add_field(name="Summoner", value=str(self.summoner_name))
embed.add_field(name="Level", value=str(self.level))
if self.soloq_tier is not None:
embed.add_field(name="Solo/duo SR", value=f"{lol.tiers[self.soloq_tier].capitalize()} {lol.divisions[self.soloq_division]}", inline=False)
embed.set_thumbnail(url=f"https://royal.steffo.me/loltiers/{lol.tiers[self.soloq_tier].lower()}_{lol.divisions[self.soloq_division].lower()}.png")
if self.flexq_tier is not None:
embed.add_field(name="Flex SR", value=f"{lol.tiers[self.flexq_tier].capitalize()} {lol.divisions[self.flexq_division]}", inline=False)
if self.ttq_tier is not None:
embed.add_field(name="Twisted Treeline", value=f"{lol.tiers[self.ttq_tier].capitalize()} {lol.divisions[self.ttq_division]}", inline=False)
embed.colour = discord.Colour(0x09AEBB)
return embed
def inspect(self, ctx):
for role in ctx.message.author.roles:
if self.bot.Henry(ctx) or role.id == '321832268282855436': #bot devs
theObject = None
if len(ctx.message.mentions) > 0:
theObject = ctx.message.mentions[0]
elif len(ctx.message.channel_mentions) > 0:
theObject = ctx.message.channel_mentions[0]
elif len(ctx.message.role_mentions) > 0:
theObject = ctx.message.role_mentions[0]
else:
self.bot.say("I didn't understand what you are inspecting.")
if theObject is not None:
items = []
dictionary = [x for x in dir(theObject) if not x.startswith('_')]
for name in dictionary:
attr = getattr(theObject, name)
if 'object' not in str(attr) and 'method' not in str(attr):
items.append([str(name), str(attr), False])
p = Pages(self.bot, message=ctx.message, entries = items, per_page=10)
p.embed = discord.Embed(title="Inspection Results", colour=discord.Colour(0xdc4643))
p.embed.set_thumbnail(url="https://cdn.discordapp.com/app-icons/293110345076047893/15e2a6722723827ff9bd53ca787df959.jpg")
p.embed.set_author(name="CSSS-Minion", icon_url="https://cdn.discordapp.com/app-icons/293110345076047893/15e2a6722723827ff9bd53ca787df959.jpg")
p.embed.set_footer(text="CSSS-Minion", icon_url="https://cdn.discordapp.com/app-icons/293110345076047893/15e2a6722723827ff9bd53ca787df959.jpg")
await p.paginate()
else:
self.bot.say("You not a dev,shoo!")
def levels(self, ctx):
self.cur.execute('SELECT * FROM (SELECT *,row_number() OVER(ORDER BY exp DESC) FROM experience) AS filter')
res = list(self.cur.fetchall())
# print(res)
items = []
for item in res:
items.append(['#{}. {}'.format(str(item[6]), str(item[1])), 'Level: {} \nExperience: {}'.format(str(item[4]), str(int(item[3])))])
p = Pages(self.bot, per_page=10)
p.embed = discord.Embed(title="Server Level Rankings", colour=discord.Colour(0xdc4643))
p.embed.set_thumbnail(url="https://cdn.discordapp.com/app-icons/293110345076047893/15e2a6722723827ff9bd53ca787df959.jpg")
p.embed.set_author(name="CSSS-Minion", icon_url="https://cdn.discordapp.com/app-icons/293110345076047893/15e2a6722723827ff9bd53ca787df959.jpg")
p.embed.set_footer(text="CSSS-Minion", icon_url="https://cdn.discordapp.com/app-icons/293110345076047893/15e2a6722723827ff9bd53ca787df959.jpg")
await p.paginate()
def __init__(self, bot):
self.bot = bot
# Voting done,command disabled
# @commands.command()
# async def vote():
# embed = discord.Embed(colour=discord.Colour(0xdc4643),timestamp=datetime.datetime.utcfromtimestamp(1490339531))
# embed.set_thumbnail(url="https://cdn.discordapp.com/app-icons/293110345076047893/15e2a6722723827ff9bd53ca787df959.jpg")
# embed.set_author(name="CSSS-Minion",icon_url="https://cdn.discordapp.com/app-icons/293110345076047893/15e2a6722723827ff9bd53ca787df959.jpg")
# embed.set_footer(text="CSSS-Minion",icon_url="https://cdn.discordapp.com/app-icons/293110345076047893/15e2a6722723827ff9bd53ca787df959.jpg")
# embed.add_field(name="CSSS Voting Information",value="The voting period for the Computing Science Student Society General Elections for the 2017-2018 term begins on Monday March 20th,2017 at 11:59 PM and closes on Monday March 27th,2017 at 11:59 PM. \n\nVisit https://www.sfu.ca/~pjalali/speeches.html to view candidate speeches,and http://websurvey.sfu.ca/survey/273372327 to vote.")
# await bot.say(embed=embed)
# @commands.command(pass_context = True)
# async def voteresult(self,ctx):
# """Return the voting results from the previous CSSS election."""
# if ctx.invoked_subcommand is None:
# embed = discord.Embed(title="CSSS Exec Positions",colour=discord.Colour(0xdc4643),timestamp=datetime.datetime.utcfromtimestamp(1490339531))
# embed.set_thumbnail(url="https://cdn.discordapp.com/app-icons/293110345076047893/15e2a6722723827ff9bd53ca787df959.jpg")
# embed.set_author(name="CSSS-Minion",icon_url="https://cdn.discordapp.com/app-icons/293110345076047893/15e2a6722723827ff9bd53ca787df959.jpg")
# embed.set_footer(text="CSSS-Minion",icon_url="https://cdn.discordapp.com/app-icons/293110345076047893/15e2a6722723827ff9bd53ca787df959.jpg")
# embed.add_field(name="President",value="David Miiller")
# embed.add_field(name="Vice President",value="Jon Loewen")
# embed.add_field(name="Treasurer",value="Dustin Cao")
# embed.add_field(name="Director of Resources",value="Kiarash Mirsalehi")
# embed.add_field(name="Director of Events",value="Brendan Chan")
# embed.add_field(name="Director of Communications",value="Henry Zhao")
# embed.add_field(name="Director of Archives",value="Josh Wu")
# embed.add_field(name="Source Code",value="https://github.com/henrymzhao/csss-minion/")
# await self.bot.say(embed=embed)
# the following several functions are inspired by formatterhelper and default_help command
def em(self, *desc):
"""Make an embedded message
Usage: em <body>
Restricted command
"""
author = ctx.message.author
if author.permissions_in(ctx.message.channel).manage_channels or author.server_permissions.manage_channels:
try:
color = author.colour
except Exception:
color = discord.Colour(r.randrange(0xffffff))
string = ""
for w in desc:
string += w + " "
string = string.strip()
embed = discord.Embed(description = string, color = color)
#embed.set_thumbnail(url=author.avatar_url)
embed.set_author(name=author.display_name, icon_url = author.avatar_url)
await self.bot.say(embed = embed)
try:
await self.bot.delete_message(ctx.message)
except Exception:
#thats ok
print("Not allowed to delete message")
#@commands.command(pass_context = True)
#async def allowedEmbed(self,ctx):
# #echoes permissions
# await self.bot.say(ctx.message.author.permissions_in(ctx.message.channel).manage_channels)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。