mirror of
https://github.com/oddluck/limnoria-plugins.git
synced 2025-04-29 06:51:12 -05:00
Delete plugin.py
This commit is contained in:
parent
2ffe25abf0
commit
16a8c7b174
494
plugin.py
494
plugin.py
@ -1,494 +0,0 @@
|
|||||||
import sqlite3
|
|
||||||
import time
|
|
||||||
import random
|
|
||||||
from supybot.commands import *
|
|
||||||
import supybot.callbacks as callbacks
|
|
||||||
|
|
||||||
class Serve(callbacks.Plugin):
|
|
||||||
def __init__(self, irc):
|
|
||||||
self.__parent = super(Serve, self)
|
|
||||||
self.__parent.__init__(irc)
|
|
||||||
self.db = sqlite3.connect("/home/ubuntu/limnoria/plugins/Serve/servestats.db")
|
|
||||||
self.init_db()
|
|
||||||
|
|
||||||
# Settings for spam replies and date format
|
|
||||||
self.settings = {
|
|
||||||
"antispam": (1, 3), # 1 trigger every 3 seconds
|
|
||||||
"spamreplies": [
|
|
||||||
"Hey hey there, don't you think it's going a bit too fast there? Only {since} sec, since your last ...",
|
|
||||||
"I am busy ...",
|
|
||||||
"Haven't you just had ?"
|
|
||||||
],
|
|
||||||
"dateformat": "%H:%M:%S", # Corresponds to 'h:i:s' in PHP
|
|
||||||
}
|
|
||||||
|
|
||||||
# Dictionary to track the last command time for each user
|
|
||||||
self.last_command_time = {}
|
|
||||||
|
|
||||||
def add_ordinal_number_suffix(self, num):
|
|
||||||
if not (num % 100 in [11, 12, 13]):
|
|
||||||
if num % 10 == 1:
|
|
||||||
return f"{num}st"
|
|
||||||
elif num % 10 == 2:
|
|
||||||
return f"{num}nd"
|
|
||||||
elif num % 10 == 3:
|
|
||||||
return f"{num}rd"
|
|
||||||
return f"{num}th"
|
|
||||||
|
|
||||||
def init_db(self):
|
|
||||||
# Create the table if it doesn't exist
|
|
||||||
with self.db:
|
|
||||||
self.db.execute('''CREATE TABLE IF NOT EXISTS servestats (
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
nick TEXT NOT NULL,
|
|
||||||
address TEXT NOT NULL,
|
|
||||||
type TEXT NOT NULL,
|
|
||||||
last REAL NOT NULL,
|
|
||||||
today INTEGER NOT NULL,
|
|
||||||
total INTEGER NOT NULL,
|
|
||||||
channel TEXT NOT NULL,
|
|
||||||
network TEXT NOT NULL
|
|
||||||
)''')
|
|
||||||
|
|
||||||
def start_daily_clear(self):
|
|
||||||
"""Start a timer to clear daily stats at midnight."""
|
|
||||||
now = time.time()
|
|
||||||
midnight = time.mktime(time.strptime(time.strftime('%Y-%m-%d') + ' 00:00:00', '%Y-%m-%d %H:%M:%S')) + 86400
|
|
||||||
delay = midnight - now
|
|
||||||
if delay < 0:
|
|
||||||
delay += 86400 # Schedule for tomorrow if midnight has passed today
|
|
||||||
threading.Timer(delay, self.timer_serve).start()
|
|
||||||
|
|
||||||
def timer_serve(self):
|
|
||||||
"""Clear daily stats and set the timer for the next day."""
|
|
||||||
# Clear daily stats
|
|
||||||
with self.db:
|
|
||||||
self.db.execute("UPDATE servestats SET today = 0")
|
|
||||||
self.ircClass.privMsg("#bot", "Cleared serve_today")
|
|
||||||
|
|
||||||
# Start the timer for the next day
|
|
||||||
self.start_daily_clear()
|
|
||||||
|
|
||||||
def _get_stats(self, nick, drink_type, channel, network):
|
|
||||||
today = int(time.strftime('%Y%m%d'))
|
|
||||||
cursor = self.db.cursor()
|
|
||||||
|
|
||||||
cursor.execute('''SELECT today, SUM(total), COUNT(*)
|
|
||||||
FROM servestats
|
|
||||||
WHERE nick = ? AND type = ? AND channel = ? AND network = ?''',
|
|
||||||
(nick, drink_type, channel, network))
|
|
||||||
|
|
||||||
result = cursor.fetchone()
|
|
||||||
if result:
|
|
||||||
today_count, total_count, sumtotal = result
|
|
||||||
total_count = total_count or 0 # Ensure total_count is not None
|
|
||||||
else:
|
|
||||||
today_count, total_count, sumtotal = 0, 0, 0
|
|
||||||
|
|
||||||
return today_count, total_count, sumtotal
|
|
||||||
|
|
||||||
def _update_stats(self, nick, address, drink_type, channel, network):
|
|
||||||
today = int(time.strftime('%Y%m%d'))
|
|
||||||
cursor = self.db.cursor()
|
|
||||||
|
|
||||||
today_count, total_count, sumtotal = self._get_stats(nick, drink_type, channel, network)
|
|
||||||
|
|
||||||
if sumtotal == 0:
|
|
||||||
# This means it's the first time this user has requested this drink
|
|
||||||
today_count = 1 # Set today's count to 1
|
|
||||||
total_count = 1 # Set total count to 1
|
|
||||||
cursor.execute('''INSERT INTO servestats (nick, address, type, last, today, total, channel, network)
|
|
||||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?)''',
|
|
||||||
(nick, address, drink_type, time.time(), today_count, total_count, channel, network))
|
|
||||||
else:
|
|
||||||
if today_count == today:
|
|
||||||
today_count += 1
|
|
||||||
else:
|
|
||||||
today_count = 1
|
|
||||||
|
|
||||||
total_count += 1
|
|
||||||
|
|
||||||
cursor.execute('''UPDATE servestats
|
|
||||||
SET last = ?, today = ?, total = ?
|
|
||||||
WHERE nick = ? AND type = ? AND channel = ? AND network = ?''',
|
|
||||||
(time.time(), today_count, total_count, nick, drink_type, channel, network))
|
|
||||||
|
|
||||||
self.db.commit()
|
|
||||||
return today_count, total_count, sumtotal + 1
|
|
||||||
|
|
||||||
def _select_spam_reply(self, last_served_time):
|
|
||||||
"""Select a spam reply if the user requests drinks too quickly."""
|
|
||||||
time_since_last = time.time() - last_served_time
|
|
||||||
# Convert the time since last command to seconds
|
|
||||||
formatted_time = int(time_since_last) # Get the time in seconds
|
|
||||||
reply = random.choice(self.settings["spamreplies"])
|
|
||||||
return reply.format(since=formatted_time)
|
|
||||||
|
|
||||||
def _is_spamming(self, nick):
|
|
||||||
"""Check if the user is spamming commands too quickly."""
|
|
||||||
current_time = time.time()
|
|
||||||
last_time = self.last_command_time.get(nick, 0)
|
|
||||||
|
|
||||||
# Get the antispam configuration
|
|
||||||
triggers, seconds = self.settings["antispam"]
|
|
||||||
|
|
||||||
# Calculate the threshold in seconds
|
|
||||||
threshold = seconds
|
|
||||||
|
|
||||||
# Check the time difference based on the antispam settings
|
|
||||||
if current_time - last_time < threshold: # Allow one command every 'seconds'
|
|
||||||
return True
|
|
||||||
|
|
||||||
self.last_command_time[nick] = current_time # Update the last command time
|
|
||||||
return False
|
|
||||||
# BAR
|
|
||||||
|
|
||||||
@wrap([optional('channel')])
|
|
||||||
def bar(self, irc, msg, args, channel):
|
|
||||||
"""+bar - Show all available drink commands."""
|
|
||||||
# List of available drink commands
|
|
||||||
available_drinks = [
|
|
||||||
"+cola", # Cola
|
|
||||||
"+beer", # Beer
|
|
||||||
"+coffee", # Coffee
|
|
||||||
"+cap", # Cappuccino
|
|
||||||
"+whiskey", # Whiskey
|
|
||||||
"+wine", # Wine
|
|
||||||
"+mix", # Mix
|
|
||||||
"+pipe", # Pipe
|
|
||||||
"+coke", # Coke
|
|
||||||
"+pussy", # Pussy (from your existing code)
|
|
||||||
"+ice", # Ice cream
|
|
||||||
# Add other drink commands here as needed
|
|
||||||
]
|
|
||||||
|
|
||||||
# Format the response
|
|
||||||
response = "Available drinks: " + ", ".join(available_drinks)
|
|
||||||
|
|
||||||
# Send the response
|
|
||||||
irc.reply(response)
|
|
||||||
|
|
||||||
# DRINKS
|
|
||||||
@wrap([optional('channel')])
|
|
||||||
def cola(self, irc, msg, args, channel):
|
|
||||||
"""+cola - Serve a cola."""
|
|
||||||
nick = msg.nick
|
|
||||||
address = msg.prefix
|
|
||||||
network = irc.network
|
|
||||||
|
|
||||||
# Check if the user is spamming commands
|
|
||||||
if self._is_spamming(nick):
|
|
||||||
last_served_time = self.last_command_time[nick]
|
|
||||||
response = self._select_spam_reply(last_served_time)
|
|
||||||
irc.reply(response)
|
|
||||||
return
|
|
||||||
|
|
||||||
# Update stats
|
|
||||||
today_count, total_count, sumtotal = self._update_stats(nick, address, "cola", channel, network)
|
|
||||||
|
|
||||||
responses = [
|
|
||||||
f"Serves icecold cola ({today_count}/{total_count}/{sumtotal})",
|
|
||||||
f"Serves cola that has been laying in a pile of shit ~45c ({today_count}/{total_count}/{sumtotal})",
|
|
||||||
f"Serves cola that's been standing close to a box of dry ice ~1.3c ({today_count}/{total_count}/{sumtotal})",
|
|
||||||
f"Serves a warm flat cola that no one wants ~25c ({today_count}/{total_count}/{sumtotal})",
|
|
||||||
f"Serves cola fresh from the fridge, chilled to perfection ~5c ({today_count}/{total_count}/{sumtotal})",
|
|
||||||
f"Serves cola that tastes slightly metallic after standing in a can too long ~18c ({today_count}/{total_count}/{sumtotal})"
|
|
||||||
]
|
|
||||||
|
|
||||||
# Select a random response
|
|
||||||
response = random.choice(responses)
|
|
||||||
irc.reply(response)
|
|
||||||
|
|
||||||
@wrap([optional('channel')])
|
|
||||||
def beer(self, irc, msg, args, channel):
|
|
||||||
"""+beer - Serve a beer."""
|
|
||||||
nick = msg.nick
|
|
||||||
address = msg.prefix
|
|
||||||
network = irc.network
|
|
||||||
|
|
||||||
# Check if the user is spamming commands
|
|
||||||
if self._is_spamming(nick):
|
|
||||||
last_served_time = self.last_command_time[nick]
|
|
||||||
response = self._select_spam_reply(last_served_time)
|
|
||||||
irc.reply(response)
|
|
||||||
return
|
|
||||||
|
|
||||||
# Update stats
|
|
||||||
today_count, total_count, sumtotal = self._update_stats(nick, address, "beer", channel, network)
|
|
||||||
|
|
||||||
responses = [
|
|
||||||
f"Serves icecold beer ({today_count}/{total_count}/{sumtotal})",
|
|
||||||
f"Serves a beer for {nick} that has been laying in a pile of shit ~45c ({today_count}/{total_count}/{sumtotal})",
|
|
||||||
f"Serves a warn beer for {nick} ({today_count}/{total_count}/{sumtotal})",
|
|
||||||
]
|
|
||||||
|
|
||||||
# Select a random response
|
|
||||||
response = random.choice(responses)
|
|
||||||
irc.reply(response)
|
|
||||||
|
|
||||||
@wrap([optional('channel')])
|
|
||||||
def coffee(self, irc, msg, args, channel):
|
|
||||||
"""+coffee - Make a coffee."""
|
|
||||||
nick = msg.nick
|
|
||||||
address = msg.prefix
|
|
||||||
network = irc.network
|
|
||||||
|
|
||||||
# Check if the user is spamming commands
|
|
||||||
if self._is_spamming(nick):
|
|
||||||
last_served_time = self.last_command_time[nick]
|
|
||||||
response = self._select_spam_reply(last_served_time)
|
|
||||||
irc.reply(response)
|
|
||||||
return
|
|
||||||
|
|
||||||
# Update stats
|
|
||||||
today_count, total_count, sumtotal = self._update_stats(nick, address, "coffee", channel, network)
|
|
||||||
|
|
||||||
# Add ordinal suffix to sumtotal
|
|
||||||
ordinal_suffix = self.add_ordinal_number_suffix(sumtotal)
|
|
||||||
|
|
||||||
responses = [
|
|
||||||
f"Making a cup of coffee for {nick}, {today_count} made today out of {total_count} ordered, making it the {ordinal_suffix} time I made coffee."
|
|
||||||
]
|
|
||||||
|
|
||||||
# Select a random response
|
|
||||||
response = random.choice(responses)
|
|
||||||
irc.reply(response)
|
|
||||||
|
|
||||||
@wrap([optional('channel')])
|
|
||||||
def cap(self, irc, msg, args, channel):
|
|
||||||
"""+cap - Make a Cappuccino."""
|
|
||||||
nick = msg.nick
|
|
||||||
address = msg.prefix
|
|
||||||
network = irc.network
|
|
||||||
|
|
||||||
# Check if the user is spamming commands
|
|
||||||
if self._is_spamming(nick):
|
|
||||||
last_served_time = self.last_command_time[nick]
|
|
||||||
response = self._select_spam_reply(last_served_time)
|
|
||||||
irc.reply(response)
|
|
||||||
return
|
|
||||||
|
|
||||||
# Update stats
|
|
||||||
today_count, total_count, sumtotal = self._update_stats(nick, address, "cap", channel, network)
|
|
||||||
|
|
||||||
# Add ordinal suffix to sumtotal
|
|
||||||
ordinal_suffix = self.add_ordinal_number_suffix(sumtotal)
|
|
||||||
|
|
||||||
responses = [
|
|
||||||
f"Making a nice Cappuccino for {nick}, {today_count} made today out of {total_count} ordered, making it the {ordinal_suffix} time I made Cappuccino."
|
|
||||||
]
|
|
||||||
|
|
||||||
# Select a random response
|
|
||||||
response = random.choice(responses)
|
|
||||||
irc.reply(response)
|
|
||||||
|
|
||||||
@wrap([optional('channel')])
|
|
||||||
def whiskey(self, irc, msg, args, channel):
|
|
||||||
"""+whiskey - Serve a whiskey."""
|
|
||||||
nick = msg.nick
|
|
||||||
address = msg.prefix
|
|
||||||
network = irc.network
|
|
||||||
|
|
||||||
# Check if the user is spamming commands
|
|
||||||
if self._is_spamming(nick):
|
|
||||||
last_served_time = self.last_command_time[nick]
|
|
||||||
response = self._select_spam_reply(last_served_time)
|
|
||||||
irc.reply(response)
|
|
||||||
return
|
|
||||||
|
|
||||||
# Update stats
|
|
||||||
today_count, total_count, sumtotal = self._update_stats(nick, address, "whiskey", channel, network)
|
|
||||||
|
|
||||||
responses = [
|
|
||||||
f"serves whiskey on the rocks ({total_count})",
|
|
||||||
f"found some weird looking bottle in corner, might hit gold cheers ({total_count})",
|
|
||||||
f"cola and bad whiskey for you ({total_count})",
|
|
||||||
]
|
|
||||||
|
|
||||||
# Select a random response
|
|
||||||
response = random.choice(responses)
|
|
||||||
irc.reply(response)
|
|
||||||
|
|
||||||
@wrap([optional('channel')])
|
|
||||||
def wine(self, irc, msg, args, channel):
|
|
||||||
"""+wine - Serve a wine."""
|
|
||||||
nick = msg.nick
|
|
||||||
address = msg.prefix
|
|
||||||
network = irc.network
|
|
||||||
|
|
||||||
# Check if the user is spamming commands
|
|
||||||
if self._is_spamming(nick):
|
|
||||||
last_served_time = self.last_command_time[nick]
|
|
||||||
response = self._select_spam_reply(last_served_time)
|
|
||||||
irc.reply(response)
|
|
||||||
return
|
|
||||||
|
|
||||||
# Update stats
|
|
||||||
today_count, total_count, sumtotal = self._update_stats(nick, address, "wine", channel, network)
|
|
||||||
|
|
||||||
responses = [
|
|
||||||
f"pours up some fine stuff from the basement ({total_count})",
|
|
||||||
f"here you are, found something out back ({total_count})",
|
|
||||||
f"lucky you we just got one of this left enjoy ({total_count})",
|
|
||||||
f"so you're hit hard, where you want it ?, don't cry",
|
|
||||||
]
|
|
||||||
|
|
||||||
# Select a random response
|
|
||||||
response = random.choice(responses)
|
|
||||||
irc.reply(response)
|
|
||||||
# END
|
|
||||||
|
|
||||||
# EATING
|
|
||||||
|
|
||||||
@wrap([optional('channel')])
|
|
||||||
def ice(self, irc, msg, args, channel):
|
|
||||||
"""+ice - Serve some icecreams"""
|
|
||||||
nick = msg.nick
|
|
||||||
address = msg.prefix
|
|
||||||
network = irc.network
|
|
||||||
|
|
||||||
# Check if the user is spamming commands
|
|
||||||
if self._is_spamming(nick):
|
|
||||||
last_served_time = self.last_command_time[nick]
|
|
||||||
response = self._select_spam_reply(last_served_time)
|
|
||||||
irc.reply(response)
|
|
||||||
return
|
|
||||||
|
|
||||||
# Update stats
|
|
||||||
today_count, total_count, sumtotal = self._update_stats(nick, address, "ice", channel, network)
|
|
||||||
|
|
||||||
responses = [
|
|
||||||
f"here {nick}... one ball for you only ({today_count}/{total_count}/{sumtotal})",
|
|
||||||
f"finds a biig icecream for {nick} eat and you get for free ($50 to use toilet) ({today_count}/{total_count}/{sumtotal})",
|
|
||||||
f"dusts off something that look like icecream from the corner of fridge, here you go {nick} ({today_count}/{total_count}/{sumtotal})",
|
|
||||||
]
|
|
||||||
|
|
||||||
# Select a random response
|
|
||||||
response = random.choice(responses)
|
|
||||||
irc.reply(response)
|
|
||||||
# END
|
|
||||||
|
|
||||||
# MIX/HASH/ETC
|
|
||||||
@wrap([optional('channel')])
|
|
||||||
def mix(self, irc, msg, args, channel):
|
|
||||||
"""+mix - You need something to get high with."""
|
|
||||||
nick = msg.nick
|
|
||||||
address = msg.prefix
|
|
||||||
network = irc.network
|
|
||||||
|
|
||||||
# Check if the user is spamming commands
|
|
||||||
if self._is_spamming(nick):
|
|
||||||
last_served_time = self.last_command_time[nick]
|
|
||||||
response = self._select_spam_reply(last_served_time)
|
|
||||||
irc.reply(response)
|
|
||||||
return
|
|
||||||
|
|
||||||
# Update stats
|
|
||||||
today_count, total_count, sumtotal = self._update_stats(nick, address, "mix", channel, network)
|
|
||||||
|
|
||||||
# Fetch the list of users in the channel as a list
|
|
||||||
channel_users = list(irc.state.channels[channel].users) if channel in irc.state.channels else []
|
|
||||||
|
|
||||||
# Define the list of nicknames to exclude
|
|
||||||
excluded_nicks = ['klapvogn', 'chat'] # Add any additional nicknames here
|
|
||||||
|
|
||||||
# Exclude specified nicknames from the list of users
|
|
||||||
potential_names = [user for user in channel_users if user not in excluded_nicks]
|
|
||||||
|
|
||||||
# Select a random name from the channel users
|
|
||||||
if potential_names:
|
|
||||||
random_name = random.choice(potential_names)
|
|
||||||
else:
|
|
||||||
random_name = 'your mom' # Fallback if no other users are present
|
|
||||||
|
|
||||||
responses = [
|
|
||||||
f"grinding up some weed for a mix ({total_count})",
|
|
||||||
f"grabs some of the good stuff for a mix ({total_count})",
|
|
||||||
f"sneaks into {random_name}'s stash and steals for a mix, here you go ({total_count})",
|
|
||||||
f"Gges strain hunting in India for some good shit for your mix ({total_count})",
|
|
||||||
f"goes strain hunting in Morocco for some good shit for your mix ({total_count})",
|
|
||||||
]
|
|
||||||
|
|
||||||
# Select a random response
|
|
||||||
response = random.choice(responses)
|
|
||||||
irc.reply(response)
|
|
||||||
|
|
||||||
@wrap([optional('channel')])
|
|
||||||
def pipe(self, irc, msg, args, channel):
|
|
||||||
"""+pussy - you need some pussy"""
|
|
||||||
nick = msg.nick
|
|
||||||
address = msg.prefix
|
|
||||||
network = irc.network
|
|
||||||
|
|
||||||
# Check if the user is spamming commands
|
|
||||||
if self._is_spamming(nick):
|
|
||||||
last_served_time = self.last_command_time[nick]
|
|
||||||
response = self._select_spam_reply(last_served_time)
|
|
||||||
irc.reply(response)
|
|
||||||
return
|
|
||||||
|
|
||||||
# Update stats
|
|
||||||
today_count, total_count, sumtotal = self._update_stats(nick, address, "pipe", channel, network)
|
|
||||||
|
|
||||||
responses = [
|
|
||||||
f"goes strain hunting in morocco for some good shit for your pipe ({total_count})",
|
|
||||||
f"saw some shit in corner, fills a pipe ({total_count})",
|
|
||||||
f"skunky just arrieved peace all over ({total_count})",
|
|
||||||
]
|
|
||||||
|
|
||||||
@wrap([optional('channel')])
|
|
||||||
def coke(self, irc, msg, args, channel):
|
|
||||||
"""+pussy - you need some pussy"""
|
|
||||||
nick = msg.nick
|
|
||||||
address = msg.prefix
|
|
||||||
network = irc.network
|
|
||||||
|
|
||||||
# Check if the user is spamming commands
|
|
||||||
if self._is_spamming(nick):
|
|
||||||
last_served_time = self.last_command_time[nick]
|
|
||||||
response = self._select_spam_reply(last_served_time)
|
|
||||||
irc.reply(response)
|
|
||||||
return
|
|
||||||
|
|
||||||
# Update stats
|
|
||||||
today_count, total_count, sumtotal = self._update_stats(nick, address, "coke", channel, network)
|
|
||||||
|
|
||||||
responses = [
|
|
||||||
f"Are you stupid? We don't do shit like this... ^_^ ({total_count})"
|
|
||||||
|
|
||||||
]
|
|
||||||
|
|
||||||
# Select a random response
|
|
||||||
response = random.choice(responses)
|
|
||||||
irc.reply(response)
|
|
||||||
# END
|
|
||||||
|
|
||||||
@wrap([optional('channel')])
|
|
||||||
def pussy(self, irc, msg, args, channel):
|
|
||||||
"""+pussy - you need some pussy"""
|
|
||||||
nick = msg.nick
|
|
||||||
address = msg.prefix
|
|
||||||
network = irc.network
|
|
||||||
|
|
||||||
# Check if the user is spamming commands
|
|
||||||
if self._is_spamming(nick):
|
|
||||||
last_served_time = self.last_command_time[nick]
|
|
||||||
response = self._select_spam_reply(last_served_time)
|
|
||||||
irc.reply(response)
|
|
||||||
return
|
|
||||||
|
|
||||||
# Update stats
|
|
||||||
today_count, total_count, sumtotal = self._update_stats(nick, address, "pussy", channel, network)
|
|
||||||
|
|
||||||
responses = [
|
|
||||||
f"slaps {nick} in face with a smelly pussy ({total_count})",
|
|
||||||
f"sends some pussy {nick}'s way .. ({total_count})",
|
|
||||||
f"not enough money to suply you aswell ... ({total_count})",
|
|
||||||
f"if you have the cash {nick} I can pull down my undies for you ({total_count})",
|
|
||||||
]
|
|
||||||
|
|
||||||
# Select a random response
|
|
||||||
response = random.choice(responses)
|
|
||||||
irc.reply(response)
|
|
||||||
|
|
||||||
Class = Serve
|
|
Loading…
x
Reference in New Issue
Block a user