2021-11-20 15:59:54 +00:00
2021-11-20 10:43:06 +00:00
import discord
from discord import File , Streaming , Game , Activity , ActivityType , Status
from discord . ext import commands
import io , aiohttp , asyncio , json , random , logging , requests
foxmsgs = [
' floofy fox ' ,
' here fops ' ,
' owo ' ,
' uwu ' ,
' heres ur fox ' ,
]
2021-11-20 15:59:54 +00:00
def getAllUsers ( ) :
membercount = 0
for guild in bot . guilds :
membercount + = guild . member_count
return membercount
2021-11-20 10:43:06 +00:00
async def is_ginlang ( ctx ) :
"""
are you ginlang or the other dude ?
"""
if ctx . author . id in [ 287885666941927424 , 894034804503351366 ] :
return True
else :
logchannel = await bot . fetch_channel ( 910622485916037150 )
await logchannel . send ( ' User ' + ctx . author . name + ' # ' + ctx . author . discriminator + ' ( ' + str ( ctx . author . id ) + ' ) has attempted to use a whitelist only command. ' )
return False
logging . basicConfig ( level = logging . INFO )
bot = commands . Bot ( command_prefix = ' gib ' )
@bot.command ( brief = " gives you a fluffy fox " )
async def fox ( ctx ) :
async with aiohttp . ClientSession ( ) as session :
async with session . get ( ' https://foxrudor.de/ ' ) as resp :
file = File ( io . BytesIO ( await resp . read ( ) ) , filename = ' fox.jpg ' )
await ctx . send ( random . choice ( foxmsgs ) , file = file )
2021-11-20 11:22:41 +00:00
@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 ( )
2021-11-20 16:53:11 +00:00
error = json . get ( ' error ' )
if error :
return await ctx . send ( f ' Received unexpected error, unclear instructions, got stuck in toaster! ( { error } ) ' )
2021-11-20 11:22:41 +00:00
await ctx . send ( json [ " fact " ] )
await ctx . send ( json [ " image " ] )
2021-11-20 10:43:06 +00:00
@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 ( )
2021-11-20 16:53:11 +00:00
error = json . get ( ' error ' )
if error :
return await ctx . send ( f ' Received unexpected error, thats not good! ( { error } ) ' )
2021-11-20 10:43:06 +00:00
await ctx . send ( json [ " fact " ] )
await ctx . send ( json [ " image " ] )
@bot.command ( brief = " omg koala " )
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 ( )
2021-11-20 16:53:11 +00:00
error = json . get ( ' error ' )
if error :
return await ctx . send ( f ' Received unexpected error, try our sister game, Minceraft! ( { error } ) ' )
2021-11-20 10:43:06 +00:00
await ctx . send ( json [ " fact " ] )
await ctx . send ( json [ " image " ] )
@bot.command ( brief = " bin eaters " )
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 ( )
2021-11-20 16:53:11 +00:00
error = json . get ( ' error ' )
if error :
return await ctx . send ( f ' Received unexpected error, blame ginlang! ( { error } ) ' )
2021-11-20 10:43:06 +00:00
await ctx . send ( json [ " fact " ] )
await ctx . send ( json [ " image " ] )
@bot.command ( hidden = True )
@commands.check ( is_ginlang )
async def activity ( ctx , atype , * , aname ) :
atypes = { ' streaming ' : ActivityType . streaming , ' playing ' : ActivityType . playing , ' listening ' : ActivityType . listening , ' watching ' : ActivityType . watching , ' competing ' : ActivityType . competing }
atype = atype . lower ( )
if atype not in atypes :
await ctx . send ( " invalid activity type. the valid types are " + ' ' . join ( atypes . keys ( ) ) )
return
2021-11-20 15:59:54 +00:00
await bot . change_presence ( activity = Activity ( name = ( aname + f " and foxing { str ( getAllUsers ( ) ) } users " ) , type = atypes [ atype ] , url = " https://twitch.tv/xginlang " ) )
2021-11-20 10:43:06 +00:00
await ctx . send ( ' Success! ' )
@bot.command ( brief = " gives bot invite link " )
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 " )
2021-11-20 14:35:51 +00:00
@bot.command ( brief = " gives information about a minecraft user " )
2021-11-20 10:43:06 +00:00
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 ( )
2021-11-20 14:34:04 +00:00
error = json . get ( ' error ' )
if error :
return await ctx . send ( f ' Received unexpected error, blame Mojang! ( { error } ) ' )
2021-11-20 10:43:06 +00:00
username = json [ " username " ]
uuid = json [ " uuid " ]
2021-11-20 14:34:04 +00:00
#namehistory = ', '.join([f"Name: {i['name']} Changed at: {i['changedToAt']}" for i in json["name_history"]])
embed = discord . Embed ( title = ' Minecraft User Information ' )
2021-11-20 14:38:16 +00:00
embed . set_author ( name = f ' User { username } ' )
2021-11-20 14:34:04 +00:00
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 )
2021-11-20 10:43:06 +00:00
@bot.command ( brief = " gives credits " )
async def credits ( ctx ) :
2021-11-20 14:43:49 +00:00
await ctx . send ( """ API endpoints used in this bot are taken from:
2021-11-20 10:43:06 +00:00
https : / / foxrudor . de /
https : / / some - random - api . ml
https : / / shitfest . net
""" )
@bot.command ( brief = " shows contributors to Foxtrot " )
async def contributors ( ctx ) :
await ctx . send ( """ Contributors to the Foxtrot bot are:
Helixu #1111
xfnw #1113
< https : / / cat . casa / ~ julia / > ( shitfest memes API )
TFTWPhoenix #9240 (I dont know, hes cool I guess.)
remi #9948 (also pretty cool ig)
2021-11-20 14:34:04 +00:00
Foxtrot is open source ! Find the code at < https : / / code . cat . casa / Helixu / Foxtrot >
2021-11-20 10:43:06 +00:00
""" )
@bot.command ( brief = " random meme " )
async def meme ( ctx ) :
async with aiohttp . ClientSession ( ) as session :
async with session . get ( ' https://shitfest.net/api/random.php ' ) as resp :
json = await resp . json ( )
await ctx . send ( json [ " url " ] )
2021-11-20 15:14:14 +00:00
@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 " )
2021-11-20 16:56:01 +00:00
await ctx . send ( embed = embed , file = file )
else :
await ctx . send ( " An unexpected error happened, Steve.. I told you this already! " )
2021-11-20 15:14:14 +00:00
2021-11-20 10:43:06 +00:00
@bot.event
async def on_ready ( ) :
await asyncio . sleep ( 1 ) # someone on stackoverflow said discord does not like if you are speedy
2021-11-20 16:01:47 +00:00
await bot . change_presence ( activity = Streaming ( name = " Testing - bot may go offline at any point. " , url = " https://twitch.tv/xginlang " ) )
2021-11-20 10:43:06 +00:00
with open ( ' token.json ' , ' r ' ) as file :
2021-11-20 15:59:54 +00:00
# this breaks if you are on windows
2021-11-20 10:43:06 +00:00
token = ' ' . join ( [ line [ : - 1 ] for line in file . readlines ( ) ] )
bot . run ( token )