2016-04-19 17:40:59 +00:00
""" FokaBot related functions """
2016-10-31 10:57:11 +00:00
import random
2016-05-20 16:53:09 +00:00
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
2016-05-20 16:53:09 +00:00
# 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
2016-10-01 19:19:03 +00:00
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
2016-05-28 18:26:26 +00:00
#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 :
2016-05-28 18:26:26 +00:00
# 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? \n Who are you? \n I ' 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 ( )