Bug fixes n shit

This commit is contained in:
mrhanky 2017-06-30 19:33:26 +02:00
parent e18bf0d23d
commit f8bf6b6d55
No known key found for this signature in database
GPG Key ID: 67D772C481CB41B8
8 changed files with 149 additions and 67 deletions

View File

@ -4,8 +4,7 @@
"port": 56791,
"ssl": true,
"raw": true,
"autojoins": ["#nxy-dev"],
"storage": "sqlite://db.sqlite",
"autojoins": ["#w0bm", "#f0ck"],
"flood_burst": 1,
"flood_rate": 4,
"flood_rate_delay": 1,

View File

@ -24,6 +24,7 @@ CFG_DEV = {
# TODO: regex
# TODO: ddg
def main(cfg_file):
# Load dotenv from file
load_dotenv('.env')
@ -36,7 +37,7 @@ def main(cfg_file):
if bool(os.environ.get('DEV')):
cfg.update(CFG_DEV)
# If PASSWORD in env set it in config
elif 'PASSWORD' in os.environ:
if 'PASSWORD' in os.environ:
cfg['password'] = os.environ['PASSWORD']
# Start the bot with constructed config

View File

@ -12,34 +12,56 @@ from . import Plugin
class Coins(Plugin):
requires = ['irc3.plugins.command']
CRYPTOWAT = 'https://api.cryptowat.ch/markets/{market}/{crypto}{currency}' \
'/summary'
CURRENCIES = {
'usd': '$',
'eur': '',
'eth': 'Ξ',
'btc': '฿',
}
@command
def btc(self, mask: IrcString, target: IrcString, args: DocOptDict):
"""Gets the Bitcoin values from BitStamp.
%%btc
%%btc [<currency>]
"""
data = requests.get('https://www.bitstamp.net/api/ticker').json()
values = {k: float(data[k]) for k in ['last', 'high', 'low', 'volume']}
return '\x02[Bitcoin]\x02 ' \
'Current: \x02\x037${last:,.2f}\x0F - ' \
'High: \x02\x033${high:,.2f}\x0F - ' \
'Low: \x02\x034${low:,.2f}\x0F - ' \
'Volume: \x02฿{volume:,.2f}\x02'.format(**values)
return self._cryptowat_summary('btc', args.get('<currency>') or 'usd')
@command
def eth(self, mask: IrcString, target: IrcString, args: DocOptDict):
"""Gets the Ethereum values from etherscan.io.
%%eth
%%eth [<currency>]
"""
volume = self._etherscan('ethsupply')
data = self._etherscan('ethprice')
return '\x02[EtherScan]\x02' \
'\x02\x0307 ${usd:,.2f}\x0F |\x02\x0307 {btc:,.5f} BTC\x0F ' \
'- Volume: \x02{volume:,.2f}\x02' \
.format(usd=float(data['ethusd']),
btc=float(data['ethbtc']),
volume=float(int(volume) / 1000000000000000000))
return self._cryptowat_summary('eth', args.get('<currency>') or 'usd')
def _cryptowat_summary(self, crypto: str, currency: str = 'usd',
market: str = 'coinbase'):
# Check if valid currency + crypto2currency
if currency not in self.CURRENCIES or crypto == currency:
return
# Send request to api
data = requests.get(self.CRYPTOWAT.format(market=market,
crypto=crypto,
currency=currency))
if data:
result = data.json()['result']
return '\x02[{crypto}]\x02 ' \
'Current: \x02\x0307{currency}{last:,.2f}\x0F - ' \
'High: \x02\x0303{currency}{high:,.2f}\x0F - ' \
'Low: \x02\x0304{currency}{low:,.2f}\x0F - ' \
'Change: \x02\x0307{change:,.2f}%\x0F - ' \
'Volume: \x02\x0307{volume}\x0F' \
.format(crypto=crypto.upper(),
currency=self.CURRENCIES[currency],
last=result['price']['last'],
high=result['price']['high'],
low=result['price']['low'],
change=result['price']['change']['percentage'] * 100,
volume=result['volume'])
@staticmethod
def _etherscan(action: str):

View File

@ -10,28 +10,6 @@ from . import DatabasePlugin
from ..utils import NICK_REGEX, parse_int
"""
delete from
quotes
where
id = (
select
id
from
quotes a
where
nick like %s and %s = (
select
count(id)
from
quotes b where a.id {op} b.id
)
order by
id {order}
)
"""
@irc3.plugin
class Quotes(DatabasePlugin):
requires = ['irc3.plugins.command',
@ -49,7 +27,7 @@ class Quotes(DatabasePlugin):
insert into
quotes (nick, item, channel, created_by)
values
(%s, %s)
(%s, %s, %s, %s)
''', [nick, quote, channel, mask.nick])
def delete_quote(self, nick, quote):

View File

@ -61,15 +61,14 @@ class Rape(DatabasePlugin):
# Insert or add fine to database and return total owe
self.cur.execute('''
insert into
users (nick, host, fines)
users (nick, fines)
values
(%s, %s, %s)
on conflict (nick) do update set
host = excluded.host,
fines = users.fines + excluded.fines
returning
fines
''', [nick, mask.host, fine])
''', [nick, fine])
self.con.commit()
# Get reason based on rand value

View File

@ -1,4 +1,6 @@
# -*- coding: utf-8 -*-
from datetime import datetime
import irc3
from docopt import Dict as DocOptDict
from irc3.plugins.command import command
@ -20,20 +22,19 @@ class Tell(DatabasePlugin):
# Fetch tells from database
self.cur.execute('''
select
from_nick, to_nick, message
to_nick, from_nick, message, created_at
from
tells
''')
# Add tells to queue
for res in self.cur.fetchall():
nick = res['to_nick']
nick = res['to_nick'].lower()
# Create list in queue and add tell
if nick not in self.tell_queue:
self.tell_queue[nick] = []
self.tell_queue[nick].append([res['from_nick'],
res['message']])
self.tell_queue[nick].append(res[1:])
@command
def tell(self, mask: IrcString, target: IrcString, args: DocOptDict):
@ -41,21 +42,23 @@ class Tell(DatabasePlugin):
%%tell <nick> <message>...
"""
nick = args['<nick>'].lower()
tell = [mask.nick.lower(), nick, ' '.join(args['<message>']).strip()]
nick = args['<nick>']
nick_lower = nick.lower()
tell = [nick, mask.nick, ' '.join(args['<message>']).strip(),
datetime.now()]
# Create list in queue and add tell
if nick not in self.tell_queue:
self.tell_queue[nick] = []
self.tell_queue[nick].append(tell)
if nick_lower not in self.tell_queue:
self.tell_queue[nick_lower] = []
self.tell_queue[nick_lower].append(tell[1:])
try:
# Insert tell into database
self.cur.execute('''
insert into
tells (from_nick, to_nick, message)
tells (to_nick, from_nick, message, created_at)
values
(%s, %s, %s)
(%s, %s, %s, %s)
''', tell)
self.con.commit()
except Error:
@ -66,15 +69,19 @@ class Tell(DatabasePlugin):
def check(self, mask: str):
"""If activ nick has tells, forward and delete them."""
nick = IrcString(mask).nick
nick_lower = nick.lower()
if nick in self.tell_queue:
if nick_lower in self.tell_queue:
# Forward all tells for nick
for tell in self.tell_queue[nick]:
self.bot.privmsg(nick, '[Tell] Message from {nick}: {message}'
.format(nick=tell[0], message=tell[1]))
for tell in self.tell_queue[nick_lower]:
# TODO: format time
self.bot.privmsg(nick, '[Tell] Message from {nick} at {time}: '
'{message}'.format(nick=tell[0],
time=tell[2],
message=tell[1]))
# Remove nick from queue
del self.tell_queue[nick]
del self.tell_queue[nick_lower]
try:
# Remove tells from database
@ -82,9 +89,10 @@ class Tell(DatabasePlugin):
delete from
tells
where
to_nick = %s
lower(to_nick) = lower(%s)
''', [nick])
self.con.commit()
except Error:
except Error as ex:
print(ex)
# Rollback transaction on error
self.con.rollback()

View File

@ -39,7 +39,7 @@ class Useless(DatabasePlugin):
msg=msg.upper()))
@command
def kill(self, mask:IrcString,target:IrcString,args:DocOptDict):
def kill(self, mask: IrcString, target: IrcString, args: DocOptDict):
"""Kills a user with a random message.
%%kill [<nick>]
@ -58,7 +58,7 @@ class Useless(DatabasePlugin):
return self.cur.fetchone()['item'].format(nick=nick)
@command
def yiff(self, mask:IrcString,target:IrcString,args:DocOptDict):
def yiff(self, mask: IrcString, target: IrcString, args: DocOptDict):
"""Yiffs a user with a random message.
%%yiff [<nick>]
@ -76,6 +76,82 @@ class Useless(DatabasePlugin):
''')
return self.cur.fetchone()['item'].format(nick=nick)
@command
def waifu(self, mask: IrcString, target: IrcString, args: DocOptDict):
"""Get waifu for a user.
%%waifu [<nick>]
"""
nick = args.get('<nick>') or mask.nick
if nick.startswith('='):
waifu = nick[1:]
self.cur.execute('''
insert into
users (nick, waifu)
values
(%s, %s)
on conflict (nick) do update set
waifu = excluded.waifu
''', [mask.nick, waifu])
self.bot.notice(mask.nick, 'Waifu set to: {waifu}'
.format(waifu=waifu))
else:
self.cur.execute('''
select
waifu
from
users
where
lower(nick) = lower(%s)
''', [nick])
result = self.cur.fetchone()
if result and result['waifu']:
return '\x02[Waifu]\x0F {nick}: {waifu}'.format(
nick=nick,
waifu=result['waifu'])
@command
def husbando(self, mask: IrcString, target: IrcString, args: DocOptDict):
"""Get husbando for a user.
%%husbando [<nick>]
"""
nick = args.get('<nick>') or mask.nick
if nick.startswith('='):
husbando = nick[1:]
self.cur.execute('''
insert into
users (nick, husbando)
values
(%s, %s)
on conflict (nick) do update set
husbando = excluded.husbando
''', [mask.nick, husbando])
self.bot.notice(mask.nick, 'Husbando set to: {husbando}'
.format(husbando=husbando))
else:
self.cur.execute('''
select
husbando
from
users
where
lower(nick) = lower(%s)
''', [nick])
result = self.cur.fetchone()
if result and result['husbando']:
return '\x02[Husbando]\x0F {nick}: {husbando}'.format(
nick=nick,
husbando=result['husbando'])
@command
def storyofpomfface(self, mask: IrcString, target: IrcString,
args: DocOptDict):

View File

@ -46,7 +46,6 @@ create table if not exists seens (
create table if not exists users (
id serial primary key,
nick varchar(30) not null,
host varchar(255) not null,
husbando varchar(255) null,
waifu varchar(255) null,
fines integer default 0,