Bug fixes n shit
This commit is contained in:
		@@ -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,
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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):
 | 
			
		||||
 
 | 
			
		||||
@@ -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):
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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()
 | 
			
		||||
 
 | 
			
		||||
@@ -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):
 | 
			
		||||
 
 | 
			
		||||
@@ -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,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user