async def wikipedia_search(self, ctx, *, args): wikipedia.set_lang('es') wiki = wikipediaapi.Wikipedia('es') wiki_logo = """ https://upload.wikimedia.org/wikipedia/commons/thumb/7/77/Wikipedia_svg_logo.svg/1200px-Wikipedia_svg_logo.svg.png """ def get_summary(page): p = page.summary.split('.') sentences = f'{p[0]}. {p[1]}. {p[2]}. {p[3]}. {p[4]}.' return sentences result = wikipedia.search(args, results=10) embed = discord.Embed(color=rbColor()) embed.set_thumbnail(url=wiki_logo) embed.add_field(name='Estos fueron los resultados de tu búsqueda:', value=f'1. **{result[0]}**\n2. **{result[1]}**\n' f'3. **{result[2]}**\n4. **{result[3]}**\n' f'5. **{result[4]}**\n6. **{result[5]}**\n' f'7. **{result[6]}**\n8. **{result[7]}**\n' f'9. **{result[8]}**\n10. **{result[9]}**', inline=False) embed.set_footer(text='Escribe el número correspondiente' 'al artículo que deseas obtener.') await ctx.send(embed=embed) def is_author(m): return m.author == ctx.author try: selected_page = await self.bot.wait_for('message', check=is_author, timeout=45.0) except asyncio.TimeoutError: await ctx.send('Tu petición expiró.') else: index = int(selected_page.content) - 1 page = wiki.page(result[index]) e = discord.Embed(color=rbColor(), title=page.title, description=get_summary(page)) e.set_author(name=f'{page.title} en Wikipedia', url=page.canonicalurl) e.set_thumbnail(url=wiki_logo) await ctx.send(embed=e)
async def gay(self, ctx, member: Member = None): gay_percentage = randint(0, 100) e = Embed(color=rbColor()) if member is not None: e.add_field(name='Según mis cálculos...', value=f'{member.name} es un **{gay_percentage}%**' ' homosexual :rainbow_flag:') else: e = Embed(color=rbColor()) e.add_field(name='Según mis cálculos...', value=f'Sos un **{gay_percentage}%**' ' homosexual :rainbow_flag:') await ctx.send(embed=e)
async def info(self, ctx): app = await self.bot.application_info() prefix = self.bot.command_prefix users = len(self.bot.users) e = Embed(description='**RoboTito** es un bot centrado en la' ' facilidad de uso, la variedad de' ' comandos y la diferenciación de sí' ' mismo por sobre otros utilizando' ' funcionalidades innovadoras o pocas' ' veces vistas.', color=rbColor()) e.set_thumbnail(url=app.icon_url) e.add_field(name='Servidores', value='Participo en un total de:' f' **{len(self.bot.guilds)}** servidores.', inline=False) e.add_field(name='Creador', value=f'Fui creado por: **{app.owner}**', inline=False) e.add_field(name='Prefijo', value=f'Mis prefijo es: {prefix[0]}', inline=False) e.add_field(name='Usuarios', value=f'Puedo ver a un total de **{users}** usuarios entre' ' todos los servidores en los que participo.', inline=False) e.add_field(name='Invitación', value='Puedes invitarme a tu servidor a través de este' ' [link](https://discord.com/api/oauth2/authorize?' 'client_id=820819824669491210&permissions=8' '&scope=bot).', inline=False) await ctx.send(embed=e)
async def searchimage(self, ctx, *, query: str): async def search_image(query: str): url = "https://bing-image-search1.p.rapidapi.com/images/search" querystring = {"q": query, "mkt": "es-AR", "count": "30"} headers = { 'x-rapidapi-key': Utility.get_rapidapi(), 'x-rapidapi-host': "bing-image-search1.p.rapidapi.com" } async with ClientSession() as session: async with session.get(url=url, headers=headers, params=querystring) as r: if r.status == 200: json_response = await r.json() index = randint(0, 30) return json_response['value'][index]['contentUrl'] else: return if not query: await ctx.send('Tienes que buscar algo.') else: e = discord.Embed(color=rbColor(), description=f'**{query}**, enlace original:' f' [aquí]({await search_image(query)})') e.set_author(name='Imágenes de Bing', icon_url='https://pluspng.com/img-png/' 'bing-logo-png-png-ico-512.png') e.set_image(url=await search_image(query)) await ctx.send(embed=e)
async def utctime(self, ctx): e = discord.Embed(title=f'Son las{str(datetime.utcnow())[10:][:6]}' ' (UTC)', color=rbColor()) e.set_author(name='Tiempo del meridiano de Greenwich', url='https://time.is/es/UTC', icon_url=timezone_icon) await ctx.send(embed=e)
async def penis(self, ctx, member: Member = None): penis_size = randint(0, 100) e = Embed(color=rbColor()) if member is not None: e.add_field(name=f'El miembro reproductor de {member.name} mide:', value=f'**{penis_size}**' f' {VarietyHelp.get_penis(penis_size)}.', inline=False) else: e = Embed(color=rbColor()) e.add_field(name='Tu miembro reproductor mide:', value=f'**{penis_size}**' f' {VarietyHelp.get_penis(penis_size)}.', inline=False) await ctx.send(embed=e)
async def eightball(self, ctx, *, args): if args is not None: e = Embed(color=rbColor()) e.add_field(name=f'**{VarietyHelp.get_8ball()}**', value=f'*"{args}"*') await ctx.send(embed=e) else: await ctx.send('Deberías preguntar algo.')
def rr_death(winner, loser): e = Embed(color=rbColor()) e.add_field(name=choice(rr['death']), value=f'{loser} murió, es una pena.' f' {winner} ganó esta ronda.', inline=False) e.set_image(url=Helpers.gif('russianroulette')) return e
async def documentation(self, ctx): e = Embed(color=rbColor(), description='[RoboTito en **GitBook**]' '(https://ticiano-morvan.gitbook.io)') e.set_author(name='Documentación', icon_url='https://create.twu.ca/wp-content/uploads/' '2017/08/gitbook-logo-small.png') await ctx.send(embed=e)
async def exchange(self, ctx, currency_from: str, currency_to: str, amount: int = None): async def exchangeRate(cFrom: str, cTo: str): u = f'https://exchangerate-api.p.rapidapi.com/rapid/latest/{cFrom}' headers = { 'x-rapidapi-key': Utility.get_rapidapi(), 'x-rapidapi-host': "exchangerate-api.p.rapidapi.com" } async with ClientSession() as session: async with session.get(url=u, headers=headers) as r: if r.status == 200: json_response = await r.json() return json_response['rates'][cTo] else: return fromCurrency = str.upper(currency_from) toCurrency = str.upper(currency_to) exchange = float(await exchangeRate(fromCurrency, toCurrency)) if amount is not None: result = round(exchange * amount) e = discord.Embed(color=rbColor()) e.set_author(name='Conversión de monedas', icon_url='https://cdn0.iconfinder.com/data/icons/' 'business-cool-vector-3/128/120-512.png', url='https://rapidapi.com/exchangerateapi/api/' 'exchangerate-api/') e.add_field(name=f'La conversión de ${amount} {fromCurrency}' f' a {toCurrency} es:', value=f'${result} {toCurrency}, a fecha de hoy.') await ctx.send(embed=e) else: e = discord.Embed(color=rbColor()) e.set_author(name='Tasa de cambio', icon_url='https://cdn0.iconfinder.com/data/icons/' 'business-cool-vector-3/128/120-512.png', url='https://rapidapi.com/exchangerateapi/api/' 'exchangerate-api/') e.add_field(name=f'Por cada $1 {fromCurrency}, deberás pagar:', value=f'${exchange} {toCurrency}, a fecha de hoy.') await ctx.send(embed=e)
def language_embed(word, translation, fromlang, tolang): e = discord.Embed(title=translation, description=f'La traducción de "{word}" del ' f'**{fromlang}** al **{tolang}**' f' es {translation}.', color=rbColor()) e.set_footer(text='translate-python, por Terry Yin', icon_url='attachment://image.png') return e
async def useravatar(self, ctx, member: User = None): e = Embed(color=rbColor()) if member is not None: e.set_author(name=member.name, icon_url=member.avatar_url) e.set_image(url=member.avatar_url) else: e.set_author(name=ctx.author.name, icon_url=ctx.author.avatar_url) e.set_image(url=ctx.author.avatar_url) await ctx.send(embed=e)
def get_embed(type: str, author, member=None): e = Embed(color=rbColor()) if member is not None: e.add_field(name=Helpers.header(f'h_{type}'), value=Helpers.sentence(author, f'm_{type}', member)) else: e.add_field(name=Helpers.header(f'h_{type}'), value=Helpers.sentence(author, f'm_{type}')) e.set_image(url=Helpers.gif(type)) return e
async def love(self, ctx, member: Member = None): love_probability = randint(0, 100) if member is not None: e = Embed(color=rbColor()) e.add_field(name=f'El amor entre {member.name} y tú es del...', value=f'**{love_probability}%**,' f' {VarietyHelp.get_love(love_probability)}') e.set_image(url=VarietyHelp.get_love_gif(love_probability)) await ctx.send(embed=e) else: await ctx.send('Deberías mencionar a alguien.')
async def championrole(self, ctx, role: str): if role in ['top', 'jg', 'mid', 'adc', 'support']: champ = get_role(role) e = create_embed(champ) await ctx.send(embed=e) else: e = Embed(color=rbColor()) e.add_field(name='No reconocí ese rol.', value=f'{role} no es un rol válido. Vuelve a' ' intentarlo usando: **top**, **jg**,' ' **mid**, **adc** o **support**.') await ctx.send(embed=e)
async def localtime(self, ctx, hours: int = None): if not hours: await ctx.send('Para averiguar la hora de tu zona horaria,' ' ingresá la cantidad de horas de diferencia' ' con el tiempo del meridiano de Greenwich.' ' Por ejemplo, para Argentina (UTC -3)' ' ingresá `-3` después del comando.') else: e = discord.Embed(title=f'Son las{Utility.get_local_time(hours)}', color=rbColor()) e.set_author(name='Tiempo de tu zona horaria', icon_url=timezone_icon) await ctx.send(embed=e)
async def send_command_help(self, command): e = discord.Embed(color=rbColor(), description=command.help) e.set_author(name=f'Comandos - {command.name}', url='https://ticiano-morvan.gitbook.io/spanish/comandos') aliases = command.aliases if aliases is not None: e.add_field(name="Aliases", value=", ".join(aliases), inline=False) e.add_field(name='Uso', value=f'`{self.get_command_signature(command)}`', inline=False) e.set_footer(text='Argumentos: <requerido> [opcional]') channel = self.get_destination() await channel.send(embed=e)
async def send_cog_help(self, cog): e = discord.Embed(color=rbColor(), title=cog.qualified_name, description=cog.description) e.add_field(name='Comandos', value=await MyHelp.get_all_commands(self, cog.get_commands()), inline=False) e.set_footer(text='r.help <comando> para más información. ' '- <requerido> [opcional]') channel = self.get_destination() await channel.send(embed=e)
async def probability(self, ctx, *, args): if args is not None: probability = randint(0, 100) e = Embed(color=rbColor()) e.add_field(name='La probabilidad de...', value=f'"*{args}*"', inline=False) e.add_field(name='Es de un...', value=f'**{probability}%**', inline=False) await ctx.send(embed=e) else: await ctx.send('Deberías preguntar algo.')
async def championname(self, ctx, *, name: str): champ = get_name(name) if champ is not None: e = create_embed(champ) await ctx.send(embed=e) else: e = Embed(color=rbColor()) e.add_field(name='Hubo un error', value='No pude reconocer a ese campeón, por' ' favor, vuelve a intentarlo respetando' ' mayúsculas y símbolos. Los nombres exactos' ' que utlizo se encuentran en https://las.op.gg/' 'champion/statistics') await ctx.send(embed=e)
async def serverroles(self, ctx): e = Embed(color=rbColor()) def roles(guild: Guild): all_roles = ' ' for role in reversed(guild.roles): if role.name == '@everyone': pass else: all_roles += f'<@&{role.id}> ({len(role.members)})\n' return all_roles e.add_field(name='Todos los roles de este servidor:', value=roles(ctx.guild)) await ctx.send(embed=e)
def create_embed(champ): index = str(champ) e = Embed(color=rbColor()) e.set_author(name='Campeón de League of Legends', url=champs[index]['lolpage'], icon_url='https://img1.wikia.nocookie.net/' '__cb20150402234343/leagueoflegends/images/1/12/' 'League_of_Legends_Icon.png') e.add_field(name=f"{champs[index]['name']}, {champs[index]['header']}", value=champs[index]['description'], inline=False) e.add_field(name='Objetos, runas y builds:', value=f"[OP.GG]({champs[index]['op.gg']})", inline=False) e.set_image(url=champs[index]['icon']) return e
async def github(self, ctx): e = Embed(color=rbColor(), title='GitHub', description='[Repositorio](https://github.com/' 'Ti7oyan/RoboTito)') e.set_thumbnail(url='https://www.shareicon.net/data/2016/06/20/' '606964_github_4096x4096.png') e.add_field(name='Formas de contribuir:', value='1. Avisándonos de errores: [**Issues**]' '(https://github.com/Ti7oyan/RoboTito/issues)\n' '2. Proponiendo cambios: [**PRs**]' '(https://github.com/Ti7oyan/RoboTito/pulls)\n' '3. Programando: [**Contributing**]' '(https://github.com/Ti7oyan/RoboTito/blob/master/' 'CONTRIBUTING.md)\n') await ctx.send(embed=e)
async def url_shortener(self, ctx, *, url): async def shortener_api(request: str): key = Utility.get_cuttly() url = request api_url = f'https://cutt.ly/api/api.php?key={key}&short={url}' async with ClientSession() as session: async with session.post(url=api_url) as r: if r.status == 200: json_response = await r.json() return json_response else: pass link = await shortener_api(url) e = discord.Embed(color=rbColor()) e.add_field(name=link['url']['title'], value=link['url']['shortLink']) await ctx.send(embed=e)
def user(guild: discord.Guild, action, moderator: discord.Member, reason=None): e = discord.Embed(color=rbColor()) e.set_author(name=guild.name, icon_url=guild.icon_url) e.set_thumbnail(url=guild.icon_url) if reason is not None: e.add_field(name=f'Fuiste {action} de {guild.name}.', value=f'Debido a "{reason}".') else: e.add_field(name=f'Fuiste {action} de {guild.name}.', value='Sin motivos especificados.') e.add_field(name='Moderador a cargo', value=moderator.name, inline=False) return e
def guild(guild: discord.Guild, member: discord.Member, action, moderator: discord.Member, reason=None): e = discord.Embed(color=rbColor()) e.set_author(name=guild.name, icon_url=guild.icon_url) e.set_thumbnail(url=member.avatar_url) if reason is not None: e.add_field(name=f'{member.name} fue {action}.', value=f'Por "{reason}".') else: e.add_field(name=f'{member.name} fue {action}.', value='Sin motivos especificados.') e.add_field(name='Moderador a cargo:', value=moderator.name, inline=False) return e
def guild_embed(guild: Guild): """Returns an embed with information about the guild.""" e = Embed(title=guild.name, color=rbColor()) e.set_thumbnail(url=guild.icon_url) e.add_field(name='🚻 Miembros', value=f'**{len(guild.members)}** miembros.') e.add_field(name='⚙ Categorías', value=f'**{len(guild.categories)}** categorías.') e.add_field(name='📢 Canales', value=f'**{len(guild.channels)}** canales en total.\n ' f'**{len(guild.text_channels)}** canales de texto.\n' f' **{len(guild.voice_channels)}** canales de voz.') e.add_field(name='🤡 Emojis', value=f'**{len(guild.emojis)}** emojis.') e.add_field(name='🛡 Roles', value=f' **{len(guild.roles)}** roles.') e.add_field(name='🔧 Creación', value=Server.guild_creation(guild)) e.add_field(name='🔗 Identificador', value=guild.id) e.add_field(name='🤴 Dueño/a del servidor', value=f'**{guild.owner.mention}**') return e
async def covid19(self, ctx, *, country: str): async def covid19_request(country: str): """Returns information about a desired country.""" url = "https://covid-19-data.p.rapidapi.com/country" query = {"name": country} headers = { 'x-rapidapi-key': Utility.get_rapidapi(), 'x-rapidapi-host': "covid-19-data.p.rapidapi.com" } async with ClientSession() as session: async with session.get(url=url, headers=headers, params=query) as r: if r.status == 200: json_response = await r.json() return json_response else: return if not country: await ctx.send('Necesito que me digas el país del cual quieres' ' conocer su información. **ATENCIÓN**: por' ' motivos externos a RoboTito, necesito que' ' escribas el nombre del país en inglés.') else: c19 = await covid19_request(country) e = discord.Embed(color=rbColor(), title=f'COVID-19: {c19[0]["country"]}') e.add_field(name='Confirmados ⚠️', value=format(c19[0]["confirmed"], ','), inline=False) e.add_field(name='Recuperados ☑️', value=format(c19[0]["recovered"], ','), inline=False) e.add_field(name='Críticos ❗️', value=format(c19[0]["critical"], ','), inline=False) e.add_field(name='Muertes ❌', value=format(c19[0]["deaths"], ','), inline=False) await ctx.send(embed=e)
async def on_command_error(self, ctx, error): e = Embed(color=rbColor()) if isinstance(error, commands.CommandNotFound): e.add_field(name='Comando erróneo', value='No pude encontrar ese comando,' ' por lo que puede que no exista,' ' esté deshabilitado o lo hayas escrito mal.') await ctx.send(embed=e) elif isinstance(error, commands.MissingPermissions): e.add_field(name='No tienes los permisos necesarios', value='Te faltan los permisos requeridos' ' para usar este comando.') await ctx.send(embed=e) elif isinstance(error, commands.MissingRequiredArgument): e.add_field(name='Necesito más argumentos', value='Escribe `r.help <comando>`' ' para más información.') await ctx.send(embed=e) elif isinstance(error, commands.MemberNotFound): e.add_field(name='Usuario no encontrado', value='Inténtalo otra vez, trata de mencionar' ' al correcto.') await ctx.send(embed=e) elif isinstance(error, commands.CommandOnCooldown): e.add_field(name='¡Comando en enfriamiento!', value='Por favor, reinténtalo en ' f'**{error.retry_after:.2f}** segundos.') await ctx.send(embed=e) else: e.add_field(name='Hubo un error inesperado.', value='Si bien no pudimos detectar el error exacto,' ' puedes obtener más información en la' ' documentación. Usá `r.docs` para ir a ella.') await ctx.send(embed=e)
class MyHelp(commands.MinimalHelpCommand): async def send_bot_help(self, mapping): ctx = self.context embed = discord.Embed(title='Ayuda de RoboTito') embed.set_thumbnail(url=ctx.me.avatar_url) usable = 0 for cog, bot_commands in mapping.items(): if filtered_commands := await self.filter_commands(bot_commands): amount_commands = len(filtered_commands) usable += amount_commands if cog: name = cog.qualified_name else: name = "Varios" embed.add_field(name=f'{name}', value=f'**{amount_commands}** ' 'comandos disponibles.') embed.description = f'**{len(bot.commands)}** comandos en total.' embed.color = rbColor() embed.set_footer(text='r.help <categoría> para más información.') await ctx.send(embed=embed)