1
0
Fork 0
mirror of https://github.com/myned/modufur.git synced 2024-11-01 21:02:38 +00:00
modufur/src/main/run.py

138 lines
4.2 KiB
Python
Raw Normal View History

2017-09-24 18:09:02 +00:00
import asyncio
import datetime as dt
import json
2017-10-17 21:59:58 +00:00
# import logging as log
2017-10-02 21:29:39 +00:00
import subprocess
import sys
import traceback as tb
from contextlib import suppress
import discord as d
2017-09-24 18:09:02 +00:00
from discord import utils
from discord.ext import commands
from discord.ext.commands import errors as errext
2017-09-24 18:09:02 +00:00
from misc import exceptions as exc
from misc import checks
from utils import utils as u
2017-09-24 18:09:02 +00:00
2017-10-17 21:59:58 +00:00
# log.basicConfig(level=log.INFO)
2017-10-20 20:16:05 +00:00
def get_prefix(bot, message):
if isinstance(message.guild, d.Guild) and message.guild.id in u.settings['prefixes']:
return u.settings['prefixes'][message.guild.id]
return u.config['prefix']
bot = commands.Bot(command_prefix=get_prefix, description='Experimental miscellaneous bot')
2017-10-14 03:38:58 +00:00
# Send and print ready message to #testing and console after logon
2017-10-20 20:17:16 +00:00
2017-09-24 15:05:28 +00:00
@bot.event
async def on_ready():
2017-10-20 20:16:05 +00:00
from cogs import booru, info, management, owner, tools
2017-10-14 03:59:14 +00:00
2017-10-20 20:17:16 +00:00
for cog in (tools.Utils(bot), owner.Bot(bot), owner.Tools(bot), management.Administration(bot), info.Info(bot), booru.MsG(bot)):
bot.add_cog(cog)
print(f'COG : {type(cog).__name__}')
2017-10-20 20:16:05 +00:00
# bot.loop.create_task(u.clear(booru.temp_urls, 30*60))
2017-10-17 23:04:45 +00:00
if u.config['playing'] is not 'None':
await bot.change_presence(game=d.Game(name=u.config['playing']))
else:
await bot.change_presence(game=None)
2017-10-16 18:07:10 +00:00
2017-10-17 23:04:45 +00:00
print('\n\\ \\ \\ \\ \\ \\ \\ \\ \\\nC O N N E C T E D : {}\n/ / / / / / / / /\n'.format(bot.user.name))
await bot.get_channel(u.config['info_channel']).send('**Started** \N{BLACK SUN WITH RAYS} .')
2017-10-17 23:04:45 +00:00
# u.notify('C O N N E C T E D')
if u.temp:
channel = bot.get_channel(u.temp['restart_ch'])
message = await channel.get_message(u.temp['restart_msg'])
await message.add_reaction('\N{WHITE HEAVY CHECK MARK}')
2017-10-17 23:04:45 +00:00
u.temp.clear()
2017-09-24 15:05:28 +00:00
@bot.event
async def on_error(error, *args, **kwargs):
2017-10-17 23:04:45 +00:00
print('\n! ! ! ! !\nE R R O R : {}\n! ! ! ! !\n'.format(error), file=sys.stderr)
tb.print_exc()
await bot.get_user(u.config['owner_id']).send('**ERROR** ⚠ `{}`'.format(error))
await bot.get_channel(u.config['info_channel']).send('**ERROR** ⚠ `{}`'.format(error))
# u.notify('E R R O R')
await bot.logout()
u.close(bot.loop)
@bot.event
async def on_command_error(ctx, error):
2017-10-17 23:04:45 +00:00
if isinstance(error, errext.CheckFailure):
await ctx.send('\N{NO ENTRY} **Insufficient permissions.**', delete_after=10)
await ctx.message.add_reaction('\N{NO ENTRY}')
2017-10-17 23:04:45 +00:00
elif isinstance(error, errext.CommandNotFound):
print('INVALID COMMAND : {}'.format(error), file=sys.stderr)
await ctx.message.add_reaction('\N{CROSS MARK}')
2017-10-17 23:04:45 +00:00
else:
print('\n! ! ! ! ! ! ! ! ! ! ! !\nC O M M A N D E R R O R : {}\n! ! ! ! ! ! ! ! ! ! ! !\n'.format(
error), file=sys.stderr)
tb.print_exception(type(error), error, error.__traceback__, file=sys.stderr)
await bot.get_user(u.config['owner_id']).send('**COMMAND ERROR** ⚠ `{}`'.format(error))
await bot.get_channel(u.config['info_channel']).send('**COMMAND ERROR** ⚠ `{}`'.format(error))
await exc.send_error(ctx, error)
await ctx.message.add_reaction('')
# u.notify('C O M M A N D E R R O R')
async def on_reaction_add(r, u):
2017-10-17 23:04:45 +00:00
pass
async def on_reaction_remove(r, u):
2017-10-17 23:04:45 +00:00
pass
async def reaction_add(r, u):
2017-10-17 23:04:45 +00:00
bot.add_listener(on_reaction_add)
print('Reacted')
bot.remove_listener(on_reaction_remove)
async def reaction_remove(r, u):
2017-10-17 23:04:45 +00:00
bot.add_listener(on_reaction_remove)
print('Removed')
bot.remove_listener(on_reaction_remove)
2017-10-19 08:39:41 +00:00
# d.opus.load_opus('opus')
async def wait(voice):
asyncio.sleep(5)
await voice.disconnect()
def after(voice, error):
coro = voice.disconnect()
future = asyncio.run_coroutine_threadsafe(coro, voice.loop)
future.result()
2017-09-24 15:05:28 +00:00
@bot.command(name=',test', hidden=True)
2017-09-25 19:31:51 +00:00
@commands.is_owner()
2017-09-24 15:05:28 +00:00
@checks.del_ctx()
async def test(ctx):
2017-10-19 08:39:41 +00:00
def check(react, user):
return reaction.emoji == '\N{THUMBS UP SIGN}'
# channel = bot.get_channel(int(cid))
# voice = await channel.connect()
# voice.play(d.AudioSource, after=lambda: after(voice))
test = await ctx.send('thumbs up!')
while True:
done, pending = await asyncio.wait([bot.wait_for('reaction_add', check=check), bot.wait_for('reaction_remove', check=check)], return_when=asyncio.FIRST_COMPLETED)
await ctx.send('well doneeee')
2017-10-17 23:04:45 +00:00
# bot.add_listener(on_reaction_add)
# bot.add_listener(on_reaction_remove)
2017-09-24 15:05:28 +00:00
2017-10-14 03:38:58 +00:00
bot.run(u.config['token'])