This repository has been archived on 2024-08-27. You can view files and clone it, but cannot push or open issues or pull requests.
redstoner-utils/friends.py
Dico200 1750c82208 Changed all CommandExecutor arguments
Added arguments command and label to all command executor functions,
hopefully for massive performance increase.

This is due to the following mess in PythonLoader:
``` Java
@Override
public boolean onCommand(CommandSender sender, Command command, String
label, String[] args) {
boolean result;
if (argcount == -1) {
try {
result = call(4, sender, command, label, args);
argcount = 4;
} catch (PyException e) {
//this could goof up someone ... they'll probably yell at us and
eventually read this code ... fuck them
if (e.type == Py.TypeError && (e.value.toString().endsWith("takes
exactly 3 arguments (4 given)") || e.value.toString().endsWith("takes
exactly 4 arguments (5 given)"))) {
result = call(3, sender, command, label, args);
argcount = 3;
} else if (e.type == Py.TypeError && (e.value.toString().endsWith("takes
exactly 2 arguments (4 given)") || e.value.toString().endsWith("takes
exactly 3 arguments (5 given)"))) {
result = call(2, sender, command, label, args);
argcount = 2;
} else {
throw e;
}
}
} else {
result = call(argcount, sender, command, label, args);
}
return result;
}
```

Note: Still WIP on reports - I'm working on making it keep solved
reports to fix issue 10
2015-03-19 23:51:33 +01:00

160 lines
5.0 KiB
Python

import thread
from helpers import *
friends = open_json_file("friends", {}) # {Player_UUID:[List_of_friend_uuids]}
friend_join_sound = "random.orb"
@hook.event("player.PlayerJoinEvent", "high") # creates sound and sends a bold message on friend join
def fjm(event): # friend join message
player = event.getPlayer()
player_id = uid(player)
for onlineplayer in list(server.getOnlinePlayers()):
if player_id in friends.get(uid(onlineplayer), []):
msg(onlineplayer, "&a&l%s &ajoined!" % player.getName())
onlineplayer.playSound(onlineplayer.getLocation(), friend_join_sound, 1, 0)
def save_friends(): # saves to friends file
save_json_file("friends", friends)
def friendmessage(player, message): # sends a message with a prefix
msg(player, "&7[&aFriends&7] " + message)
def ls(sender):
try:
sender_friends = friends.get(uid(sender), False)
if sender_friends:
friends_string = ""
for uuid in sender_friends:
friends_string += (retrieve_player(uuid).getName() + ", ")
friendmessage(sender, "&aYour friends list: " + friends_string[:len(friends_string)-2])
else:
friendmessage(sender, "&cYour friends list is empty")
except:
warn("Unable to finish friends' ls process")
def clear(sender):
sender_id = uid(sender)
if friends.get(sender_id, False):
friends.pop(sender_id)
friendmessage(sender, "&aFriends list cleared")
save_friends()
else:
friendmessage(sender, "&cYour friends list is already empty")
def add(sender, names):
sender_id = uid(sender)
added = []
notfound = []
friendalready = []
if not sender_id in friends:
friends[sender_id] = []
for name in names:
player = server.getPlayer(name)
if player:
player_id = uid(player)
not_yourself = player != sender
if not player_id in friends[sender_id]:
if not_yourself:
friends[sender_id].append(player_id)
added.append(player.getName())
friendmessage(player.getPlayer(), "&a&o%s &aadded you to their friends list" % stripcolors(sender.getDisplayName()))
else:
friendalready.append(player.getName())
else:
notfound.append(name)
save_friends()
if added:
friendmessage(sender, "&a&o%s&a added." % ", ".join(added))
if notfound:
friendmessage(sender, "&c&o%s&c not found. (must be online)" % ", ".join(notfound))
if friendalready:
friendmessage(sender, "&c&o%s&c is/are already your friend." % ", ".join(friendalready))
if not not_yourself:
friendmessage(sender, "&cYou can't add yourself to your friends list.")
def rem(sender, names):
sender_id = uid(sender)
removed = []
notfound = []
notafriend = []
for name in names:
player = server.Player(name)
if player:
player_id = uid(player)
if player_id in friends.get(sender_id, []):
friends[sender_id].remove(player_id)
removed.append(player.getName())
friendmessage(player.getPlayer(), "&c&o%s &cremoved you from their friends list" % stripcolors(sender.getDisplayName()))
else:
notafriend.append(player.getName())
else:
notfound.append(name)
save_friends()
if removed:
friendmessage(sender, "&a&o%s&a removed." % ", ".join(removed))
if notfound:
friendmessage(sender, "&c&o%s&c not found. (must be online)" % ", ".join(notfound))
if notafriend:
friendmessage(sender, "&c&o%s&c is/are not in your friends list." % ", ".join(notafriend))
def fhelp(sender):
friendmessage(sender, "&a&l/friends help")
msg(sender, "&a1. /friends &oadd <names...> &6aliases: &o+")
msg(sender, "&a2. /friends &orem <names...> &6aliases: &oremove, delete, del, -")
msg(sender, "&a3. /friends &oclear &6aliases: &o/")
msg(sender, "&a4. /friends &olist &6aliases: &olst, *")
msg(sender, "&a5. /friends &ohelp &6aliases: &o?")
@hook.command("friends")
def on_friend_command(sender, command, label, args):
if not is_player(sender):
friendmessage(sender, "&c&lYou can't have friends!")
return True
cmd = args[0] if args else None
fargs = args[1:]
# /friends list
if cmd in ["list", "lst", "*"]:
thread.start_new_thread(ls, (sender,))
# /friends clear
elif cmd in ["clear", "/"]:
clear(sender)
# /friends add <names>
elif cmd in ["add", "+"]:
if fargs:
add(sender, fargs)
else:
fhelp(sender)
# /friends remove <names>
elif cmd in ["remove", "rem", "delete", "del", "-"]:
if fargs:
rem(sender, fargs)
else:
fhelp(sender)
else:
fhelp(sender)
return True