1
0

common.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. import random
  2. from common import font
  3. class CommandHelpers():
  4. def disect_command(self, event):
  5. trigger = event.arguments[0] # Everything the user inputted.
  6. command = trigger[1:].lower() # Command without prefix. = trigger minus first character.
  7. # Determine command type.
  8. if trigger.startswith(self.network.command_character):
  9. cmdtype = 'cmd'
  10. elif trigger.startswith(self.network.help_character):
  11. cmdtype = 'help'
  12. else:
  13. cmdtype = False
  14. # Determine where to reply to.
  15. if event.type == 'pubmsg':
  16. replyto = event.target
  17. elif event.type == 'privmsg':
  18. replyto = event.source.nick
  19. else:
  20. replyto = False
  21. return(cmdtype, trigger, command, replyto)
  22. def ccc(self, command, rights=False, event=False): # Commandlist colour coding and channel rights filter.
  23. if rights:
  24. show = False
  25. if rights["homechan"] == "owner":
  26. if self.channels[self.network.home_channel].is_owner(event.source.nick):
  27. show = True
  28. if rights["homechan"] == "admin":
  29. if self.channels[self.network.home_channel].is_owner(event.source.nick) or self.channels[self.network.home_channel].is_admin(event.source.nick):
  30. show = True
  31. if rights["homechan"] == "oper":
  32. if self.channels[self.network.home_channel].is_owner(event.source.nick) or self.channels[self.network.home_channel].is_admin(event.source.nick) or self.channels[self.network.home_channel].is_oper(event.source.nick):
  33. show = True
  34. if not event.target == self.connection.get_nickname(): # Channel message.
  35. if rights["chan"] == "owner":
  36. if self.channels[event.target].is_owner(event.source.nick):
  37. show = True
  38. if rights["chan"] == "admin":
  39. if self.channels[event.target].is_owner(event.source.nick) or self.channels[event.target].is_admin(event.source.nick):
  40. show = True
  41. if rights["chan"] == "oper":
  42. if self.channels[event.target].is_owner(event.source.nick) or self.channels[event.target].is_admin(event.source.nick) or self.channels[event.target].is_oper(event.source.nick):
  43. show = True
  44. if show:
  45. return blue + self.cmdchar + command + grey + ", "
  46. else:
  47. return blue + self.cmdchar + command + grey + ", "
  48. class AdminHelpers():
  49. def get_channelfunctions(self, channel):
  50. channelfunctions = self.db.one("SELECT autojoin, aggressiveness, join_greeting, statistics_commands, games, chat FROM channels WHERE LOWER(name)=LOWER('" + channel + "') AND network='" + self.network + "'")
  51. if channelfunctions[0]:
  52. autojoin = "on"
  53. else:
  54. autojoin = "off"
  55. if channelfunctions[2]:
  56. joingreet = "on"
  57. else:
  58. joingreet = "off"
  59. if channelfunctions[3]:
  60. statscmds = "on"
  61. else:
  62. statscmds = "off"
  63. if channelfunctions[4]:
  64. games = "on"
  65. else:
  66. games = "off"""
  67. if channelfunctions[5]:
  68. chat = "on"
  69. else:
  70. chat = "off"""
  71. return ("autojoin " + green + autojoin + reset + ", aggressiveness " + green + channelfunctions[1] + reset + ", join_greeting " + green + joingreet + reset + ", statistics_commands " + green + statscmds + reset + ", games " + green + games + reset + ", chat " + green + chat + reset + ".")
  72. def is_channelfunction(value):
  73. if value.lower() in ["autojoin", "aggressiveness", "join_greeting", "statistics_commands", "games", "chat"]:
  74. return True
  75. else:
  76. return False
  77. def describe_channelfunction(function):
  78. if function == "autojoin":
  79. message = "Join the channel automaticly after connecting."
  80. elif function == "aggressiveness":
  81. message = "How to respond to kick, ban and mode events. Options: " + blue + "passive" + reset + ", " + blue + "defense_only" + reset + ", " + blue + "equal_retalliation" + reset + ", " + blue + "battlebot" + reset + "."
  82. elif function == "join_greeting":
  83. message = "Greet users joining the channel on the first few joins, and later on large amounts."
  84. elif function == "statistics_commands":
  85. message = "Enable use of statistics commands."
  86. elif function == "games":
  87. message = "Enable use of game commands."
  88. elif function == "chat":
  89. message = "Respond to and initiate chat."
  90. else:
  91. message = "Sorry, this function has no description yet."
  92. return message
  93. def is_aggressiveness(value):
  94. if value.lower() in ["passive", "defense_only", "equal_retalliation", "battlebot"]:
  95. return True
  96. else:
  97. return False
  98. class GameHelpers():
  99. def roll_dice(amount, type):
  100. rolls = []
  101. for iterations in range(amount):
  102. rolls.append(random.randint(1, type))
  103. return rolls
  104. def get_info(self, user):
  105. user = user.lower()
  106. all_joins = self.db.all("SELECT joins FROM joins WHERE LOWER(\"user\")=%s AND user_network='" + self.network + "'", (user, ))
  107. all_kicks = self.db.all("SELECT given, received FROM kicks WHERE LOWER(\"user\")=%s AND user_network='" + self.network + "'", (user, ))
  108. all_messages = self.db.all("SELECT messages, messages_words, messages_characters, actions, actions_words, actions_characters, notices, notices_words, notices_characters FROM messages WHERE LOWER(\"user\")=%s AND user_network='" + self.network + "'", (user, ))
  109. joins =0
  110. for record in all_joins:
  111. joins += record
  112. given = 0
  113. received = 0
  114. for record in all_kicks:
  115. given += int(record[0])
  116. received += int(record[1])
  117. messages = 0
  118. messages_words = 0
  119. messages_characters = 0
  120. actions = 0
  121. actions_words = 0
  122. actions_characters = 0
  123. notices = 0
  124. notices_words = 0
  125. notices_characters = 0
  126. for record in all_messages:
  127. messages += int(record[0])
  128. messages_words += int(record[1])
  129. messages_characters += int(record[2])
  130. actions += int(record[3])
  131. actions_words += int(record[4])
  132. actions_characters += int(record[5])
  133. notices += int(record[6])
  134. notices_words += int(record[7])
  135. notices_characters += int(record[8])
  136. userrecord = self.db.one("SELECT xp_spent, level, coin, coin_given, coin_spent, ap_spent, karma_correction FROM users WHERE LOWER(name)=%s AND network='" + self.network + "'", (user, ))
  137. xp_spent = userrecord[0]
  138. level = userrecord[1]
  139. coin = userrecord[2]
  140. coin_given = userrecord[3]
  141. coin_spent = userrecord[4]
  142. ap_spent = userrecord[5]
  143. karma_correction = userrecord[6]
  144. chatxp = messages + (messages_words / 4) + (messages_characters / 10) + ((actions + (actions_words / 4) + (actions_characters / 10)) * 2) + ((notices + (notices_words / 4) + (notices_characters / 10)) / 2)
  145. kickxp = given * received
  146. total_xp = ((joins + kickxp + chatxp) / 120) + float(coin_spent + ap_spent / 8)
  147. xp = total_xp - xp_spent
  148. ap = total_xp - float(ap_spent)
  149. total_messages = messages + actions + notices
  150. total_words = messages_words + actions_words + notices_words
  151. total_characters = messages_characters + actions_characters + notices_characters
  152. if total_xp < 1:
  153. total_xp = 1
  154. joinkarma = (((messages / 19) - joins) / total_xp) /10
  155. words_per_message = (total_words / 6) - total_messages
  156. characters_per_message = (total_characters / 20) - total_messages
  157. characters_per_word = (total_characters / 6) - total_words
  158. chatkarma = ((words_per_message + characters_per_message + characters_per_message + characters_per_word) / total_xp) / 100
  159. kickkarma = ((given * received) / total_xp) / 2
  160. xpkarma = xp / 25
  161. coinkarma = (coin - coin_given / (xp_spent + 1)) / 99
  162. karma = float(joinkarma) + float(chatkarma) - float(kickkarma) + float(xpkarma) - float(coinkarma) + float(karma_correction)
  163. if xp < 0:
  164. xp = 0
  165. return level, xp, xp_spent, total_xp, karma, coin, coin_spent, coin_given, ap, ap_spent
  166. def list_top_players(self, sort):
  167. result = self.db.all("SELECT name, level, xp_spent, coin FROM users WHERE network=%s ORDER BY " + sort + " DESC LIMIT 3 ", (self.network, ))
  168. if sort == "level":
  169. column = 1
  170. threshold = 0
  171. if sort == "xp_spent":
  172. column = 2
  173. threshold = 0
  174. if sort == "coin":
  175. column = 3
  176. threshold = 10
  177. message = ""
  178. for record in result:
  179. if not record[column] <= threshold:
  180. level, xp, xpspent, totalxp, karma, coin, coinspent, coingiven, ap, apspent = GameHelpers.get_info(self, record[0])
  181. if ap < 0:
  182. ap = 0
  183. if sort == "level":
  184. message += red + str(record[0]) + reset + " [" + blue + "L " + green + str(level) + reset + ", X " + grey + str(xpspent) + "/" + green + str(int(xp)) + reset + ", A " + str(int(ap)) + ", C " + green + str(coin) + reset + ", K " + green + str(round(karma, 2)) + reset + "], "
  185. if sort == "xp_spent":
  186. message += red + str(record[0]) + reset + " [L " + green + str(level) + reset + ", " + blue + "X " + grey + str(xpspent) + "/" + green + str(int(xp)) + reset + ", A " + str(int(ap)) + ", C " + green + str(coin) + reset + ", K " + green + str(round(karma, 2)) + reset + "], "
  187. if sort == "coin":
  188. message += red + str(record[0]) + reset + " [L " + green + str(level) + reset + ", X " + grey + str(xpspent) + "/" + green + str(int(xp)) + reset + ", " + reset + "A " + str(int(ap)) + ", " + blue + "C " + green + str(coin) + reset + ", K " + green + str(round(karma, 2)) + reset + "], "
  189. return message[:-2]
  190. def player_info(self, user):
  191. level, xp, xpspent, totalxp, karma, coin, coinspent, coingiven, ap, apspent = GameHelpers.get_info(self, user)
  192. if ap < 0:
  193. ap = 0
  194. return "Level: " + str(level) + grey + ", " + reset + "XP: " + str(int(xp)) + "/" + grey + str(round(totalxp, 4)) + ", " + reset + "AP: " + str(int(ap)) + grey + ", " + reset + "coin: " + str(coin) + grey + "[S " + str(coinspent) + ", G " + str(coingiven) + "], " + reset + "karma: " + str(round(karma, 4))
  195. class StatisticsHelpers():
  196. def add_message_stats(stats):
  197. messages = 0
  198. words = 0
  199. characters = 0
  200. for record in stats:
  201. messages += record[0]
  202. words += record[1]
  203. characters += record[2]
  204. return messages, words, characters