async def quote_info(ctx, row): em = Embed(title=row['invoke'], color=Colour.dark_blue()) if row['text'].startswith("http") or row['text'].startswith(" http"): em.set_thumbnail(url=row["text"]) else: em.description = (row["text"]) if row['user_id']: member = ctx.guild.get_member(row['user_id']) if member: display = member.display_name em.set_author(name='Tag info', icon_url=member.avatar_url) else: display = row['created_by'] em.add_field(name='Created by', value=display, inline=True) elif row['created_by']: em.add_field(name='Created by', value=row['created_by'], inline=True) if row['created_at']: date = row['created_at'] em.add_field(name='Created at', value=f'{date:%d. %B %Y : %H:%M:%S}', inline=True) return em
async def latest(self, ctx): async with ctx.channel.typing(): async with self.bot.session.get( f"https://beatsaver.com/api/maps/latest") as resp: response = loads(await resp.text()) embed = Embed(colour=Colour.dark_blue()) embed.set_thumbnail( url= f"https://cdn.beatmaps.io/{response['docs'][0]['versions'][0]['hash']}.jpg" ) embed.set_author(name="BeatSaver Latest", url=f"https://beatsaver.com/") data = list() for result in response["docs"]: if result["automapper"] is True: author_emote = "🤖" else: author_emote = "🥰" diff_message = str() for diff in result["versions"][0]["diffs"]: diff_name = diff['difficulty'] diff_message = f"{diff_message} {diff_emotes[diff_name]}" m, s = divmod(result["metadata"]["duration"], 60) message = f"""🔑 {result['id']} {author_emote} {result['metadata']['levelAuthorName']} 💾 {result['stats']['downloads']:,} 💯 {int(result['stats']['score']*100)}% ⏱ {m:02d}:{s:02d} 📅 {(datetime.fromisoformat(result['uploaded'][:-1])).strftime('%Y/%m/%d')} {diff_message} [BS Page](https://beatsaver.com/maps/{result['id']})""" data.append((result["name"], message)) pages = menus.MenuPages(source=SearchMenu(data, embed), clear_reactions_after=True) await pages.start(ctx)
async def element_color(element): switch = { 'Light': Colour.gold(), 'Dark': Colour.dark_purple(), 'Fire': Colour.dark_red(), 'Water': Colour.dark_blue(), 'Forest': Colour.dark_green() } return switch.get(element)
async def quote_embed(row): em = Embed(title=row['invoke'], color=Colour.dark_blue()) if row['text'].startswith("http") or row['text'].startswith(" http"): em.set_image(url=row["text"]) else: em.description = (row["text"]) return em
async def beatsaver(self, ctx, beatmap_key, difficulty=None): async with self.bot.session.get( f"https://beatsaver.com/api/maps/id/{beatmap_key}") as resp: try: response = loads(await resp.text()) except JSONDecodeError: raise commands.BadArgument if "error" in response: if response["error"] != "Not Found": logging.error(response["error"]) raise commands.BadArgument m, s = divmod(response["metadata"]["duration"], 60) embed = Embed(title=response["name"], url=f"https://beatsaver.com/maps/{beatmap_key}", colour=Colour.dark_blue()) if difficulty is None: diff_stats = response["versions"][0]["diffs"][-1] else: for diff in response["versions"][0]["diffs"]: if diff["difficulty"].lower() == difficulty.lower(): diff_stats = diff break if not diff_stats: raise BadArgument # Could be improved, logic errors if map has more than one characteristic # Low prioty issue though since majority of maps now a days all use the standard characteristic diff_emotes_message = str() for diff in response["versions"][0]["diffs"]: diff_name = diff['difficulty'] diff_emotes_message = f"{diff_emotes_message} {diff_emotes[diff_name]}" embed.add_field( name="Map Stats", value= f"Duration: {m:02d}:{s:02d}\nBPM: {response['metadata']['bpm']}\nMapper: {response['metadata']['levelAuthorName']}\n{diff_emotes_message}", inline=True) embed.add_field( name="BeatSaver Stats", value= f"🔑: {response['id']}\n💾: {response['stats']['downloads']:,}\n💯: {int(response['stats']['score']*100)}%\n📅: {(datetime.fromisoformat(response['uploaded'][:-1])).strftime('%Y/%m/%d')}", inline=True) embed.add_field(name="\u200B", value="\u200B", inline=True) value = f"{diff_stats_emotes['nps']}: {round(diff_stats['nps'],2)}\n{diff_stats_emotes['njs']}: {diff_stats['njs']}\n{diff_stats_emotes['notes']}: {diff_stats['notes']}\n{diff_stats_emotes['bombs']}: {diff_stats['bombs']}" if "stars" in diff_stats: value = f"{diff_stats_emotes['star']}: {diff_stats['stars']}\n" + value embed.add_field( name=f"Difficulty Stats {diff_emotes[(diff_stats['difficulty'])]}", value=value, inline=True) embed.add_field( name="Links", value= f"[Preview Map](https://skystudioapps.com/bs-viewer/?id={response['id']})\n[Download Map]({response['versions'][0]['downloadURL']})\n[Song on Youtube](https://www.youtube.com/results?search_query={response['metadata']['songAuthorName'].replace(' ','+')}+{response['name'].replace(' ','+')})\n[Song on Spotify](https://open.spotify.com/search/{response['name'].replace(' ','%20')})", inline=True) embed.add_field(name="\u200B", value="\u200B", inline=True) embed.set_image(url=response['versions'][0]['coverURL']) await ctx.reply(embed=embed)
def get_random_color() -> Colour: """ TODO: Add more colors that look good :return: """ colors = [ Colour.blurple(), Colour.dark_blue(), Colour.dark_orange(), Colour.dark_magenta(), Colour.teal(), Colour.magenta(), Colour.dark_gold(), Colour.blurple() ] return random.choice(colors)
async def _axs_count(ctx, *, event_id): url = f'{API_BASE_URL}/axsstockchecker?access_code={API_ACCESS_CODE}&event_id={event_id}' json_response = await http_get(url) if not json_response or "sections" not in json_response: await ctx.send("Error fetching info from AXS") return # create the embed bot_msg = BotResponse("AXS Inventory Count", event_id, Colour.dark_blue()) bot_msg.set_name("Event Link") bot_msg.set_url(f"https://tix.axs.com/{event_id}") for section in json_response["sections"]: bot_msg.add_section(section["section"], section["count"]) bot_msg.build_display() await ctx.send(embed=bot_msg)
async def _generate_embed(self, event: Event) -> Embed: embed = Embed( title=f'`Neuer Termin: {event.summary}`', type='rich', colour=Colour.dark_blue(), ) if event.description: embed.add_field(name='Beschreibung', value=event.description) embed.add_field(name='Start', value=event.dateStart.strftime('%m/%d/%Y %H:%M')) embed.add_field(name='Ende', value=event.dateEnd.strftime('%m/%d/%Y %H:%M')) embed.add_field(name='Erstellt', value=event.createdAt.strftime('%m/%d/%Y %H:%M'), inline=False) embed.set_footer(text=self.bot.signature) return embed
async def encounter(ctx): embedded_enc = Embed(color=Colour.dark_blue(), description='Random Encounter: \n' + enc.get_random_encounter()) await ctx.send(embed=embedded_enc)
async def on_message(self, message, **kwargs): client = self.client trans = self.trans prefix = kwargs.get("prefix") lang = kwargs.get("lang") # Check if this is a valid command if not is_valid_command(message.content, commands, prefix): return else: self.stats.add(MESSAGE) def startswith(*matches): for match in matches: if message.content.startswith(match): return True return False # !status if startswith(prefix + "status"): server_count = 0 members = 0 channels = 0 # Iterate though servers and add up things for guild in client.guilds: server_count += 1 members += int(guild.member_count) channels += len(guild.channels) embed = Embed(name=trans.get("MSG_STATUS_STATS", lang), colour=Colour.dark_blue()) embed.add_field(name=trans.get("MSG_STATUS_SERVERS", lang), value=trans.get("MSG_STATUS_SERVERS_L", lang).format(server_count), inline=True) embed.add_field(name=trans.get("MSG_STATUS_USERS", lang), value=trans.get("MSG_STATUS_USERS_L", lang).format(members), inline=True) embed.add_field(name=trans.get("MSG_STATUS_CHANNELS", lang), value=trans.get("MSG_STATUS_CHANNELS_L", lang).format(channels), inline=True) await message.channel.send("**Stats**", embed=embed) # !debug elif startswith(prefix + "debug", prefix + "stats more"): # Some more debug data # Ratelimit every 360 seconds if ((self.lt - time.time()) < 360) and not self.handler.is_bot_owner(message.author.id): await message.channel.send( trans.get("MSG_STATUS_RATELIMIT", lang)) return self.lt = time.time() # CPU cpu = psutil.cpu_percent(interval=0.3) # RAM def get_ram_usage(): nano_process = psutil.Process(os.getpid()) return round(nano_process.memory_info()[0] / float(2**20), 1) # Converts to MB mem_before = get_ram_usage() # Attempt garbage collection gc.collect() mem_after = get_ram_usage() garbage = round(mem_after - mem_before, 2) # OTHER nano_version = self.nano.version discord_version = d_version reminders = self.nano.get_plugin( "reminder").instance.reminder.get_reminder_amount() polls = self.nano.get_plugin( "voting").instance.vote.get_vote_amount() # Redis db stats redis_mem = self.handler.db_info("memory").get("used_memory_human") redis_size = self.handler.db_size() fields = trans.get("MSG_DEBUG_MULTI", lang).format(nano_version, discord_version, mem_after, abs(garbage), cpu, reminders, polls, redis_mem, redis_size) total_shards = len(self.client.shards.keys()) current_shard = message.guild.shard_id additional = trans.get("MSG_DEBUG_MULTI_2", lang).format(total_shards, current_shard) await message.channel.send(fields + "\n" + additional) # !prefix elif startswith(prefix + "prefix"): await message.channel.send(trans.get("MSG_PREFIX_OHYEAH", lang)) # nano.prefix elif startswith("nano.prefix"): await message.channel.send( trans.get("MSG_PREFIX", lang).format(prefix)) # !members elif startswith(prefix + "members"): ls = [member.name for member in message.guild.members] amount = len(ls) members = trans.get("MSG_MEMBERS_LIST", lang).format(", ".join(["`{}`".format(mem) for mem in ls])) + \ trans.get("MSG_MEMBERS_TOTAL", lang).format(amount) if len(members) > 2000: # Only send the number if the message is too long. await message.channel.send( trans.get("MSG_MEMBERS_AMOUNT", lang).format(amount)) else: await message.channel.send(members) # !server elif startswith(prefix + "server"): user_count = message.guild.member_count users_online = len([ user.id for user in message.guild.members if user.status == user.status.online ]) v_level = message.guild.verification_level if v_level == v_level.none: v_level = trans.get("MSG_SERVER_VL_NONE", lang) elif v_level == v_level.low: v_level = trans.get("MSG_SERVER_VL_LOW", lang) elif v_level == v_level.medium: v_level = trans.get("MSG_SERVER_VL_MEDIUM", lang) else: v_level = trans.get("MSG_SERVER_VL_HIGH", lang) text_chan = len(message.guild.text_channels) voice_chan = len(message.guild.voice_channels) channels = text_chan + voice_chan # Teal Blue embed = Embed(colour=Colour(0x3F51B5), description=trans.get("MSG_SERVER_ID", lang).format(message.guild.id)) if message.guild.icon: embed.set_author(name=message.guild.name, icon_url=message.guild.icon_url) embed.set_thumbnail(url=message.guild.icon_url) else: embed.set_author(name=message.guild.name) embed.set_footer(text=trans.get("MSG_SERVER_DATE_CREATED", lang). format(message.guild.created_at)) embed.add_field(name=trans.get("MSG_SERVER_MEMBERS", lang).format(user_count), value=trans.get("MSG_SERVER_MEMBERS_L", lang).format(users_online)) embed.add_field(name=trans.get("MSG_SERVER_CHANNELS", lang).format(channels), value=trans.get("MSG_SERVER_CHANNELS_L", lang).format( voice_chan, text_chan)) embed.add_field(name=trans.get("MSG_SERVER_VL", lang), value=v_level) embed.add_field( name=trans.get("MSG_SERVER_ROLES", lang), value=trans.get("MSG_SERVER_ROLES_L", lang).format(len(message.guild.roles) - 1)) owner = message.guild.owner embed.add_field(name=trans.get("MSG_SERVER_OWNER", lang), value=trans.get("MSG_SERVER_OWNER_L", lang).format( owner.name, owner.discriminator, owner.id)) await message.channel.send(trans.get("MSG_SERVER_INFO", lang), embed=embed)
"neutral": "https://emojipedia-us.s3.dualstack.us-west-1.amazonaws.com/thumbs/120/twitter/248/rocket_1f680.png", "void": "https://cdn.discordapp.com/attachments/700683544103747594/711013699841687602/void.png" } errorIcon = "https://emojipedia-us.s3.dualstack.us-west-1.amazonaws.com/thumbs/120/twitter/248/exclamation-mark_2757.png" winIcon = "https://emojipedia-us.s3.dualstack.us-west-1.amazonaws.com/thumbs/120/twitter/248/trophy_1f3c6.png" rocketIcon = "https://emojipedia-us.s3.dualstack.us-west-1.amazonaws.com/thumbs/120/twitter/248/rocket_1f680.png" # colours to use in faction-related embed strips factionColours = { "terran": Colour.gold(), "vossk": Colour.dark_green(), "midorian": Colour.dark_red(), "nivelian": Colour.dark_blue(), "neutral": Colour.purple() } # Data representing all ship items in the game. These are used to create bbShip objects, # which are stored in builtInShipObjs in a similar dict format. # Ships to not have tech levels in GOF2, so tech levels will be automaticaly generated # for the sake of the bot during bot.on_ready. builtInShipData = {} # Data representing all module items in the game. These are used to create bbModule objects, # which are stored in builtInModuleObjs in a similar dict format. builtInModuleData = {} # Data representing all primary weapon items in the game. These are used to create bbWeapon objects, # which are stored in builtInWeaponObjs in a similar dict format.
description='', colour=Colour.red(), ) general_help_embed = Embed( title="Commands", type="rich", description='', colour=Colour.blue(), ) gags_embed = Embed( title='Gags', type='rich', description='', colour=Colour.dark_blue() ) # Claiming Help -------------------------------------------------- claiming_help_embed.add_field( name='!claim', value="Claim a toon or group of toons. e.g. `!claim zen` or `!claim 2x`", inline=True ) claiming_help_embed.add_field( name='!unclaim', value="Unclaim a toon, group of toons, or all toons. e.g. `!unclaim all`", inline=True )
async def coin_embed(url): em = Embed(colour=Colour.dark_blue()) em.set_image(url=url) return em
async def on_message(message): if message.author == client.user: return # hello command elif message.content.startswith('*hello'): await message.channel.send("Hello <@" + str(message.author.id) + "> ! " + ":slight_smile:") # help command* elif message.content.startswith('*help'): embed = discord.Embed(title='Help', description='help for you :slight_smile:', colour=Colour.blue()) embed.add_field(name="For server admins (more info *info_server_admins)", value="nothing(yet)", inline=False) embed.add_field(name="not nice stuff (more info *info_not_nice)", value="`roast` `kill` `insane_detection`", inline=False) embed.add_field(name="Miscellaneous (more info *info_miscellaneous)", value="`coinflip` `hello` `credits` `hi bot`(creators only)", inline=False) embed.add_field(name="epic gifs (more info *info_gifs)", value="`table_flip` `fish_artillery` `nani`", inline=False) embed.add_field(name="made by SunnyJimBob#7082 ever since 07/27/2020", value="_ ", inline=False) await message.channel.send(message.channel, embed=embed) # more info about not nice stuff elif message.content.startswith("*info_not_nice"): embed = discord.Embed(title="More info about not nice stuff", description='info for you :slight_smile:', colour=Colour.red()) embed.add_field(name="roast", value="*roast @user will roast anyone you put after *roast", inline=False) embed.add_field(name="kill", value="*kill @user will make anyone you put after *kill die in a funny way", inline=False) embed.add_field(name="insane_detection", value="*insane_detection tells you how sane you are") await message.channel.send(message.channel, embed=embed) # more info about Miscellaneous elif message.content.startswith('*info_miscellaneous'): embed = discord.Embed(title='More info about miscellaneous', description='help for you :slight_smile:', colour=Colour.gold()) embed.add_field(name="hello", value="*hello makes the bot say hello back to you", inline=False) embed.add_field(name="coinflip", value="*coinflip randomly chooses between heads and tails ",inline=False) embed.add_field(name="credits",value="*credits gives you the list of people who worked on this bot", inline=False) embed.add_field(name="hi bot",value="only for creators",inline=False) await message.channel.send(embed=embed) # more info about gifs elif message.content.startswith('*info_gifs'): embed = discord.Embed(title="more info about gifs", description='info for you :slight_smile:', colour=Colour.green()) embed.add_field( name="*table_flip", value="will give you a table flip gif (credit to https://tenor.com/view/table-flip-machine-kaomoji-gif-17427776)", inline=False) embed.add_field( name="*fish_artillery", value="will give you a gif of a fish cannon (credit to https://tenor.com/view/fishy-explosion-human-fish-cannon-gif-17822939)", inline=False) embed.add_field( name="*nani", value=" will give you a nani gif (credit to https://media.giphy.com/media/1NVugSXiJGJZvWMOud/giphy.gif)", inline=False) await message.channel.send(message.channel, embed=embed) # coinflip elif message.content.startswith('*coinflip'): ok = random.randint(1, 100) if ok > 50: text = "heads" else: text = "tails" await message.channel.send(text) # credits elif message.content.startswith('*credits'): embed = discord.Embed(title='Credits', colour=Colour.blue()) embed.add_field(name="creator", value="SunnyJimBob#7082", inline=False) embed.add_field(name="contributor", value="Meow.#6462", inline=False) embed.add_field(name="sponsors", value="None(yet)", inline=False) await message.channel.send(message.channel, embed=embed) # hi bot elif message.content.startswith('*hi bot'): if str(message.author) == "SunnyJimBob#7082": await message.channel.send("hello creator") else: await message.channel.send("***ew your a normie, not a creator*** :rage: ") # gifs elif message.content.startswith('*table_flip'): await message.channel.send("https://tenor.com/view/table-flip-machine-kaomoji-gif-17427776") elif message.content.startswith('*fish_artillery'): await message.channel.send("https://tenor.com/view/fishy-explosion-human-fish-cannon-gif-17822939") elif message.content.startswith('*nani'): await message.channel.send("https://media.giphy.com/media/1NVugSXiJGJZvWMOud/giphy.gif") # insane_detection elif message.content.startswith('*insane_detection'): sane = random.randint(1, 100) if sane > 50: await message.channel.send("<@"+str(message.author.id) + ">") embed = discord.Embed(title='Your insane!', colour=Colour.dark_red()) embed.add_field(name="you are " + str(sane) + "% insane", value=":zany_face:") embed.add_field(name="Should you see a doctor?", value="Um duh your insane!!!", inline=False) elif sane < 50: message.channel.send("<@"+str(message.author.id)+">") embed = discord.Embed(title='Your sane!', colour=Colour.dark_blue()) embed.add_field(name="you are " + str(sane) + "% insane", value=":slight_smile:") embed.add_field(name="Should you see a doctor?", value="No, but you should still get it checked", inline=False) await message.channel.send(message.channel, embed=embed) # roast elif message.content.startswith('*roast'): hi = random.randint(1, 7) if hi == 1: await message.channel.send('Mirrors cant talk, luckly for you, they cant laugh either :rofl:') elif hi == 2: await message.channel.send('Some day youll go far... and i hope you stay there :rofl:') elif hi == 3: await message.channel.send('If laughter is the best medicine, your face must be curing the world. :rofl:') elif hi == 4: await message.channel.send( 'When i see your face theres not a thing i would change... except the direction i was walking in :rofl:') elif hi == 5: await message.channel.send('Hey, you have something on your chin... no, the 3rd one down :rofl:') elif hi == 6: await message.channel.send('you :rofl:') elif hi == 7: await message.channel.send('Everyone when you fall: OMG is the floor ok?')
from discord import Colour from random import seed, randint from datetime import datetime seed(datetime.now()) colours = [ Colour.teal(), Colour.dark_teal(), Colour.green(), Colour.dark_green(), Colour.blue(), Colour.dark_blue(), Colour.purple(), Colour.dark_purple(), Colour.magenta(), Colour.dark_magenta(), Colour.gold(), Colour.dark_gold(), Colour.orange(), Colour.dark_orange(), Colour.red(), Colour.dark_red(), Colour.lighter_grey(), Colour.light_grey(), Colour.dark_grey(), Colour.darker_grey(), Colour.blurple(), Colour.greyple(), Colour.from_rgb(randint(0, 255), randint(0, 255), randint(0, 255)) ]
async def user_account_info(ctx, data, bot_avatar_url): """ Send user account details from network for Layer 2 """ signers = " ".join([ f':map:`{signer["key"]}`\n:key:`{signer["type"]}` | :scales:`{signer["weight"]}`\n================' for signer in data["signers"] ]) dt_format = datetime.strptime(data["last_modified_time"], '%Y-%m-%dT%H:%M:%SZ') account_info = Embed( title=f':office_worker: Current On-Chain Wallet State :office_worker:', colour=Colour.dark_blue(), timestamp=datetime.utcnow()) account_info.set_author( name=f'{ctx.message.author} (ID: {ctx.message.author.id})', icon_url=bot_avatar_url, url=data["_links"]["self"]['href']) account_info.set_thumbnail(url=ctx.message.author.avatar_url) account_info.add_field(name=":map: Account Address :map:", value=f'```{data["account_id"]}```', inline=False) account_info.add_field(name=":calendar: Last Updated :calendar: ", value=f'`{dt_format}`', inline=True) account_info.add_field(name=":ledger: Last Ledger :ledger:", value=f'`{data["last_modified_ledger"]}`', inline=True) account_info.add_field( name="Thresholds", value=f'High: `{data["thresholds"]["high_threshold"]}`\n' f'Medium: `{data["thresholds"]["med_threshold"]}`\n' f'Low: `{data["thresholds"]["low_threshold"]}`') account_info.add_field( name=":money_with_wings: Sponsorship :money_with_wings: ", value=f'Sponsored: `{data["num_sponsored"]}`\n' f'Sponsoring: `{data["num_sponsoring"]}`') account_info.add_field( name=":triangular_flag_on_post: Flags :triangular_flag_on_post: ", value=f'Immutable: `{data["flags"]["auth_immutable"]}`\n' f'Required: `{data["flags"]["auth_required"]}`\n' f'Revocable: `{data["flags"]["auth_revocable"]}`\n') account_info.add_field( name=f':pen_ballpoint: Account Signers :pen_ballpoint: ', value=signers, inline=False) account_info.add_field( name=f':sunrise: Horizon Access :sunrise: ', value=f'[Effects]({data["_links"]["effects"]["href"]}) | ' f'[Offers]({data["_links"]["offers"]["href"]}) | ' f'[Operations]({data["_links"]["operations"]["href"]}) | ' f'[Payments]({data["_links"]["payments"]["href"]}) | ' f'[Trades]({data["_links"]["payments"]["href"]}) | ' f'[Transactions]({data["_links"]["transactions"]["href"]})', inline=False) await ctx.author.send(embed=account_info) gems_nfo = Embed(title=f'Account balances', color=Colour.dark_blue()) for coin in data["balances"]: if not coin.get('asset_code'): cn = 'XLM' else: cn = coin["asset_code"] if cn == "XLM": rates = get_rates(coin_name=f'stellar') in_eur = rate_converter(float(coin['balance']), rates["stellar"]["eur"]) in_usd = rate_converter(float(coin['balance']), rates["stellar"]["usd"]) in_btc = rate_converter(float(coin['balance']), rates["stellar"]["btc"]) in_eth = rate_converter(float(coin['balance']), rates["stellar"]["eth"]) in_rub = rate_converter(float(coin['balance']), rates["stellar"]["rub"]) in_ltc = rate_converter(float(coin['balance']), rates["stellar"]["ltc"]) xlm_nfo = Embed(title=f'XLM Wallet Balance Details', description=f'```{coin["balance"]} XLM```', color=Colour.dark_blue()) xlm_nfo.add_field(name=f':flag_us: USA', value=f'$ {in_usd:.4f}') xlm_nfo.add_field(name=f':flag_eu: EUR', value=f'€ {in_eur:.4f}') xlm_nfo.add_field(name=f':flag_ru: RUB', value=f'₽ {in_rub}') xlm_nfo.add_field(name=f'BTC', value=f'₿ {in_btc:.8f}') xlm_nfo.add_field(name=f'ETH', value=f'Ξ {in_eth:.8f}') xlm_nfo.add_field(name=f'LTC', value=f'Ł {in_ltc:.8f}') xlm_nfo.set_footer( text='Conversion rates provided by CoinGecko', icon_url= "https://static.coingecko.com/s/thumbnail-007177f3eca19695592f0b8b0eabbdae282b54154e1be912285c9034ea6cbaf2.png" ) await ctx.author.send(embed=xlm_nfo) else: gems_nfo.add_field(name=f':gem: {cn} :gem:', value=f"{coin['balance']}") await ctx.author.send(embed=gems_nfo)