summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorLivio Recchia <recchialivio@libero.it>2020-04-06 18:50:26 +0000
committerLivio Recchia <recchialivio@libero.it>2020-04-06 18:50:26 +0000
commit076d5f3cdde1f21c6ff75962ae3f6ac0e5a5c303 (patch)
tree49b37cd6d91b426d7eef5bfc31171751e9d3b8d2 /plugins
parent752e30ec7b044aee96d8f8e15d32aba81b7dde0e (diff)
parentf7b7ec66d47369e735c297372a1956038d9eed39 (diff)
downloadmanachat-076d5f3cdde1f21c6ff75962ae3f6ac0e5a5c303.tar.gz
manachat-076d5f3cdde1f21c6ff75962ae3f6ac0e5a5c303.tar.bz2
manachat-076d5f3cdde1f21c6ff75962ae3f6ac0e5a5c303.tar.xz
manachat-076d5f3cdde1f21c6ff75962ae3f6ac0e5a5c303.zip
Merge branch 'master' into 'jak1/structuring_test'jak1/structuring_test
# Conflicts: # plugins/manaboy.py
Diffstat (limited to 'plugins')
-rwxr-xr-xplugins/chatbot.py24
-rwxr-xr-xplugins/manaboy.py316
-rw-r--r--plugins/xcom.py323
3 files changed, 402 insertions, 261 deletions
diff --git a/plugins/chatbot.py b/plugins/chatbot.py
index e26928d..e52bb0f 100755
--- a/plugins/chatbot.py
+++ b/plugins/chatbot.py
@@ -30,18 +30,16 @@ def answer_random(nick, message, is_whisper, answers):
mapserv.cmsg_chat_message(resp)
def answer(nick, message, is_whisper):
- try:
- for regex, action in commands.iteritems():
- match = regex.match(message)
- if match:
- if isinstance(action, types.ListType):
- answer_random(nick, message, is_whisper, action)
- elif isinstance(action, types.FunctionType):
- action(nick, message, is_whisper, match)
- else:
- raise ValueError("must be either list or function")
- except:
- answer_random(nick, message, is_whisper, action)
+
+ for regex, action in commands.iteritems():
+ match = regex.match(message)
+ if match:
+ if isinstance(action, types.ListType):
+ answer_random(nick, message, is_whisper, action)
+ elif isinstance(action, types.FunctionType):
+ action(nick, message, is_whisper, match)
+ else:
+ answer_random(nick, message, is_whisper, action)
@extends('smsg_being_chat')
def being_chat(data):
@@ -68,4 +66,4 @@ def remove_command(cmd):
def init(config):
add_command('!info', answer_info)
- add_command('!random', ['asd', 'Ciao!'])
+ # ~ add_command('!random', ['asd', 'Ciao!'])
diff --git a/plugins/manaboy.py b/plugins/manaboy.py
index f9dea3f..76f81d3 100755
--- a/plugins/manaboy.py
+++ b/plugins/manaboy.py
@@ -16,8 +16,6 @@ from utils import extends
from actor import find_nearest_being
from chat import send_whisper as whisper
-from net.onlineusers import OnlineUsers
-
__all__ = [ 'PLUGIN', 'init' ]
def preloadArray(nfile):
@@ -92,234 +90,6 @@ def XUfortune(nick, message, is_whisper, match): XECUTE(nick, is_whisper, "fo
def XUdate(nick, message, is_whisper, match): XECUTE(nick, is_whisper, "/bin/date")
def XUpom(nick, message, is_whisper, match): XECUTE(nick, is_whisper, "/usr/games/pom")
-# ====================== XCOM =============
-XCOMList = preloadArray("config/XCOM.txt")
-XCOMServerStatInterested = [] #List of nicks interested in server status change
-XCOMBroadcastPrefix = "##B##G "
-
-
-def online_list_update(curr,prev):
- for x in curr:
- found = False
- for y in prev:
- if x==y: found = True
- if found == False: #detected change
- for nicks in XCOMList: #For every XCOM user...
- if nicks in online_users.online_users: #That's online...
- if nicks in XCOMServerStatInterested: #If XCOM player is interested
- if x in XCOMList: #An XCOM user connected?
- XCOMDelay() #Share its status
- whisper(nicks, "##W" + x + " is now online [XCOM]")
- else: #Is a regular server player
- if x not in XCOMList:
- XCOMDelay() #Share its status
- whisper(nicks, "##W" + x + " is now online")
-
- for x in prev:
- found = False
- for y in curr:
- if x==y: found = True
- if found == False:
- for nicks in XCOMList: #For every XCOM user...
- if nicks in online_users.online_users: #That's online...
- if nicks in XCOMServerStatInterested: #If XCOM player is interested
- if x in XCOMList: #An XCOM user connected?
- XCOMDelay() #Share its status
- whisper(nicks, "##L" + x + " is now offline [XCOM]")
- else: #Is a regular server player
- if x not in XCOMList:
- XCOMDelay() #Share its status
- whisper(nicks, "##L" + x + " is now offline")
-
-online_users = OnlineUsers(online_url=' https://server.themanaworld.org/online-old.txt', update_interval=20, refresh_hook=online_list_update)
-
-def XCOMOnlineList(nick, message, is_whisper, match):
- XCOMDelay()
- msg=""
- for nicks in XCOMList:
- if nicks in online_users.online_users:
- msg = msg + nicks + " | "
- XCOMDelay()
- whisper(nick, msg)
-
-def XCOMPrintStat():
- pOnline=0
- xOnline=0
- for p in online_users.online_users:
- pOnline=pOnline+1
- if p in XCOMList:
- xOnline=xOnline+1
- return "%(xOnline)d/%(pOnline)d"%{"pOnline": pOnline, "xOnline": xOnline,}
-
-def XCOMDelay():
- time.sleep(0.1)
-
-def XCOMBroadcast(message):
- for nicks in XCOMList:
- if nicks in online_users.online_users:
- if nicks not in ignored_players:
- XCOMDelay()
- whisper(nicks, message)
-
-def XCOMCommunicate(nick, message, is_whisper, match):
- if not is_whisper:
- return
- if nick in ignored_players:
- return #or say something
- if message[0]=="!":
- return
- if message.startswith("*AFK*:"): # AFK bug workaround
- return
- if nick in XCOMList:
- for nicks in XCOMList:
- if nicks in online_users.online_users:
- if nick==nicks:
- pass
- else:
- XCOMDelay()
- whisper(nicks, "##B##LXCOM[" + XCOMPrintStat() + "]##l " + nick + ": ##b" + message)
- else:
- whisper(nick, XCOMBroadcastPrefix + "XCOM is not enabled (Use !xcon)")
-
-def XCOMSilentInvite(nick, message, is_whisper, match):
- XCOMDelay()
- if not is_whisper:
- return
- if nick in ignored_players:
- return #or say something
- if nick in admins:
- XCOMList.append(match.group(1))
- if match.group(1) not in ignored_players:
- whisper(nick, "##W--- " + nick + " silently invited " + match.group(1) + " on XCOM ---")
- else:
- whisper(nick, "##W" + match.group(1) + " has been ignored by bot and cannot be added to XCOM.")
-
-def XCOMInvite(nick, message, is_whisper, match):
- XCOMDelay()
- if not is_whisper:
- return
- if nick in ignored_players:
- return #or say something
- if nick in admins: # FIXME Do not add if already there!!!
- XCOMList.append(match.group(1))
- XCOMBroadcast("##W--- " + nick + " (Admin) invited " + match.group(1) + " on XCOM ---" + XCOMBroadcastPrefix + match.group(1) + " XCOM enabled! Use !xcoff to disable, use !xclist to see XCOM online list")
- else:
- if nick in ignored_players:
- whisper(nick, "You cannot invite banned players.")
- else:
- whisper(match.group(1), "##W--- " + nick + " invited you to chat on XCOM --- Answer !xcon to join.")
- XCOMDelay()
- whisper(nick, "Invited " + match.group(1) + " to join XCOM. Waiting for his/her reply...")
-
-XCOMServerInvited = []
-def XCOMInviteAll(nick, message, is_whisper, match):
- XCOMDelay()
- if not is_whisper:
- return
- if nick in ignored_players:
- return #or say something
- if nick in admins: # FIXME Do not add if already there!!!
- for invn in online_users.online_users:
- if invn in XCOMList:
- pass
- elif invn in ignored_players:
- pass
- elif invn in XCOMServerInvited:
- pass
- else:
- XCOMServerInvited.append(invn)
- whisper(invn, "##W--- " + nick + " invited you to chat on XCOM --- Answer !xcon to join.")
- XCOMDelay()
-
-
-def XCOMEnable(nick, message, is_whisper, match):
- XCOMDelay()
- #accept only whispers
- if not is_whisper:
- return
- if nick in ignored_players:
- return #or say something
- #search array
- if nick in XCOMList:
- whisper(nick, XCOMBroadcastPrefix + nick + " XCOM already enabled")
- else:
- XCOMList.append(nick)
- XCOMBroadcast("##W--- " + nick + " is online on XCOM ---" + XCOMBroadcastPrefix + nick + " XCOM enabled! Use !xcoff or !xcom off to disable, use !xclist to see XCOM online list")
-
-def XCOMDisable(nick, message, is_whisper, match):
- XCOMDelay()
- #accept only whispers
- if not is_whisper:
- return
- if nick in ignored_players:
- return #or say something
- #search array
- if nick in XCOMList:
- XCOMBroadcast("##L--- " + nick + " disabled XCOM ---")
- XCOMList.remove(nick)
- else:
- whisper(nick, XCOMBroadcastPrefix + nick + " XCOM already disabled")
-
-def XCOMServerInterestEnable(nick, message, is_whisper, match):
- XCOMDelay()
- #accept only whispers
- if not is_whisper:
- return
- if nick in ignored_players:
- return #or say something
- #search array
- if nick in XCOMList:
- whisper(nick, XCOMBroadcastPrefix + "Server online status notifications enabled!")
- XCOMServerStatInterested.append(nick)
-
-def XCOMServerInterestDisable(nick, message, is_whisper, match):
- XCOMDelay()
- #accept only whispers
- if not is_whisper:
- return
- if nick in ignored_players:
- return #or say something
- #search array
- if nick in XCOMList:
- whisper(nick, XCOMBroadcastPrefix + "Server online status notifications disabled!")
- XCOMServerStatInterested.remove(nick)
-
-def XCOMBan(nick, message, is_whisper, match):
- XCOMDelay()
- #accept only whispers
- if not is_whisper:
- return
- if nick in admins:
- #search array
- if match.group(1) in ignored_players:
- whisper(nick, "Already banned.")
- else:
- ignored_players.append(match.group(1))
- XCOMList.remove(match.group(1))
- #FIXME array need to be saved!!!
- XCOMBroadcast(XCOMBroadcastPrefix + match.group(1) + " is now banned from XCOM")
- else:
- whisper(nick, "Admins only.")
-
-def XCOMUnBan(nick, message, is_whisper, match):
- XCOMDelay()
- #accept only whispers
- if not is_whisper:
- return
- if nick in admins:
- #search array
- if match.group(1) in ignored_players:
- XCOMList.append(match.group(1))
- ignored_players.remove(match.group(1))
- #FIXME array need to be saved!!!
- XCOMBroadcast(XCOMBroadcastPrefix + match.group(1) + " is now unbanned from XCOM")
- whisper(match.group(1), "You are now unbanned from XCOM. Don't make it happen again.")
- else:
- whisper(nick, "Already banned.")
- else:
- whisper(nick, "Admins only.")
-
-# =============================================
greetings = [
"Hi {0}!",
@@ -640,6 +410,7 @@ PLUGIN = {
'blocks': (),
}
+
npcdialog = {
'start_time': -1,
'program': [],
@@ -670,9 +441,21 @@ def set_npc_owner(nick):
npc_owner = nick
+death_words = [
+ "Dammit!!! Why me???",
+ "Nirvana wait for me!",
+ "Well, at least I will have no more taxes to pay.",
+ "I need another drink...",
+ "I don't want to see!",
+ "See you on the other side!",
+ "Don't worry: I've pressed the up button first.",
+]
+
@extends('smsg_being_remove')
def bot_dies(data):
if data.id == charserv.server.account:
+ mapserv.cmsg_chat_message(random.choice(death_words))
+ time.sleep(5)
mapserv.cmsg_player_respawn()
@@ -1039,8 +822,7 @@ def cmd_say(nick, message, is_whisper, match):
if nick not in admins:
return
# ~ set_npc_owner(nick)
- msg = message.group(1)
- mapserv.cmsg_chat_message(msg)
+ mapserv.cmsg_chat_message(match.group(1))
def cmd_sit(nick, message, is_whisper, match):
@@ -1371,9 +1153,61 @@ def manaboy_logic(ts):
if not storage_is_open and ts > npcdialog['start_time'] + 30.0:
reset()
+
+
# =========================================================================
+
+def emoteX(nick, message, is_whisper, match):
+ if not is_whisper:
+ return
+ if nick in ignored_players:
+ return
+
+ if nick not in admins:
+ return
+ emote=1
+ while(emote < 40):
+ mapserv.cmsg_player_emote(emote)
+ emote=emote+1
+ commands.set_direction('', 'up')
+ time.sleep(0.25)
+ commands.set_direction('', 'right')
+ time.sleep(0.25)
+ commands.set_direction('', 'down')
+ time.sleep(0.25)
+ commands.set_direction('', 'left')
+ time.sleep(0.25)
+
+def spinner(nick, message, is_whisper, match):
+ if nick in ignored_players:
+ return
+
+ players = []
+ for being in mapserv.beings_cache.itervalues():
+ if ((being.type == 'player') and len(being.name) > 1):
+ players.append(being.name)
+
+ mapserv.cmsg_chat_message('*hugs Soul Menhir*')
+
+ emote=1
+ while(emote < 20):
+ emote=emote+1
+ commands.set_direction('', 'up')
+ time.sleep(0.1)
+ commands.set_direction('', 'right')
+ time.sleep(0.1)
+ commands.set_direction('', 'down')
+ time.sleep(0.1)
+ commands.set_direction('', 'left')
+ time.sleep(0.1)
+
+ mapserv.cmsg_chat_message('*hugs Soul Menhir*')
+
+
manaboy_commands = {
+ '!emotex' : emoteX,
+ '!spinner' : spinner,
'!where' : cmd_where,
'!goto (\d+) (\d+)' : cmd_goto,
'!(left|right|up|down)' : cmd_goclose,
@@ -1384,7 +1218,8 @@ manaboy_commands = {
'!use (\d+)' : cmd_item_action,
'!emote (\d+)' : cmd_emote,
'!attack (.+)' : cmd_attack,
- '!say ((@|#).+)' : cmd_say,
+ # ~ '!say ((@|#).+)' : cmd_say,
+ '!say (.*)' : cmd_say,
'!sit' : cmd_sit,
'!turn' : cmd_turn,
'!follow' : cmd_follow,
@@ -1410,19 +1245,6 @@ manaboy_commands = {
'!xuf': XUfortune,
'!xudate': XUdate,
'!xupom': XUpom,
- '!xcon' : XCOMEnable,
- '!xcom' : XCOMEnable,
- '!xcoff' : XCOMDisable,
- '!xcom off' : XCOMDisable,
- '!xclist' : XCOMOnlineList,
- '!xci (.*)' : XCOMInvite,
- '!xcia' : XCOMInviteAll,
- '!xcsi (.*)' : XCOMSilentInvite,
- '!xcb (.*)' : XCOMBan,
- '!xcu (.*)' : XCOMUnBan,
- '!xcsion' : XCOMServerInterestEnable,
- '!xcsioff' : XCOMServerInterestDisable,
- r'(.*)' : XCOMCommunicate,
r'^(?i)explain (.*)': say_explain,
r'^(?i)(hello|hi|hey|heya|hiya|yo) (?i)(livio|liviobot)' : say_greeting,
@@ -1455,8 +1277,6 @@ def chatbot_answer_mod(func):
return mb_answer
def init(config):
-
- online_users.start()
for cmd, action in manaboy_commands.items():
plugins.chatbot.add_command(cmd, action)
diff --git a/plugins/xcom.py b/plugins/xcom.py
new file mode 100644
index 0000000..2f8a679
--- /dev/null
+++ b/plugins/xcom.py
@@ -0,0 +1,323 @@
+import time
+import net.mapserv as mapserv
+import net.charserv as charserv
+import net.stats as stats
+import commands
+import walkto
+import logicmanager
+import status
+import plugins
+import itemdb
+# ~ import random
+from collections import deque
+from net.inventory import get_item_index, get_storage_index
+from utils import extends
+from actor import find_nearest_being
+from chat import send_whisper as whisper
+
+from net.onlineusers import OnlineUsers
+
+__all__ = [ 'PLUGIN', 'init' ]
+
+PLUGIN = {
+ 'name': 'manaboy',
+ 'requires': ['chatbot'],
+ 'blocks': (),
+}
+
+def preloadArray(nfile):
+ try:
+ file = open(nfile, "r")
+ array=[]
+ for x in file.readlines():
+ x = x.replace("\n", "")
+ x = x.replace("\r", "")
+ array.append(x)
+ file.close()
+ return array
+ except:
+ print "preloadArray: File " + nfile + " not found!"
+
+ignored_players = preloadArray("bot/ignored.txt")
+disliked_players = preloadArray("bot/disliked.txt")
+admins = preloadArray("bot/admins.txt")
+friends = preloadArray("bot/friends.txt")
+
+
+XCOMList = preloadArray("bot/XCOM.txt")
+XCOMServerStatInterested = [] #List of nicks interested in server status change
+XCOMBroadcastPrefix = "##B##G "
+
+
+def online_list_update(curr,prev):
+ for x in curr:
+ found = False
+ for y in prev:
+ if x==y: found = True
+ if found == False: #detected change
+ for nicks in XCOMList: #For every XCOM user...
+ if nicks in online_users.online_users: #That's online...
+ if nicks in XCOMServerStatInterested: #If XCOM player is interested
+ if x in XCOMList: #An XCOM user connected?
+ XCOMDelay() #Share its status
+ whisper(nicks, "##W" + x + " is now online [XCOM]")
+ else: #Is a regular server player
+ if x not in XCOMList:
+ XCOMDelay() #Share its status
+ whisper(nicks, "##W" + x + " is now online")
+
+ for x in prev:
+ found = False
+ for y in curr:
+ if x==y: found = True
+ if found == False:
+ for nicks in XCOMList: #For every XCOM user...
+ if nicks in online_users.online_users: #That's online...
+ if nicks in XCOMServerStatInterested: #If XCOM player is interested
+ if x in XCOMList: #An XCOM user connected?
+ XCOMDelay() #Share its status
+ whisper(nicks, "##L" + x + " is now offline [XCOM]")
+ else: #Is a regular server player
+ if x not in XCOMList:
+ XCOMDelay() #Share its status
+ whisper(nicks, "##L" + x + " is now offline")
+
+online_users = OnlineUsers(online_url=' https://server.themanaworld.org/online-old.txt', update_interval=20, refresh_hook=online_list_update)
+
+def XCOMOnlineList(nick, message, is_whisper, match):
+ XCOMDelay()
+ msg=""
+ for nicks in XCOMList:
+ if nicks in online_users.online_users:
+ msg = msg + nicks + " | "
+ XCOMDelay()
+ whisper(nick, msg)
+
+def XCOMPrintStat():
+ pOnline=0
+ xOnline=0
+ for p in online_users.online_users:
+ pOnline=pOnline+1
+ if p in XCOMList:
+ xOnline=xOnline+1
+ return "%(xOnline)d/%(pOnline)d"%{"pOnline": pOnline, "xOnline": xOnline,}
+
+def XCOMDelay():
+ time.sleep(0.1)
+
+def XCOMBroadcast(message):
+ for nicks in XCOMList:
+ if nicks in online_users.online_users:
+ if nicks not in ignored_players:
+ XCOMDelay()
+ whisper(nicks, message)
+
+def XCOMCommunicate(nick, message, is_whisper, match):
+ if not is_whisper:
+ return
+ if nick in ignored_players:
+ return #or say something
+ if message[0]=="!":
+ return
+ if message.startswith("*AFK*:"): # AFK bug workaround
+ return
+ if nick in XCOMList:
+ for nicks in XCOMList:
+ if nicks in online_users.online_users:
+ if nick==nicks:
+ pass
+ else:
+ XCOMDelay()
+ whisper(nicks, "##B##LXCOM[" + XCOMPrintStat() + "]##l " + nick + ": ##b" + message)
+ else:
+ whisper(nick, XCOMBroadcastPrefix + "XCOM is not enabled (Use !xcon)")
+
+def XCOMSilentInvite(nick, message, is_whisper, match):
+ XCOMDelay()
+ if not is_whisper:
+ return
+ if nick in ignored_players:
+ return #or say something
+ if nick in admins:
+ XCOMList.append(match.group(1))
+ if match.group(1) not in ignored_players:
+ whisper(nick, "##W--- " + nick + " silently invited " + match.group(1) + " on XCOM ---")
+ else:
+ whisper(nick, "##W" + match.group(1) + " has been ignored by bot and cannot be added to XCOM.")
+
+def XCOMInvite(nick, message, is_whisper, match):
+ XCOMDelay()
+ if not is_whisper:
+ return
+ if nick in ignored_players:
+ return #or say something
+ if nick in admins: # FIXME Do not add if already there!!!
+ XCOMList.append(match.group(1))
+ XCOMBroadcast("##W--- " + nick + " (Admin) invited " + match.group(1) + " on XCOM ---" + XCOMBroadcastPrefix + match.group(1) + " XCOM enabled! Use !xcoff to disable, use !xclist to see XCOM online list")
+ else:
+ if nick in ignored_players:
+ whisper(nick, "You cannot invite banned players.")
+ else:
+ whisper(match.group(1), "##W--- " + nick + " invited you to chat on XCOM --- Answer !xcon to join.")
+ XCOMDelay()
+ whisper(nick, "Invited " + match.group(1) + " to join XCOM. Waiting for his/her reply...")
+
+XCOMServerInvited = []
+def XCOMInviteAll(nick, message, is_whisper, match):
+ XCOMDelay()
+ if not is_whisper:
+ return
+ if nick in ignored_players:
+ return #or say something
+ if nick in admins: # FIXME Do not add if already there!!!
+ for invn in online_users.online_users:
+ if invn in XCOMList:
+ pass
+ elif invn in ignored_players:
+ pass
+ elif invn in XCOMServerInvited:
+ pass
+ else:
+ XCOMServerInvited.append(invn)
+ whisper(invn, "##W--- " + nick + " invited you to chat on XCOM --- Answer !xcon to join.")
+ XCOMDelay()
+
+
+def XCOMEnable(nick, message, is_whisper, match):
+ XCOMDelay()
+ #accept only whispers
+ if not is_whisper:
+ return
+ if nick in ignored_players:
+ return #or say something
+ #search array
+ if nick in XCOMList:
+ whisper(nick, XCOMBroadcastPrefix + nick + " XCOM already enabled")
+ else:
+ XCOMList.append(nick)
+ XCOMBroadcast("##W--- " + nick + " is online on XCOM ---" + XCOMBroadcastPrefix + nick + " XCOM enabled! Use !xcoff or !xcom off to disable, use !xclist to see XCOM online list")
+
+def XCOMDisable(nick, message, is_whisper, match):
+ XCOMDelay()
+ #accept only whispers
+ if not is_whisper:
+ return
+ if nick in ignored_players:
+ return #or say something
+ #search array
+ if nick in XCOMList:
+ XCOMBroadcast("##L--- " + nick + " disabled XCOM ---")
+ XCOMList.remove(nick)
+ else:
+ whisper(nick, XCOMBroadcastPrefix + nick + " XCOM already disabled")
+
+def XCOMServerInterestEnable(nick, message, is_whisper, match):
+ XCOMDelay()
+ #accept only whispers
+ if not is_whisper:
+ return
+ if nick in ignored_players:
+ return #or say something
+ #search array
+ if nick in XCOMList:
+ whisper(nick, XCOMBroadcastPrefix + "Server online status notifications enabled!")
+ XCOMServerStatInterested.append(nick)
+
+def XCOMServerInterestDisable(nick, message, is_whisper, match):
+ XCOMDelay()
+ #accept only whispers
+ if not is_whisper:
+ return
+ if nick in ignored_players:
+ return #or say something
+ #search array
+ if nick in XCOMList:
+ whisper(nick, XCOMBroadcastPrefix + "Server online status notifications disabled!")
+ XCOMServerStatInterested.remove(nick)
+
+def XCOMBan(nick, message, is_whisper, match):
+ XCOMDelay()
+ #accept only whispers
+ if not is_whisper:
+ return
+ if nick in admins:
+ #search array
+ if match.group(1) in ignored_players:
+ whisper(nick, "Already banned.")
+ else:
+ ignored_players.append(match.group(1))
+ XCOMList.remove(match.group(1))
+ #FIXME array need to be saved!!!
+ XCOMBroadcast(XCOMBroadcastPrefix + match.group(1) + " is now banned from XCOM")
+ else:
+ whisper(nick, "Admins only.")
+
+def XCOMUnBan(nick, message, is_whisper, match):
+ XCOMDelay()
+ #accept only whispers
+ if not is_whisper:
+ return
+ if nick in admins:
+ #search array
+ if match.group(1) in ignored_players:
+ XCOMList.append(match.group(1))
+ ignored_players.remove(match.group(1))
+ #FIXME array need to be saved!!!
+ XCOMBroadcast(XCOMBroadcastPrefix + match.group(1) + " is now unbanned from XCOM")
+ whisper(match.group(1), "You are now unbanned from XCOM. Don't make it happen again.")
+ else:
+ whisper(nick, "Already banned.")
+ else:
+ whisper(nick, "Admins only.")
+
+# =============================================
+
+def cmd_commands(nick, message, is_whisper, match):
+ if not is_whisper:
+ return
+ if nick in ignored_players:
+ return
+
+ c = []
+ for cmd in xcom_commands:
+ if cmd.startswith('!('):
+ br = cmd.index(')')
+ c.extend(cmd[2:br].split('|'))
+ elif cmd.startswith('!'):
+ c.append(cmd[1:].split()[0])
+
+ c.sort()
+ whisper(nick, ', '.join(c))
+
+xcom_commands = {
+ '!xcomhelp' : cmd_commands,
+ '!xcon' : XCOMEnable,
+ '!xcom' : XCOMEnable,
+ '!xcoff' : XCOMDisable,
+ '!xcom off' : XCOMDisable,
+ '!xclist' : XCOMOnlineList,
+ '!xci (.*)' : XCOMInvite,
+ '!xcia' : XCOMInviteAll,
+ '!xcsi (.*)' : XCOMSilentInvite,
+ '!xcb (.*)' : XCOMBan,
+ '!xcu (.*)' : XCOMUnBan,
+ '!xcsion' : XCOMServerInterestEnable,
+ '!xcsioff' : XCOMServerInterestDisable,
+ r'(.*)' : XCOMCommunicate,
+}
+
+# ~ def chatbot_answer_mod(func):
+ # ~ '''modifies chatbot.answer to remember last 10 commands'''
+
+ # ~ def mb_answer(nick, message, is_whisper):
+ # ~ return func(nick, message, is_whisper)
+
+ # ~ return mb_answer
+
+def init(config):
+
+ for cmd, action in xcom_commands.items():
+ plugins.chatbot.add_command(cmd, action)
+ online_users.start()
+ # ~ plugins.chatbot.answer = chatbot_answer_mod(plugins.chatbot.answer)
+