added topic thing and probably other stuff
This commit is contained in:
parent
6ef18ff0be
commit
0723754012
|
@ -129,9 +129,9 @@ def kickban(bot, trigger):
|
||||||
|
|
||||||
@require_chanmsg
|
@require_chanmsg
|
||||||
@require_privilege(OP, 'You are not a channel operator.')
|
@require_privilege(OP, 'You are not a channel operator.')
|
||||||
@commands('topic')
|
@commands('oldtopic')
|
||||||
@example(".topic We're discussing penises, would you like to join?")
|
@example(".oldtopic We're discussing penises, would you like to join?")
|
||||||
def topic(bot, trigger):
|
def oldtopic(bot, trigger):
|
||||||
"""
|
"""
|
||||||
This gives ops the ability to change the topic.
|
This gives ops the ability to change the topic.
|
||||||
The bot must be a Channel Operator for this command to work.
|
The bot must be a Channel Operator for this command to work.
|
||||||
|
|
|
@ -1,46 +1,166 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# coding=utf-8
|
|
||||||
"""
|
"""
|
||||||
Resistor color band codes.
|
Resistor color band codes.
|
||||||
"""
|
"""
|
||||||
|
import re
|
||||||
|
import argparse
|
||||||
|
|
||||||
import module
|
import module
|
||||||
|
|
||||||
@module.commands('resist')
|
suffix = {"k": 1000, "m": 10000000}
|
||||||
@module.example('.resist 10k', 'brown black orange gold')
|
|
||||||
|
sigfig = {"black": 0,
|
||||||
|
"brown": 1,
|
||||||
|
"red": 2,
|
||||||
|
"orange": 3,
|
||||||
|
"yellow": 4,
|
||||||
|
"green": 5,
|
||||||
|
"blue": 6,
|
||||||
|
"violet": 7,
|
||||||
|
"grey": 8,
|
||||||
|
"white": 9}
|
||||||
|
sigfig_inverse = {val: key for key, val in sigfig.items()}
|
||||||
|
|
||||||
|
multiplier = {"black": 1,
|
||||||
|
"brown": 10,
|
||||||
|
"red": 100,
|
||||||
|
"orange": 1000,
|
||||||
|
"yellow": 10000,
|
||||||
|
"green": 100000,
|
||||||
|
"blue": 1000000,
|
||||||
|
"violet": 10000000,
|
||||||
|
"grey": 100000000,
|
||||||
|
"white": 1000000000,
|
||||||
|
"gold": 0.1,
|
||||||
|
"silver": 0.01}
|
||||||
|
multiplier_inverse = {val: key for key, val in multiplier.items()}
|
||||||
|
|
||||||
|
tolerance = {"brown": "±1%",
|
||||||
|
"red": "±2%",
|
||||||
|
"green": "±0.5%",
|
||||||
|
"blue": "±0.25%",
|
||||||
|
"violet": "±0.1%",
|
||||||
|
"grey": "±0.05%",
|
||||||
|
"gold": "±5%",
|
||||||
|
"silver": "±10%",
|
||||||
|
"none": "±20%"}
|
||||||
|
|
||||||
|
temp_coeff = {"black": "250 ppm",
|
||||||
|
"brown": "100 ppm",
|
||||||
|
"red": "50 ppm",
|
||||||
|
"orange": "15 ppm",
|
||||||
|
"yellow": "25 ppm",
|
||||||
|
"blue": "10 ppm",
|
||||||
|
"violet": "5 ppm"}
|
||||||
|
|
||||||
|
|
||||||
|
@module.commands("resist")
|
||||||
|
@module.example(".resist 10k", "brown black orange gold")
|
||||||
def resist(bot, trigger):
|
def resist(bot, trigger):
|
||||||
"""Displays the color band code of a resistor for the given resistance."""
|
"""
|
||||||
suffix = {'k': 1000, 'm': 10000000}
|
Displays the color band code of a resistor for the given resistance.
|
||||||
digit = {'0': 'black', '1': 'brown', '2': 'red', '3': 'orange', '4': 'yellow',
|
"""
|
||||||
'5': 'green', '6': 'blue', '7': 'violet', '8': 'grey', '9': 'white',
|
if not trigger.group(2):
|
||||||
'-1': 'gold', '-2': 'silver'}
|
return bot.say("Please specify a value")
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument("value", nargs="+")
|
||||||
|
parser.add_argument("-r", "--reverse", action="store_true")
|
||||||
|
parser.add_argument("-n", "--num_bands", type=int, choices=[3,4,5,6], default=4)
|
||||||
|
args = parser.parse_args(trigger.group(2).split())
|
||||||
|
|
||||||
if not trigger.group(2)[-1].isdigit():
|
if args.reverse: # bands-to-value
|
||||||
value = trigger.group(2)[:-1]
|
bot.say(bands_to_value(" ".join(args.value)))
|
||||||
else:
|
else: # value-to-band
|
||||||
value = trigger.group(2)
|
if len(args.value) > 1:
|
||||||
|
return bot.say("Too many values.")
|
||||||
|
|
||||||
|
value = args.value[0].lower()
|
||||||
|
mul = 1
|
||||||
|
if value[-1] in ["k", "m"]:
|
||||||
|
mul = suffix[value[-1]]
|
||||||
|
value = value[:-1]
|
||||||
try:
|
try:
|
||||||
value = float(value)
|
value = float(value) * mul
|
||||||
except ValueError:
|
except ValueError:
|
||||||
return 'Invalid input'
|
return bot.say("Invalid input.")
|
||||||
|
return bot.say(value_to_band(value, args.num_bands))
|
||||||
|
|
||||||
if not trigger.group(2)[-1].isdigit():
|
|
||||||
value = value * suffix[trigger.group(2)[-1]]
|
|
||||||
valueStr = str(value)
|
|
||||||
|
|
||||||
if value >= 10:
|
def value_to_band(value, num_bands=4):
|
||||||
colorCode = digit[valueStr[0]] + " " + digit[valueStr[1]] + " "
|
"""
|
||||||
|
Converts a given resistance value to a color band code.
|
||||||
|
"""
|
||||||
|
if value < 1:
|
||||||
|
return "Value too small. Maybe this will be fixed in the future."
|
||||||
else:
|
else:
|
||||||
colorCode = digit[valueStr[2]] + " " + digit['0'] + " "
|
if num_bands > 4:
|
||||||
|
value = float(format(value, ".3g"))
|
||||||
if value < 0.1:
|
|
||||||
return "Value to small. Just like your dick."
|
|
||||||
elif value < 1:
|
|
||||||
colorCode = colorCode + digit['-2']
|
|
||||||
elif value < 10:
|
|
||||||
colorCode = colorCode + digit['-1']
|
|
||||||
else:
|
else:
|
||||||
colorCode = colorCode + digit[str(len(valueStr)-4)]
|
value = float(format(value, ".2g"))
|
||||||
|
value = re.sub("\.0$", "", str(value))
|
||||||
|
bands = []
|
||||||
|
mul = ""
|
||||||
|
|
||||||
|
if "." in value:
|
||||||
|
if value[-2] == ".":
|
||||||
|
mul = 0.1
|
||||||
|
elif value[-3] == ".":
|
||||||
|
mul = 0.01
|
||||||
|
else:
|
||||||
|
return "Error with sigfigs."
|
||||||
|
value = value.replace(".", "")
|
||||||
|
|
||||||
|
val1 = int(value[0])
|
||||||
|
val2 = int(value[1])
|
||||||
|
bands.append(sigfig_inverse[val1])
|
||||||
|
bands.append(sigfig_inverse[val2])
|
||||||
|
|
||||||
|
if num_bands > 4:
|
||||||
|
value = value.ljust(4,"0")
|
||||||
|
val3 = int(value[2])
|
||||||
|
bands.append(sigfig_inverse[val3])
|
||||||
|
|
||||||
|
if not mul:
|
||||||
|
mul = 10**(len(value) - len(value.rstrip("0")))
|
||||||
|
bands.append(multiplier_inverse[mul])
|
||||||
|
|
||||||
|
# TODO: better tolerance
|
||||||
|
bands.append("gold")
|
||||||
|
|
||||||
|
if num_bands == 3:
|
||||||
|
return " ".join(bands)
|
||||||
|
|
||||||
|
# TODO: better temp coeff
|
||||||
|
if num_bands == 6:
|
||||||
|
bands.append("red")
|
||||||
|
|
||||||
|
return " ".join(bands)
|
||||||
|
|
||||||
|
|
||||||
|
def bands_to_value(bands):
|
||||||
|
"""
|
||||||
|
Converts the given color band code into a resistance value.
|
||||||
|
"""
|
||||||
|
bands = bands.lower().split()
|
||||||
|
ret = []
|
||||||
|
|
||||||
|
if len(bands) > 4:
|
||||||
|
value = bands[:3]
|
||||||
|
bands = bands[3:]
|
||||||
|
else:
|
||||||
|
value = bands[:2]
|
||||||
|
bands = bands[2:]
|
||||||
|
value = [sigfig[v] for v in value]
|
||||||
|
|
||||||
|
prod = ""
|
||||||
|
for x in value:
|
||||||
|
prod += str(x)
|
||||||
|
prod = float(prod) * multiplier[bands[0]]
|
||||||
|
|
||||||
|
if len(bands) == 1:
|
||||||
|
return " ".join([str(prod), tolerance["none"]])
|
||||||
|
if len(bands) == 2:
|
||||||
|
return " ".join([str(prod), tolerance[bands[1]]])
|
||||||
|
if len(bands) == 3:
|
||||||
|
return " ".join([str(prod), tolerance[bands[1]], temp_coeff[bands[2]]])
|
||||||
|
|
||||||
colorCode = colorCode + " gold"
|
|
||||||
bot.say(colorCode)
|
|
65
modules/topic.py
Executable file
65
modules/topic.py
Executable file
|
@ -0,0 +1,65 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
This module allows you to add topics to a list in the database and cycle
|
||||||
|
through them.
|
||||||
|
"""
|
||||||
|
import os
|
||||||
|
import threading
|
||||||
|
import random
|
||||||
|
|
||||||
|
from module import commands, example
|
||||||
|
|
||||||
|
def setup(bot):
|
||||||
|
"""
|
||||||
|
Attempts to create the table in the database if it's not found.
|
||||||
|
"""
|
||||||
|
bot.memory['topic_lock'] = threading.Lock()
|
||||||
|
con = bot.db.connect()
|
||||||
|
cur = con.cursor()
|
||||||
|
try:
|
||||||
|
cur.execute("SELECT * FROM topic").fetchone()
|
||||||
|
except:
|
||||||
|
cur.execute("CREATE TABLE topic("
|
||||||
|
"topic STRING PRIMARY KEY,"
|
||||||
|
"added_by STRING,"
|
||||||
|
"added_date INT DEFAULT (STRFTIME('%s', 'now')))")
|
||||||
|
con.commit()
|
||||||
|
con.close()
|
||||||
|
|
||||||
|
|
||||||
|
@commands('topic')
|
||||||
|
def topic(bot, trigger):
|
||||||
|
"""
|
||||||
|
Picks a random topic from the database and applies it.
|
||||||
|
"""
|
||||||
|
channel = trigger.sender
|
||||||
|
con = bot.db.connect()
|
||||||
|
cur = con.cursor()
|
||||||
|
cur.execute("SELECT topic FROM topic ORDER BY RANDOM() LIMIT 1;")
|
||||||
|
topic = cur.fetchone()[0]
|
||||||
|
con.close()
|
||||||
|
|
||||||
|
bot.write(('TOPIC', channel + ' :' + topic))
|
||||||
|
|
||||||
|
|
||||||
|
@commands('addtopic')
|
||||||
|
@example('.addtopic Daily reminder to kill all cia niggers on site.')
|
||||||
|
def addTopic(bot, trigger):
|
||||||
|
"""
|
||||||
|
Adds the specified topic to the topic database.
|
||||||
|
"""
|
||||||
|
bot.memory['topic_lock'].acquire()
|
||||||
|
topic = trigger.group(2)
|
||||||
|
con = bot.db.connect()
|
||||||
|
cur = con.cursor()
|
||||||
|
insert = (topic, trigger.nick)
|
||||||
|
try:
|
||||||
|
cur.execute("INSERT INTO topic (topic, added_by) VALUES(?,?)",
|
||||||
|
insert)
|
||||||
|
confirm = "Added topic: " + topic
|
||||||
|
except sqlite3.IntegrityError:
|
||||||
|
confirm = "Error: " + topic + " is already in the database."
|
||||||
|
con.commit()
|
||||||
|
con.close()
|
||||||
|
bot.memory['topic_lock'].release()
|
||||||
|
bot.say(confirm)
|
|
@ -131,15 +131,21 @@ def unwatch(bot, trigger):
|
||||||
bot.memory["watcher"].pop(url)
|
bot.memory["watcher"].pop(url)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
return bot.say("Error: I'm not watching that thread.")
|
return bot.say("Error: I'm not watching that thread.")
|
||||||
|
removeThread(bot, get_api_url(url),)
|
||||||
|
bot.say("[\x0304Watcher\x03] No longer watching: \x0307" + url)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def removeThread(bot, url):
|
||||||
|
"""
|
||||||
|
Removes the provided thread from the database. This should be the API url.
|
||||||
|
"""
|
||||||
con = bot.db.connect()
|
con = bot.db.connect()
|
||||||
cur = con.cursor()
|
cur = con.cursor()
|
||||||
cur.execute("DELETE FROM watcher WHERE api_url = ?", (get_api_url(url),))
|
cur.execute("DELETE FROM watcher WHERE api_url = ?", (url,))
|
||||||
con.commit()
|
con.commit()
|
||||||
con.close()
|
con.close()
|
||||||
|
|
||||||
bot.say("[\x0304Watcher\x03] No longer watching: \x0307" + url)
|
|
||||||
|
|
||||||
|
|
||||||
class WatcherThread(threading.Thread):
|
class WatcherThread(threading.Thread):
|
||||||
def __init__(self, bot, api_url, name, last_post, time_since, channel):
|
def __init__(self, bot, api_url, name, last_post, time_since, channel):
|
||||||
|
@ -171,6 +177,7 @@ class WatcherThread(threading.Thread):
|
||||||
msg = "[\x0304Watcher\x03] Thread deleted: " \
|
msg = "[\x0304Watcher\x03] Thread deleted: " \
|
||||||
+ f"\x0307{get_thread_url(self.api_url)}"
|
+ f"\x0307{get_thread_url(self.api_url)}"
|
||||||
self.bot.say(msg, self.channel)
|
self.bot.say(msg, self.channel)
|
||||||
|
removeThread(self.bot, api_url)
|
||||||
self.stop.set()
|
self.stop.set()
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
@ -182,6 +189,7 @@ class WatcherThread(threading.Thread):
|
||||||
msg = "[\x0304Watcher\x03] Thread closed: " \
|
msg = "[\x0304Watcher\x03] Thread closed: " \
|
||||||
+ f"\x0307{get_thread_url(self.api_url)}"
|
+ f"\x0307{get_thread_url(self.api_url)}"
|
||||||
self.bot.say(msg, self.channel)
|
self.bot.say(msg, self.channel)
|
||||||
|
removeThread(self.bot, api_url)
|
||||||
self.stop.set()
|
self.stop.set()
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
@ -189,6 +197,7 @@ class WatcherThread(threading.Thread):
|
||||||
if new_last_post > self.last_post:
|
if new_last_post > self.last_post:
|
||||||
self.last_post = new_last_post
|
self.last_post = new_last_post
|
||||||
msg = "[\x0304Watcher\x03] New post from \x0308" \
|
msg = "[\x0304Watcher\x03] New post from \x0308" \
|
||||||
+ f"{self.name}\x03 in \x0307{get_thread_url(self.api_url)}"
|
+ f"{self.name}\x03: \x0307{get_thread_url(self.api_url)}"
|
||||||
|
+ f"#{self.last_post}"
|
||||||
self.bot.say(msg, self.channel)
|
self.bot.say(msg, self.channel)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user