You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
6.0 KiB
144 lines
6.0 KiB
import discord
|
|
from discord.ext import commands
|
|
import logging
|
|
from datetime import datetime
|
|
import json, asyncio
|
|
import os, re, aiohttp, async_timeout
|
|
|
|
config_dir = 'config/'
|
|
admin_id_file = 'admin_ids'
|
|
extension_dir = 'extensions'
|
|
owner_id = 351794468870946827
|
|
guild_config_dir = 'guild_config/'
|
|
rcon_config_file = 'server_rcon_config'
|
|
dododex_url = 'http://www.dododex.com'
|
|
embed_color = discord.Colour.from_rgb(49,107,111)
|
|
bot_config_file = 'bot_config'
|
|
default_guild_config_file = 'default_guild_config.json'
|
|
emoji_guild = 408524303164899338
|
|
|
|
events_log = logging.getLogger('events')
|
|
|
|
emojis = {
|
|
'x': '❌',
|
|
'y': '✅',
|
|
'poop': '💩'
|
|
}
|
|
|
|
class fun():
|
|
def __init__(self, bot):
|
|
self.bot = bot
|
|
|
|
@commands.command()
|
|
@commands.cooldown(1, 30, type=commands.BucketType.user)
|
|
async def infect(self, ctx, member:discord.Member, emoji):
|
|
if member.id == self.bot.user.id and ctx.author.id != owner_id:
|
|
await ctx.send(f'You rolled a Critical Fail...\nInfection bounces off and rebounds on the attacker.')
|
|
member = ctx.author
|
|
if member in self.bot.infected:
|
|
await ctx.send(f'{member.display_name} is already infected. Please wait until they are healed before infecting them again...')
|
|
else:
|
|
emoji = self.bot.get_emoji(int(emoji.split(':')[2].strip('>'))) if '<:' in emoji or '<a:' in emoji else emoji
|
|
self.bot.infected[member] = [emoji,datetime.now().timestamp()]
|
|
await ctx.send(f"{member.display_name} has been infected with {emoji}")
|
|
|
|
@commands.command()
|
|
@commands.cooldown(1, 5, type=commands.BucketType.user)
|
|
async def heal(self, ctx, member:discord.Member):
|
|
if ctx.author == member and ctx.author.id != owner_id:
|
|
await ctx.send('You can\'t heal yourself silly...')
|
|
else:
|
|
if member in self.bot.infected:
|
|
del self.bot.infected[member]
|
|
await ctx.send(f'{member.mention} You have been healed by {ctx.author.display_name}.')
|
|
else:
|
|
await ctx.send(f'{member.display_name} is not infected...')
|
|
|
|
@commands.command()
|
|
@commands.is_owner()
|
|
async def print_infections(self, ctx):
|
|
await ctx.author.send(f'```{self.bot.infected}```')
|
|
|
|
@commands.command()
|
|
@commands.cooldown(1, 5, type=commands.BucketType.user)
|
|
async def slap(self, ctx, member:discord.Member):
|
|
if member.id == self.bot.user.id and ctx.author.id != owner_id:
|
|
await ctx.send(f'You rolled a Critical Fail...\nThe trout bounces off and rebounds on the attacker.')
|
|
member = ctx.author
|
|
await ctx.send(f'{ctx.author.mention} You slap yourself in the face with a large trout <:trout:408543365085397013>')
|
|
else:
|
|
await ctx.send(f'{ctx.author.display_name} slaps {member.mention} around a bit with a large trout <:trout:408543365085397013>')
|
|
|
|
def get_factorial(self,number):
|
|
a = 1
|
|
for i in range(1,int(number)):
|
|
a = a * (i + 1)
|
|
return a
|
|
|
|
# @commands.command()
|
|
# @commands.cooldown(1, 5, type=commands.BucketType.user)
|
|
# async def fact(self, ctx, number:int):
|
|
# if number < 20001 and number > 0:
|
|
# n = 1990
|
|
# with ctx.channel.typing():
|
|
# a = await self.bot.loop.run_in_executor(None, self.get_factorial, number)
|
|
# if len(str(a)) > 6000:
|
|
# for b in [str(a)[i:i+n] for i in range(0, len(str(a)), n)]:
|
|
# await ctx.author.send(f'```py\n{b}```')
|
|
# await ctx.send(f"{ctx.author.mention} Check your DMs.")
|
|
# else:
|
|
# for b in [str(a)[i:i+n] for i in range(0, len(str(a)), n)]:
|
|
# await ctx.send(f'```py\n{b}```')
|
|
# else:
|
|
# await ctx.send("Invalid number. Please enter a number between 0 and 20,000")
|
|
|
|
@commands.command(hidden=True)
|
|
@commands.is_owner()
|
|
async def play(self, ctx, url=None):
|
|
if ctx.author.voice.channel.name in self.bot.voice_chans:
|
|
if self.bot.voice_chans[ctx.author.voice.channel.name].is_playing():
|
|
await ctx.send('There is currently a song playing. Please wait until it is done...')
|
|
return
|
|
else:
|
|
self.bot.voice_chans[ctx.author.voice.channel.name] = await ctx.author.voice.channel.connect()
|
|
asyncio.sleep(5)
|
|
if url:
|
|
import youtube_dl
|
|
opts = {"format": 'webm[abr>0]/bestaudio/best',"ignoreerrors": True,"default_search": "auto","source_address": "0.0.0.0",'quiet': True}
|
|
ydl = youtube_dl.YoutubeDL(opts)
|
|
info = ydl.extract_info(url, download=False)
|
|
self.bot.player = discord.FFmpegPCMAudio(info['url'])
|
|
else:
|
|
self.bot.player = discord.FFmpegPCMAudio('dead_puppies.mp3')
|
|
self.bot.player = discord.PCMVolumeTransformer(self.bot.player, volume=0.3)
|
|
self.bot.voice_chans[ctx.author.voice.channel.name].play(self.bot.player)
|
|
|
|
@commands.command(hidden=True)
|
|
@commands.is_owner()
|
|
async def stop(self, ctx):
|
|
if ctx.author.voice.channel.name in self.bot.voice_chans:
|
|
if self.bot.voice_chans[ctx.author.voice.channel.name].is_playing():
|
|
self.bot.voice_chans[ctx.author.voice.channel.name].stop()
|
|
else:
|
|
await ctx.send('Nothing is playing...')
|
|
else:
|
|
await ctx.send('Not connected to that voice channel.')
|
|
|
|
@commands.command(hidden=True)
|
|
@commands.is_owner()
|
|
async def disconnect(self, ctx):
|
|
if ctx.author.voice.channel.name in self.bot.voice_chans:
|
|
await self.bot.voice_chans[ctx.author.voice.channel.name].disconnect()
|
|
del self.bot.voice_chans[ctx.author.voice.channel.name]
|
|
else:
|
|
await ctx.send('Not connected to that voice channel.')
|
|
|
|
@commands.command(hidden=True)
|
|
@commands.is_owner()
|
|
async def volume(self, ctx, volume:float):
|
|
self.bot.player.volume = volume
|
|
|
|
|
|
def setup(bot):
|
|
bot.add_cog(fun(bot))
|