pep.py/objects/fokabot.py

85 lines
2.8 KiB
Python
Raw Permalink Normal View History

2016-04-19 17:40:59 +00:00
"""FokaBot related functions"""
2016-10-31 10:57:11 +00:00
import random
import re
2016-10-02 20:48:14 +00:00
2016-10-31 09:47:28 +00:00
import time
2016-10-02 20:48:14 +00:00
from common import generalUtils
from common.constants import actions
from common.ripple import userUtils
from constants import fokabotCommands
from objects import glob
2016-10-31 09:47:28 +00:00
from common.log import logUtils as log
import threading
from helpers import chatHelper as chat
from constants import serverPackets
# Tillerino np regex, compiled only once to increase performance
npRegex = re.compile("^https?:\\/\\/osu\\.ppy\\.sh\\/b\\/(\\d*)")
2016-04-19 17:40:59 +00:00
def connect():
"""Add FokaBot to connected users and send userpanel/stats packet to everyone"""
token = glob.tokens.addToken(999)
2016-09-02 15:16:22 +00:00
token.actionID = actions.IDLE
glob.streams.broadcast("main", serverPackets.userPanel(999))
glob.streams.broadcast("main", serverPackets.userStats(999))
2016-06-17 15:43:49 +00:00
2016-04-19 17:40:59 +00:00
def disconnect():
"""Remove FokaBot from connected users"""
glob.tokens.deleteToken(glob.tokens.getTokenFromUserID(999))
def fokabotResponse(fro, chan, message):
"""
Check if a message has triggered fokabot (and return its response)
fro -- sender username (for permissions stuff with admin commands)
chan -- channel name
message -- message
return -- fokabot's response string or False
"""
for i in fokabotCommands.commands:
# Loop though all commands
#if i["trigger"] in message:
2016-10-31 10:57:11 +00:00
if generalUtils.strContains(message.lower(), i["trigger"].lower()):
2016-04-19 17:40:59 +00:00
# message has triggered a command
# Make sure the user has right permissions
2016-09-02 15:45:10 +00:00
if i["privileges"] is not None:
# Rank = x
2016-10-02 20:48:14 +00:00
if userUtils.getPrivileges(userUtils.getID(fro)) & i["privileges"] == 0:
2016-04-19 17:40:59 +00:00
return False
# Check argument number
message = message.split(" ")
if i["syntax"] != "" and len(message) <= len(i["syntax"].split(" ")):
return "Wrong syntax: {} {}".format(i["trigger"], i["syntax"])
# Return response or execute callback
2016-09-02 15:45:10 +00:00
if i["callback"] is None:
2016-04-19 17:40:59 +00:00
return i["response"]
else:
return i["callback"](fro, chan, message[1:])
# No commands triggered
2016-10-31 09:47:28 +00:00
return False
def zingheriLoop():
log.debug("SONO STATI I ZINGHERI, I ZINGHERI!")
clients = glob.streams.getClients("zingheri")
for i in clients:
log.debug(str(i))
if i not in glob.tokens.tokens:
continue
token = glob.tokens.tokens[i]
if token.userID == 999:
continue
if token.zingheri == -1:
2016-10-31 10:57:11 +00:00
chat.sendMessage("FokaBot", token.username, "Knock knock, trick or treat?\nWho are you?\nI'm a {meme}. I'm a little {meme}.\n(reply with 'trick' or 'treat')".format(meme=random.choice(["shavit", "loctaf", "peppy", "foka", "elfo", "nano", "cupola autoportante"])))
2016-10-31 09:47:28 +00:00
token.zingheri = 0
elif token.zingheri == 1:
if token.actionID == actions.PLAYING and (int(time.time()) - token.actionLatestUpdate >= 25):
token.enqueue(serverPackets.zingheri("You'd better give me a treat next time ;)"))
token.leaveStream("zingheri")
threading.Timer(30, zingheriLoop).start()