Added pantsu.py
This commit is contained in:
parent
88b0c7a681
commit
2ee43bab89
1 changed files with 104 additions and 0 deletions
104
pantsu.py
Normal file
104
pantsu.py
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
import random
|
||||||
|
import time
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from sqlalchemy import Table, Column, Integer, String, MetaData, insert, select
|
||||||
|
from src.channel_manager import ChannelManager
|
||||||
|
from src.db import Database
|
||||||
|
from src.plugin_base import PluginBase
|
||||||
|
|
||||||
|
meta = MetaData()
|
||||||
|
pantsu_table = Table(
|
||||||
|
'Pantsu',
|
||||||
|
meta,
|
||||||
|
Column('id', Integer, primary_key=True, autoincrement=True),
|
||||||
|
Column('name', String, unique=True, nullable=False),
|
||||||
|
Column('pantsu', Integer, default=0),
|
||||||
|
Column('last', String, default='1999/01/01 00:00:00'),
|
||||||
|
)
|
||||||
|
db = Database(pantsu_table, meta)
|
||||||
|
df = '%Y/%m/%d %H:%M:%S'
|
||||||
|
|
||||||
|
|
||||||
|
def remaining_time(date: str, timeout: int):
|
||||||
|
diff = (int(time.mktime(datetime.strptime(datetime.now().strftime(df), df).timetuple()) * 1000) -
|
||||||
|
int(time.mktime(datetime.strptime(date, df).timetuple()) * 1000))
|
||||||
|
h = int((timeout - diff) / (60 * 60 * 1000) % 24)
|
||||||
|
m = int((timeout - diff) / (60 * 1000) % 60)
|
||||||
|
s = int((timeout - diff) / 1000 % 60)
|
||||||
|
hms = ''
|
||||||
|
|
||||||
|
if h == 0 and m == 0 and s == 0:
|
||||||
|
return 0
|
||||||
|
|
||||||
|
if h != 0:
|
||||||
|
hms += f'{h}h '
|
||||||
|
if m != 0:
|
||||||
|
hms += f'{m}m '
|
||||||
|
if s != 0:
|
||||||
|
hms += f'{s}s '
|
||||||
|
|
||||||
|
return f'{hms[:-1]}'
|
||||||
|
|
||||||
|
|
||||||
|
def insert_user(user: str):
|
||||||
|
with db.engine.connect() as conn:
|
||||||
|
stmt = select(pantsu_table).where(pantsu_table.c.name == user)
|
||||||
|
cnt = len(conn.execute(stmt).fetchall())
|
||||||
|
|
||||||
|
if cnt == 0:
|
||||||
|
conn.execute((
|
||||||
|
insert(pantsu_table).
|
||||||
|
values({'name': user})
|
||||||
|
))
|
||||||
|
conn.commit()
|
||||||
|
|
||||||
|
|
||||||
|
class Plugin(PluginBase):
|
||||||
|
async def handle_message(self, source_nick, channel, message):
|
||||||
|
parts = message.split()
|
||||||
|
db.create_table(pantsu_table.name)
|
||||||
|
self.channel_manager = ChannelManager()
|
||||||
|
|
||||||
|
if parts[0].lower() == '!pantsu':
|
||||||
|
if len(parts) == 1:
|
||||||
|
insert_user(source_nick)
|
||||||
|
|
||||||
|
pantsu = db.get_user(source_nick, 2)
|
||||||
|
rnd = random.randint(1, 8)
|
||||||
|
new_pantsu = pantsu + rnd
|
||||||
|
last = datetime.strptime(db.get_user(source_nick, 3), df)
|
||||||
|
current = datetime.strptime(datetime.now().strftime(df), df)
|
||||||
|
diff = round((current - last).total_seconds() / 60.0)
|
||||||
|
chance = 0.10
|
||||||
|
|
||||||
|
if diff >= 30:
|
||||||
|
if chance == 1:
|
||||||
|
await self.bot.action(channel, f'takes away {rnd} pantsu from {source_nick}.')
|
||||||
|
await self.bot.privmsg(channel, f'You now have a total of {new_pantsu} pantsu.')
|
||||||
|
|
||||||
|
new_pantsu = pantsu - rnd
|
||||||
|
if new_pantsu <= 0:
|
||||||
|
db.set_user(source_nick, {
|
||||||
|
'pantsu': (pantsu - rnd),
|
||||||
|
'last': current.strftime(df)
|
||||||
|
})
|
||||||
|
else:
|
||||||
|
await self.bot.action(channel, f'gives {rnd} pantsu to {source_nick}.')
|
||||||
|
await self.bot.privmsg(channel, f'You now have a total of {new_pantsu} pantsu.')
|
||||||
|
|
||||||
|
db.set_user(source_nick, {
|
||||||
|
'pantsu': new_pantsu,
|
||||||
|
'last': current.strftime(df)
|
||||||
|
})
|
||||||
|
else:
|
||||||
|
rem = remaining_time(last.strftime(df), 30 * 60000)
|
||||||
|
await self.bot.privmsg(channel, f'You have to wait {rem} before you can get more pantsu.')
|
||||||
|
elif len(parts) == 2:
|
||||||
|
pantsu = db.get_user(parts[1], 2)
|
||||||
|
|
||||||
|
if pantsu == -1:
|
||||||
|
await self.bot.privmsg(channel, f'I\'ve looked everywhere for {parts[1]}\'s pantsu, but I couldn\'t'
|
||||||
|
f'find them anywhere.')
|
||||||
|
else:
|
||||||
|
await self.bot.privmsg(channel, f'{parts[1]} currently has {pantsu} pantsu.')
|
Loading…
Add table
Reference in a new issue