From 0bb02f967dd1e3a3dd13e3b5ca0c20d33d20c02c Mon Sep 17 00:00:00 2001 From: Helixu Date: Sat, 20 Nov 2021 10:50:36 +0000 Subject: [PATCH 1/4] added cat! --- bot.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/bot.py b/bot.py index 9bff3c8..1f114a4 100755 --- a/bot.py +++ b/bot.py @@ -34,6 +34,14 @@ async def fox(ctx): file = File(io.BytesIO(await resp.read()),filename='fox.jpg') await ctx.send(random.choice(foxmsgs),file=file) +@bot.command(brief="cattttttt") +async def cat(ctx): + async with aiohttp.ClientSession() as session: + async with session.get('https://some-random-api.ml/animal/cat') as resp: + json = await resp.json() + await ctx.send(json["fact"]) + await ctx.send(json["image"]) + @bot.command(brief="gives you a fluffy panda") async def panda(ctx): From 37b48ad59a8c206d0ac2cb1e7f2fa22ca206ddd6 Mon Sep 17 00:00:00 2001 From: Helixu Date: Sat, 20 Nov 2021 14:42:37 +0000 Subject: [PATCH 2/4] Stable release - removing mc as not currently fit for stable release, fixed credits. --- bot.py | 22 ++-------------------- 1 file changed, 2 insertions(+), 20 deletions(-) diff --git a/bot.py b/bot.py index 1f114a4..17e9619 100755 --- a/bot.py +++ b/bot.py @@ -86,28 +86,9 @@ async def activity(ctx, atype, *, aname): async def invite(ctx): await ctx.send("Add this bot to your server: https://discord.com/oauth2/authorize?client_id=909103805264724038&permissions=274878203904&scope=bot") -@bot.command(hidden=True, brief="gives information about a minecraft user") -async def mc(ctx, *, name = None): - if not name: - embed = discord.Embed( - title = "No Minecraft user given!", - description = "You have not given a minecraft username, therefore I cannot find anything for you! usage: gib mc (name)" - ) - return await ctx.send(embed = embed) - async with aiohttp.ClientSession() as session: - async with session.get(f'https://some-random-api.ml/mc?username={name}') as resp: - json = await resp.json() - username = json["username"] - uuid = json["uuid"] - namehistory = json["name_history"] - await ctx.send(f""" -Username: {username} -UUID: {uuid} -Name History: {namehistory}""") - @bot.command(brief="gives credits") async def credits(ctx): - await ctx.send("""Images used in this bot are taken from: + await ctx.send("""API endpoints used in this bot are taken from: https://foxrudor.de/ https://some-random-api.ml https://shitfest.net @@ -121,6 +102,7 @@ xfnw#1113 (shitfest memes API) TFTWPhoenix#9240 (I dont know, hes cool I guess.) remi#9948 (also pretty cool ig) +Foxtrot is open source! Find our code at https://code.cat.casa/Helixu/Foxtrot """) @bot.command(brief="random meme") async def meme(ctx): From a096353bf7ad57981bb489aaa44eb8c501d4757b Mon Sep 17 00:00:00 2001 From: Helixu Date: Sun, 21 Nov 2021 12:03:58 +0000 Subject: [PATCH 3/4] bot.py Update stable release to newest unstable release. --- bot.py | 87 ++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 73 insertions(+), 14 deletions(-) mode change 100755 => 100644 bot.py diff --git a/bot.py b/bot.py old mode 100755 new mode 100644 index 17e9619..277e084 --- a/bot.py +++ b/bot.py @@ -1,6 +1,8 @@ + + import discord from discord import File, Streaming, Game, Activity, ActivityType, Status -from discord.ext import commands +from discord.ext import commands, tasks import io, aiohttp, asyncio, json, random, logging, requests @@ -12,6 +14,12 @@ foxmsgs = [ 'heres ur fox', ] +def getAllUsers(): + membercount = 0 + for guild in bot.guilds: + membercount += guild.member_count + return membercount + async def is_ginlang(ctx): """ are you ginlang or the other dude? @@ -34,20 +42,25 @@ async def fox(ctx): file = File(io.BytesIO(await resp.read()),filename='fox.jpg') await ctx.send(random.choice(foxmsgs),file=file) -@bot.command(brief="cattttttt") +@bot.command(brief="cattttttttt") async def cat(ctx): async with aiohttp.ClientSession() as session: async with session.get('https://some-random-api.ml/animal/cat') as resp: json = await resp.json() + error = json.get('error') + if error: + return await ctx.send(f'Received unexpected error, unclear instructions, got stuck in toaster! ({error})') await ctx.send(json["fact"]) await ctx.send(json["image"]) - @bot.command(brief="gives you a fluffy panda") async def panda(ctx): async with aiohttp.ClientSession() as session: async with session.get('https://some-random-api.ml/animal/panda') as resp: json = await resp.json() + error = json.get('error') + if error: + return await ctx.send(f'Received unexpected error, thats not good! ({error})') await ctx.send(json["fact"]) await ctx.send(json["image"]) @@ -57,6 +70,9 @@ async def koala(ctx): async with aiohttp.ClientSession() as session: async with session.get('https://some-random-api.ml/animal/koala') as resp: json = await resp.json() + error = json.get('error') + if error: + return await ctx.send(f'Received unexpected error, try our sister game, Minceraft! ({error})') await ctx.send(json["fact"]) await ctx.send(json["image"]) @@ -66,6 +82,9 @@ async def raccoon(ctx): async with aiohttp.ClientSession() as session: async with session.get('https://some-random-api.ml/animal/raccoon') as resp: json = await resp.json() + error = json.get('error') + if error: + return await ctx.send(f'Received unexpected error, blame ginlang! ({error})') await ctx.send(json["fact"]) await ctx.send(json["image"]) @@ -78,7 +97,7 @@ async def activity(ctx, atype, *, aname): if atype not in atypes: await ctx.send("invalid activity type. the valid types are "+' '.join(atypes.keys())) return - await bot.change_presence(activity=Activity(name=aname, type=atypes[atype], url="https://twitch.tv/xginlang")) + await bot.change_presence(activity=Activity(name=(aname + f" ¦ {str(getAllUsers())} users"), type=atypes[atype], url="https://twitch.tv/xginlang")) await ctx.send('Success!') @@ -86,6 +105,32 @@ async def activity(ctx, atype, *, aname): async def invite(ctx): await ctx.send("Add this bot to your server: https://discord.com/oauth2/authorize?client_id=909103805264724038&permissions=274878203904&scope=bot") +@bot.command(brief="gives information about a minecraft user") +async def mc(ctx, *, name = None): + if not name: + embed = discord.Embed( + title = "No Minecraft user given!", + description = "You have not given a minecraft username, therefore I cannot find anything for you! usage: gib mc (name)" + ) + return await ctx.send(embed = embed) + async with aiohttp.ClientSession() as session: + async with session.get(f'https://some-random-api.ml/mc?username={name}') as resp: + json = await resp.json() + error = json.get('error') + if error: + return await ctx.send(f'Received unexpected error, blame Mojang! ({error})') + username = json["username"] + uuid = json["uuid"] + #namehistory = ', '.join([f"Name: {i['name']} Changed at: {i['changedToAt']}" for i in json["name_history"]]) + embed = discord.Embed(title='Minecraft User Information') + embed.set_author(name=f'User {username}') + embed.add_field(name='UUID', value=f'{uuid}', inline=False) + embed.add_field(name='Name History', value=f"Name changes: {len(json['name_history'])}", inline=False) + for i in json["name_history"]: + embed.add_field(name=i['name'], value=f"Changed on: {i['changedToAt']}") + await ctx.send(embed = embed) + await ctx.send(f'To view names that did not show up here, go to ') + @bot.command(brief="gives credits") async def credits(ctx): await ctx.send("""API endpoints used in this bot are taken from: @@ -102,7 +147,7 @@ xfnw#1113 (shitfest memes API) TFTWPhoenix#9240 (I dont know, hes cool I guess.) remi#9948 (also pretty cool ig) -Foxtrot is open source! Find our code at https://code.cat.casa/Helixu/Foxtrot +Foxtrot is open source! Find the code at """) @bot.command(brief="random meme") async def meme(ctx): @@ -111,22 +156,36 @@ async def meme(ctx): json = await resp.json() await ctx.send(json["url"]) -#@bot.command() -#async def help(ctx): -# await ctx.send("""The current list of commands are: -#fox (Gets an image of a fox) -#activity (Sets bot activity, only works if you are a developer) -#invite (Gives bot invite link) -#help (this) -#""") +@bot.command(brief='makes things gay') +async def gay(ctx, member: discord.Member=None): + member = member or ctx.author + await ctx.trigger_typing() + async with aiohttp.ClientSession() as session: + async with session.get( + f'https://some-random-api.ml/canvas/gay?avatar={member.avatar_url_as(format="png")}' + ) as af: + if 300 > af.status >= 200 : + fp = io.BytesIO(await af.read()) + file = discord.File(fp, "gay.png") + embed = discord.Embed( + title="gaaaaaay", + color=0xf1f1f1, + ) + embed.set_image(url="attachment://gay.png") + await ctx.send(embed=embed, file=file) + else: + await ctx.send("An unexpected error happened, Steve.. I told you this already!") + + @bot.event async def on_ready(): await asyncio.sleep(1) # someone on stackoverflow said discord does not like if you are speedy - await bot.change_presence(activity=Streaming(name="Testing - bot may go offline at any point", url="https://twitch.tv/xginlang")) + await bot.change_presence(activity=Streaming(name=f"Dev Mode ¦ {str(getAllUsers())} users", url="https://twitch.tv/xginlang")) with open('token.json', 'r') as file: + # this breaks if you are on windows token = ''.join([line[:-1] for line in file.readlines()]) bot.run(token) From a3ad473a610f132d20a8dde123c1ed3fbe033b1c Mon Sep 17 00:00:00 2001 From: Helixu Date: Mon, 22 Nov 2021 21:07:02 +0000 Subject: [PATCH 4/4] restart script + restart command -contrib: Ecolipsy --- bot.py | 10 ++++++++-- start | 4 ++++ 2 files changed, 12 insertions(+), 2 deletions(-) create mode 100755 start diff --git a/bot.py b/bot.py index 277e084..628f1c3 100644 --- a/bot.py +++ b/bot.py @@ -22,9 +22,9 @@ def getAllUsers(): async def is_ginlang(ctx): """ - are you ginlang or the other dude? + are you ginlang or the other dudes? """ - if ctx.author.id in [287885666941927424, 894034804503351366]: + if ctx.author.id in [287885666941927424, 894034804503351366, 296736767158255616, 831598877320413244]: return True else: logchannel = await bot.fetch_channel(910622485916037150) @@ -88,6 +88,12 @@ async def raccoon(ctx): await ctx.send(json["fact"]) await ctx.send(json["image"]) +@bot.command(hidden=True) +@commands.check(is_ginlang) +async def restart(ctx): + await ctx.send("shutting down, beep boop.") + exit() + @bot.command(hidden=True) @commands.check(is_ginlang) diff --git a/start b/start new file mode 100755 index 0000000..cdfbf60 --- /dev/null +++ b/start @@ -0,0 +1,4 @@ +while [ true ] +do + python3 bot.py +done