Skip to content

Commit

Permalink
sickening rewrite
Browse files Browse the repository at this point in the history
depressing stuff
  • Loading branch information
CarlGroth committed Sep 4, 2017
1 parent e4120a7 commit dea7a85
Show file tree
Hide file tree
Showing 14 changed files with 2,615 additions and 1,793 deletions.
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@ carlbot.txt
database.db
cogs/utils/
cogs/admin.py
cogs/permissions.py
cogs/reminders.py
cogs/convert.py
cogs/mod.py
cogs/nsfw.py
cogs/__pycache__
carlbot.log
*.log
268 changes: 168 additions & 100 deletions bot.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
import discord
import asyncio
import logging
import sys
import traceback
import datetime
import re
import copy
import json
import sqlite3
import aiohttp

import discord

from discord.ext import commands
from cogs.utils import checks
from cogs.utils import checks, context
from collections import Counter


description = "Like the previous one but good."


Expand All @@ -32,12 +32,15 @@
'cogs.convert',
'cogs.mod',
'cogs.twitch',
'cogs.permissions'
'cogs.highlight',
'cogs.nsfw',
'cogs.reminders'
]





def load_json(filename):
with open(filename, encoding='utf-8') as infile:
return json.load(infile)
Expand All @@ -51,114 +54,179 @@ def write_json(filename, contents):
(roles text, server text, location text, id text, names text, postcount int, retard int, sicklad int)''')


discord_logger = logging.getLogger('discord')
discord_logger.setLevel(logging.CRITICAL)
log = logging.getLogger()
log.setLevel(logging.INFO)
handler = logging.FileHandler(filename="carlbot.log", encoding='utf-8', mode='w')
log.addHandler(handler)

prefix = ["§", "?", "!"]
bot = commands.Bot(command_prefix=prefix, description=description)



@bot.event
async def on_command_error(error, ctx):
if isinstance(error, commands.NoPrivateMessage):
await bot.send_message(ctx.message.author, 'This command cannot be used in private messages.')
elif isinstance(error, commands.DisabledCommand):
await bot.send_message(ctx.message.author, 'This command has been disabled and cannot be used.')
elif isinstance(error, commands.CommandInvokeError):
print('In {0.command.qualified_name}'.format(ctx, file=sys.stderr))
traceback.print_tb(error.original.__traceback__)
print('{0.__class__.__name__}: {0}'.format(error.original), file=sys.stderr)

@bot.event
async def on_ready():
print('Logged in as:')
print('Username: ' + bot.user.name)
print('ID: ' + bot.user.id)
print('------')
if not hasattr(bot, 'uptime'):
bot.uptime = datetime.datetime.utcnow()
server_invites = load_json('invites.json')
for server in bot.servers:
a = c.execute('SELECT * FROM servers WHERE id=?', (server.id,))
# discord_logger = logging.getLogger('discord')
# discord_logger.setLevel(logging.CRITICAL)
# log = logging.getLogger()
# log.setLevel(logging.INFO)
# handler = logging.FileHandler(filename="carlbot.log", encoding='utf-8', mode='w')
# log.addHandler(handler)
log = logging.getLogger(__name__)

def _prefix_callable(bot, msg):
user_id = bot.user.id
base = ['<@!{}> '.format(user_id), '<@{}> '.format(user_id)]
if msg.guild is None:
base.append('!')
base.append('?')
else:
base.extend(bot.prefixes.get(msg.guild.id, ['?', '!']))
return base




def load_credentials():
with open('cred.json') as f:
return json.load(f)



credentials = load_credentials()



class CarlBot(commands.Bot):
def __init__(self):
super().__init__(command_prefix=_prefix_callable, description="Better than the last one", help_attrs=dict(hidden=True))
self.client_id = 235148962103951360
self.owner_id = 106429844627169280
a = c.execute('SELECT * FROM servers WHERE 1')
a = a.fetchall()
if a == []:
c.execute('INSERT INTO servers VALUES (?, ?, ?, ?, ?)', (server.id, None, None, None, None))
pre = {k[0]:k[5] or '!,?' for k in a}
self.prefixes = {int(k):v.split(',') for (k, v) in pre.items()}
self.session = aiohttp.ClientSession(loop=self.loop)
self.token = credentials["token"]
self.remove_command('help')

for extension in initial_extensions:
try:
self.load_extension(extension)
except Exception as e:
print('Failed to load extension {}\n{}: {}'.format(extension, type(e).__name__, e))

async def on_command_error(self, ctx, error):
if isinstance(error, commands.NoPrivateMessage):
await ctx.author.send('This command cannot be used in private messages.')
elif isinstance(error, commands.DisabledCommand):
await ctx.author.send('Sorry. This command is disabled and cannot be used.')
elif isinstance(error, commands.CommandInvokeError):
print(f'In {ctx.command.qualified_name}:', file=sys.stderr)
traceback.print_tb(error.original.__traceback__)
print(f'{error.original.__class__.__name__}: {error.original}', file=sys.stderr)

async def on_ready(self):
print('Logged in as:')
print('Username: ' + self.user.name)
print('ID: ' + str(self.user.id))
print('------')
if not hasattr(self, 'uptime'):
self.uptime = datetime.datetime.utcnow()
for server in self.guilds:
a = c.execute('SELECT * FROM servers WHERE id=?', (str(server.id),))
a = a.fetchall()
if a == []:
c.execute('INSERT INTO servers VALUES (?, ?, ?, ?, ?, ?)', (str(server.id), None, None, None, None, '?,!'))
conn.commit()
b = c.execute('SELECT * FROM logging WHERE server=?', (str(server.id),))
b = b.fetchall()
if b == []:
c.execute('INSERT INTO logging VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)', (str(server.id), 1, 1, 1, 1, 1, 1, 1, None))
print(server.name)
conn.commit()
xc = c.execute('SELECT * FROM config WHERE guild_id=?', (server.id,))
xc = xc.fetchall()
if xc == []:
c.execute('INSERT INTO config VALUES (?, ?, ?, ?)', (server.id, None, None, True))
conn.commit()


member_list = self.get_all_members()
for member in member_list:
a = c.execute('SELECT * FROM users WHERE (id=? AND server=?)', (str(member.id), member.guild.id))
a = a.fetchall()
if a == []:
roles = ','.join([str(x.id) for x in member.roles if x.name != "@everyone" and x.id != 232206741339766784])
names = member.display_name
c.execute("INSERT INTO users VALUES (?, ?, ?, ?, ?, ?, ?, ?)", (roles, str(member.guild.id), None, str(member.id), names, 0, 0, 0))
conn.commit()
xd = c.execute('SELECT * FROM userconfig WHERE (guild_id=? AND user_id=?)', (member.guild.id, member.id))
xd = xd.fetchall()
if xd == []:
c.execute('INSERT INTO userconfig VALUES (?, ?, ?, ?, ?, ?)', (member.guild.id, member.id, None, None, False, None))
conn.commit()

def get_guild_prefixes(self, guild, *, local_inject=_prefix_callable):
proxy_msg = discord.Object(id=None)
proxy_msg.guild = guild
return local_inject(self, proxy_msg)

def get_raw_guild_prefixes(self, guild_id):
return self.prefixes.get(guild_id, ['?', '!'])

async def set_guild_prefixes(self, guild, prefixes):
if not prefixes:
c.execute('UPDATE servers SET prefix=? WHERE id=?', (None, str(guild.id)))
conn.commit()
b = c.execute('SELECT * FROM logging WHERE server=?', (server.id,))
b = b.fetchall()
if b == []:
c.execute('INSERT INTO logging VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)', (server.id, 1, 1, 1, 1, 1, 1, 1, None))
print(server.name)
self.prefixes[guild.id] = prefixes
elif len(prefixes) > 10:
raise RuntimeError('Cannot have more than 10 custom prefixes.')
else:
c.execute('UPDATE servers SET prefix=? WHERE id=?', (','.join(sorted(set(prefixes))), str(guild.id)))
conn.commit()
server_invites[server.id] = {}
try:
for inv in await bot.invites_from(server):
server_invites[server.id][inv.id] = inv.uses
except Exception as e:
print(e)
continue

write_json('invites.json', server_invites)
member_list = bot.get_all_members()
for member in member_list:
a = c.execute('SELECT * FROM users WHERE (id=? AND server=?)', (member.id, member.server.id))
a = a.fetchall()
if a != []:
continue
roles = ','.join([x.id for x in member.roles if (x.name != "@everyone" and x.id != "232206741339766784")])
self.prefixes[guild.id] = sorted(set(prefixes))
print(self.prefixes[guild.id])

async def on_resumed(self):
print("resumed...")

names = member.display_name
c.execute("INSERT INTO users VALUES (?, ?, ?, ?, ?, ?, ?, ?)", (roles, member.server.id, None, member.id, names, 0, 0, 0))
conn.commit()



@bot.event
async def on_resumed():
print("resumed...")

async def on_message(self, message):
if message.author.bot:
return
await self.process_commands(message)
ctx = await self.get_context(message)
if ctx.invoked_with not in self.commands and ctx.command is None:
msg = copy.copy(message)
if ctx.prefix:
new_content = msg.content[len(ctx.prefix):]
print("new content: {}".format(new_content))
print(f"old content: '{ctx.invoked_with}'")
if ctx.invoked_with in [
"add",
"+",
"remove",
"procreate",
"create",
"&",
"append",
"owner",
"raw",
"mine",
"+=",
"++",
"edit",
"update",
"list"
]:
return
msg.content = "{}tag {}".format(ctx.prefix, new_content)
await self.process_commands(msg)

async def close(self):
await super().close()
await self.session.close()

def run(self):
super().run(self.token, reconnect=True)


@bot.event
async def on_message(message):
if message.author.bot:
return
await bot.process_commands(message)


@bot.command(pass_context=True, hidden=True)
@checks.is_owner()
async def do(ctx, times : int, *, command):
"""repeats a command a number of times."""
msg = copy.copy(ctx.message)
msg.content = command
for i in range(times):
await bot.process_commands(msg)

def load_credentials():
with open('cred.json') as f:
return json.load(f)


if __name__ == '__main__':
credentials = load_credentials()
token = credentials["token"]
bot.client_id = credentials['client_id']

for extension in initial_extensions:
try:
bot.load_extension(extension)
except Exception as e:
print('Failed to load extension {}\n{}: {}'.format(extension, type(e).__name__, e))

bot.run(token)
handlers = log.handlers[:]
for hdlr in handlers:
hdlr.closer()
log.removeHandler(hdlr)
bot = CarlBot()
bot.run()
Loading

0 comments on commit dea7a85

Please sign in to comment.