# Path: xml2dict.py
# class XML2Dict(object):
#     @classmethod
#     def _parse_node(self, node):
#         node_tree = object_dict()
#         # Save attrs and text, hope there will not be a child with same name
#         if node.text:
#             node_tree.value = node.text
#         for (k, v) in node.attrib.items():
#             k, v = self._namespace_split(k, object_dict({'value':v}))
#             node_tree[k] = v
#         # Save childrens
#         for child in iter(node):
#             tag, tree = self._namespace_split(child.tag, self._parse_node(child))
#             if  tag not in node_tree:  # the first time, so store it in dict
#                 node_tree[tag] = tree
#                 continue
#             old = node_tree[tag]
#             if not isinstance(old, list):
#                 node_tree.pop(tag)
#                 node_tree[tag] = [old]  # multi times, so change old dict to a list
#             node_tree[tag].append(tree)  # add the new one
# 
#         return  node_tree
# 
#     @classmethod
#     def _namespace_split(self, tag, value):
#         """
#            Split the tag  '{http://cs.sfsu.edu/csc867/myscheduler}patients'
#              ns = http://cs.sfsu.edu/csc867/myscheduler
#              name = patients
#         """
#         result = re.compile("\{(.*)\}(.*)").search(tag)
#         if result:
#             # print(tag)
#             value.namespace, tag = result.groups()
#         return (tag, value)
# 
#     @classmethod
#     def parse(self, file):
#         """parse a xml file to a dict"""
#         f = open(file, 'r')
#         return self.fromstring(f.read())
# 
#     @classmethod
#     def fromstring(self, s):
#         """parse a string"""
#         t = ET.fromstring(s)
#         root_tag, root_tree = self._namespace_split(t.tag, self._parse_node(t))
#         return object_dict({root_tag: root_tree})
# 
# class object_dict(dict):
#     """object view of dict, you can 
#     >>> a = object_dict()
#     >>> a.fish = 'fish'
#     >>> a['fish']
#     'fish'
#     >>> a['water'] = 'water'
#     >>> a.water
#     'water'
#     >>> a.test = {'value': 1}
#     >>> a.test2 = object_dict({'name': 'test2', 'value': 2})
#     >>> a.test, a.test2.name, a.test2.value
#     (1, 'test2', 2)
#     """
#     def __init__(self, initd = None):
#         if initd is None:
#             initd = {}
#         dict.__init__(self, initd)
# 
#     def __getattr__(self, item):
#         d = self.__getitem__(item)
#         # if value is the only key in object, you can omit it
#         if isinstance(d, dict) and 'value' in d and len(d) == 1:
#             return d['value']
#         else:
#             return d
# 
#     # def __iter__(self):
#     #    yield self
#     #    return
# 
#     def __setattr__(self, item, value):
#         self.__setitem__(item, value)


import time
import random
from cross_platform import *
from xml2dict import XML2Dict, object_dict

# coding:utf-8
# start meta
__plugin_name__ = '国服公会PVP'
__author = 'fffonion'
__version__ = 0.11
hooks = {}
extra_cmd = {'gpvp':'guild_pvp', 'guild_pvp':'guild_pvp'}

#simple version of _dopost
def _dopost(self, urikey, postdata = '', usecookie = True, setcookie = True, extraheader = {'Cookie2': '$Version=1'}, xmlresp = True, noencrypt = False, savetraffic = False, no2ndkey=False ):
    resp, _dec = self.poster.post(urikey, postdata, usecookie, setcookie, extraheader, noencrypt, savetraffic, no2ndkey)
    self.lastposttime = time.time()
    if int(resp['status']) >= 400:
        return resp, _dec
    resp.update({'error':False, 'errno':0, 'errmsg':''})
    if not xmlresp:
        dec = _dec
    else:
        try:

# Path: xml2dict.py
# class XML2Dict(object):
#     @classmethod
#     def _parse_node(self, node):
#         node_tree = object_dict()
#         # Save attrs and text, hope there will not be a child with same name
#         if node.text:
#             node_tree.value = node.text
#         for (k, v) in node.attrib.items():
#             k, v = self._namespace_split(k, object_dict({'value':v}))
#             node_tree[k] = v
#         # Save childrens
#         for child in iter(node):
#             tag, tree = self._namespace_split(child.tag, self._parse_node(child))
#             if  tag not in node_tree:  # the first time, so store it in dict
#                 node_tree[tag] = tree
#                 continue
#             old = node_tree[tag]
#             if not isinstance(old, list):
#                 node_tree.pop(tag)
#                 node_tree[tag] = [old]  # multi times, so change old dict to a list
#             node_tree[tag].append(tree)  # add the new one
# 
#         return  node_tree
# 
#     @classmethod
#     def _namespace_split(self, tag, value):
#         """
#            Split the tag  '{http://cs.sfsu.edu/csc867/myscheduler}patients'
#              ns = http://cs.sfsu.edu/csc867/myscheduler
#              name = patients
#         """
#         result = re.compile("\{(.*)\}(.*)").search(tag)
#         if result:
#             # print(tag)
#             value.namespace, tag = result.groups()
#         return (tag, value)
# 
#     @classmethod
#     def parse(self, file):
#         """parse a xml file to a dict"""
#         f = open(file, 'r')
#         return self.fromstring(f.read())
# 
#     @classmethod
#     def fromstring(self, s):
#         """parse a string"""
#         t = ET.fromstring(s)
#         root_tag, root_tree = self._namespace_split(t.tag, self._parse_node(t))
#         return object_dict({root_tag: root_tree})
# 
# class object_dict(dict):
#     """object view of dict, you can 
#     >>> a = object_dict()
#     >>> a.fish = 'fish'
#     >>> a['fish']
#     'fish'
#     >>> a['water'] = 'water'
#     >>> a.water
#     'water'
#     >>> a.test = {'value': 1}
#     >>> a.test2 = object_dict({'name': 'test2', 'value': 2})
#     >>> a.test, a.test2.name, a.test2.value
#     (1, 'test2', 2)
#     """
#     def __init__(self, initd = None):
#         if initd is None:
#             initd = {}
#         dict.__init__(self, initd)
# 
#     def __getattr__(self, item):
#         d = self.__getitem__(item)
#         # if value is the only key in object, you can omit it
#         if isinstance(d, dict) and 'value' in d and len(d) == 1:
#             return d['value']
#         else:
#             return d
# 
#     # def __iter__(self):
#     #    yield self
#     #    return
# 
#     def __setattr__(self, item, value):
#         self.__setitem__(item, value)


# Path: plugins/cn_guild_pvp.py
import time
import random
from cross_platform import *
from xml2dict import XML2Dict, object_dict

# coding:utf-8
# start meta
__plugin_name__ = '国服公会PVP'
__author = 'fffonion'
__version__ = 0.11
hooks = {}
extra_cmd = {'gpvp':'guild_pvp', 'guild_pvp':'guild_pvp'}

#simple version of _dopost
def _dopost(self, urikey, postdata = '', usecookie = True, setcookie = True, extraheader = {'Cookie2': '$Version=1'}, xmlresp = True, noencrypt = False, savetraffic = False, no2ndkey=False ):
    resp, _dec = self.poster.post(urikey, postdata, usecookie, setcookie, extraheader, noencrypt, savetraffic, no2ndkey)
    self.lastposttime = time.time()
    if int(resp['status']) >= 400:
        return resp, _dec
    resp.update({'error':False, 'errno':0, 'errmsg':''})
    if not xmlresp:
        dec = _dec
    else:
        try:

            dec = XML2Dict.fromstring(_dec).response
