Guest User

Untitled

a guest
Sep 20th, 2018
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 20.68 KB | None | 0 0
  1. from __future__ import division
  2. from math import ceil
  3. from twisted.words.protocols import irc
  4. from twisted.internet import protocol
  5. from twisted.internet import reactor
  6. import random
  7.  
  8. #give owner more privs, such as forceing votes, forcing leaves etc, maybe give half op so can kick grifers
  9. #start >force command, maybe scrap it
  10. #start >end command
  11. #maybe a >help command for spastics
  12. #read commands, descriptions etc from a xml file
  13. #fix bugs and tidy code
  14. #add colors
  15. #split,killed and lynched, maybe 2d dict
  16. #timeout maybe
  17.  
  18. server = 'irc.hardchats.org'
  19. channel = '#chats'
  20.  
  21. oper_pass = ''
  22. ns_pass = ''
  23.  
  24. min_players = 4
  25. min_players_2_wolves = 7
  26. max_players = 12
  27.  
  28. roles = {1:'Nigger',2:'Cop',3:'Housewife'}
  29.  
  30. commands = {'lynch':'>lynch','see':'>raid','kill':'>rape'}
  31.  
  32. roles_left = {1:'They left behind a empty bucket of kfc and a half eaten watermelon.',
  33.             2:'They left behind a empty box of donuts.',
  34.             3:'Nothing of value was lost.'}
  35.  
  36. roles_objective = {1:'Your objective is to blend in with the rest of suburbia, once a night,',
  37.                         2:'Your objective is to determine the identity of any %s hiding in suburbia, once a night,' % roles.get(1,None),
  38.                         3:'Your objective is to decide upon who you think is a %s.' % roles.get(1,None)
  39.                 }
  40.                
  41. #role is reminded at night, maybe sca
  42. roles_ability = {1:'you must use %s TARGET to rape a housewife.' % commands.get('kill',None),
  43.             2:'you must use %s TARGET to determine the targets real identity.' % commands.get('see',None),
  44.             3:'Try not to get raped'
  45.             }
  46.  
  47.  
  48. game_intro = ['This is a game of justified paranoia and great truth.  Everyone in this group appears to be a common white suburban housewife, but several of you are \'special\'. One or two of you are actually genuine chicken eating niggers, seeking to rape everyone and everything while concealing their identity.',
  49. 'And one of you is also a \'cop\'; you have the ability to learn whether a specific person is or is not a nigger in disguise.',
  50. 'As a community, your group objective is to weed out the niggers and lynch them like back in the good ol days, before you\'re all raped in your sleep'
  51. ]
  52.  
  53. night_end = 'The night has ended, suburbia awakens to find the dead raped body of:'
  54. night_begin = 'Night time begins in suburbia, everyone sleeps peacfully but niggery is afoot'
  55.  
  56. cant_kill_self = 'You cannot rape yourself.'
  57. cant_kill_wolf = 'You cannot rape another nigger.'
  58.  
  59. cant_see_self = 'You cannot raid yourself'
  60.  
  61. enough_2_wolves = 'There are enough players for 2 niggers'
  62. two_wolves = 'There are two niggers in this game the other nigger is:'
  63.  
  64. lynch_begin = 'Suburbia has made its decision, and has decided to lynch:'
  65.  
  66. #do the even thing? going with determining what roles are left, for added lulz and dickery
  67. wolf_win = 'Suburbia has been thoroughly raped, niggers rein supreme and now no longer hide... there goes the neighborhood.'
  68. village_win = 'Suburbia has been saved and is now rid of all niggers, the suburban dream is safe... for now.'
  69.  
  70. class WolfBot(irc.IRCClient):
  71.    
  72.     def _get_nickname(self):
  73.         return self.factory.nickname
  74.    
  75.     nickname = property(_get_nickname)
  76.  
  77.     def signedOn(self):
  78.         #self.sendLine('OPER %s' % oper_pass)
  79.         self.mode(self.factory.nickname,True,'BH',None,None,None)
  80.         self.msg('Nickserv','id %s' % ns_pass)
  81.         self.msg('Operserv', 'set superadmin on')
  82.         self.join(self.factory.channel)
  83.        
  84.     def player_gone(self,user,channel):
  85.         user = user.lower()
  86.         if self.game_schedule:
  87.             del self.players[user]
  88.             self.msg(channel,'%s just disappeared, nothing of value was lost' % user)
  89.         elif self.game:
  90.             role_num = self.players.get(user, None)
  91.             del self.players[user]
  92.             self.msg(channel,'%s just disappeared, %s was a %s, %s' % (user,user,roles[role_num],roles_left[role_num]))
  93.             if role_num == 1:
  94.                 self.wolves.remove(user)
  95.                 if self.wolves and not self.lynch_time:
  96.                     self.wolf_target = None
  97.                     self.killed = False
  98.                     try:
  99.                         del self.wolf_targets[user]
  100.                     except KeyError, e:
  101.                         pass
  102.                     else:
  103.                         #means there was 2, one remains.
  104.                         other_wolf = self.wolves[0]
  105.                         if self.wolf_targets.get(other_wolf,None) == None:
  106.                             self.msg(other_wolf,'Your fellow %s %s has disappeared, continue choosing your target' % (roles[1],user))
  107.                         else:
  108.                             self.msg(other_wolf,'Your fellow %s %s has disappeared, confirm your target' % (roles[1],user))
  109.  
  110.             elif role_num == 2:
  111.                 self.seer = None
  112.  
  113.             if not self.check_winner(channel):
  114.                 if not self.lynch_time:
  115.                     #fix wolf target dissapearing
  116.                     if user == self.wolf_target or user in self.wolf_targets.values(): #hope dont throw error
  117.                         self.killed = False
  118.                         self.wolf_target = None
  119.                         if len(self.wolves) == 2:
  120.                             for k, v in self.wolf_targets.iteritems():
  121.                                 if v == user:
  122.                                     self.wolf_targets[k] = None
  123.                                     self.msg(k,'Your target of choice has disappeared, select a new target')
  124.                         else:
  125.                             self.msg(self.wolves[0],'Your target of choice has disappeared, select a new target')
  126.                            
  127.                 else:
  128.                     #fix votes here
  129.                     if user in self.not_voted:
  130.                         self.not_voted.remove(user)
  131.                     else:
  132.                         #lower the person who they voted fors tally:
  133.                         self.vote_dict[self.player_vote[user]] -= 1
  134.                         del self.player_vote[user]
  135.                     #give the people who voted for user their vote back and append them to self.not_voted, remove them from vote_dict
  136.                     if self.vote_dict[user] > 0:
  137.                         #could listcomp it
  138.                         people = []
  139.                         for k, v in self.player_vote.iteritems():
  140.                             if v == user:
  141.                                 #give the people who voted for user there vote back, and inform them/channel
  142.                                 self.not_voted.append(k)
  143.                                 people.append(k)
  144.                                 self.player_vote[k] = None #bad?
  145.                         self.msg(channel,'Because %s disappeared, the following people who voted for them, must vote again: %s' % (user,', '.join(people)) )
  146.  
  147.                     del self.vote_dict[user]
  148.                     #lower self.majority
  149.                     self.majority -= 1
  150.    
  151.         if user == self.owner: #need to tie this in with line 101 somehow
  152.             self.owner = random.choice(self.players.keys())
  153.             self.msg(channel,'%s was the game owner, %s has become the owner now' % (user,self.owner))
  154.            
  155.         #self.check_winner
  156.    
  157.     def assign_roles(self,channel):
  158.         if len(self.players) >= min_players_2_wolves:
  159.             self.msg(channel,enough_2_wolves)
  160.             self.wolves = random.sample(self.players.keys(),3)
  161.         else:
  162.             self.wolves = random.sample(self.players.keys(),2)
  163.        
  164.         self.seer = random.choice(self.wolves)
  165.         self.wolves.remove(self.seer)
  166.        
  167.         self.mode(channel,True,'m',None,None,None)
  168.         self.mode(channel,True,'v' * len(self.players),None,' '.join([i for i in self.players.keys()]),None)
  169.  
  170.         for player in self.players.keys():
  171.             #self.mode(channel,True,'v',None,player,None)
  172.             if player == self.seer:
  173.                 self.players[player] = 2
  174.             elif player in self.wolves:
  175.                 self.players[player] = 1
  176.             else:
  177.                 self.players[player] = 3
  178.             role_num = self.players.get(player, None)
  179.             self.msg(player,'You are a %s. %s' % (roles[role_num],roles_objective[role_num]))
  180.        
  181.         for line in game_intro:
  182.             self.msg(channel,line)
  183.        
  184.         self.night_begin()
  185.        
  186.     def night_begin(self):
  187.         self.owner_force = False
  188.         self.lynch_time = False
  189.         self.killed = False
  190.         if self.seer:
  191.             self.seen = False
  192.         else:
  193.             self.seen = True
  194.         for player, role_num in self.players.iteritems():
  195.             self.msg(player,roles_ability.get(role_num,None))
  196.             if role_num == 1 and len(self.wolves) == 2:
  197.                 self.msg(player,'%s %s, you must agree on the same targets.' % (two_wolves,self.get_other_wolf(player)))
  198.  
  199.         self.msg(self.factory.channel,night_begin)
  200.        
  201.     def check_night_finished(self):
  202.         channel = self.factory.channel
  203.         if self.seen and self.killed:
  204.             self.mode(channel,False,'v',None,self.wolf_target,None)
  205.             self.msg(channel,'%s %s' % (night_end, self.wolf_target))
  206.             role_num = self.players[self.wolf_target]
  207.             self.msg(channel,'%s was a confirmed %s. %s' % (self.wolf_target,roles[role_num],roles_left[role_num]))
  208.             self.dead.append(self.wolf_target)
  209.             self.msg(channel,'The following players have been killed: %s ...,may they R.I.P' % ', '.join(self.dead))
  210.             self.msg(channel,'As a community your objective now is to use %s TARGET to cast your vote on who you beleive the %s is.' % (commands['lynch'],roles[1]))
  211.            
  212.             self.msg(self.wolf_target,'You are now dead and can no longer take part in this current game.')
  213.             del self.players[self.wolf_target]
  214.             if role_num == 2:
  215.                 self.seer = None
  216.            
  217.             if not self.check_winner(channel):     
  218.                 self.lynch_time = True
  219.                 self.wolf_target = None
  220.                 self.wolf_targets = {}
  221.                
  222.                 self.not_voted = self.players.keys()
  223.                 self.vote_dict = {i:0 for i in self.not_voted}
  224.                 self.player_vote = {}
  225.                
  226.                 num_players = len(self.players)
  227.                 if num_players%2==0:
  228.                     self.majority = int((num_players / 2) + 1)
  229.                 else:
  230.                     self.majority = int(ceil(num_players / 2))
  231.            
  232.  
  233.     def update_vote(self,nick,target,channel):
  234.         self.msg(channel,'%s has vote for %s' % (nick,target))
  235.         #msg current vote tally
  236.         self.msg(channel,'Current votes: %s, a majority of %s is needed' % (', '.join(['%s:%s' % (k,v) for k, v in self.vote_dict.iteritems() if v > 0]),self.majority))
  237.         #if waiting on people to vote:
  238.         if self.not_voted:
  239.             self.msg(channel,'Waiting for: %s to vote.' % ', '.join(self.not_voted))
  240.             #temp till timeout and owner commands
  241.             if not self.check_votes(channel):
  242.                 print 'fix'
  243.         else:
  244.             #check majority vote
  245.             if not self.check_votes(channel):
  246.                 self.msg(channel,'Voteing stalemate, either come to a majority decision or %s can now use >force' % self.owner)
  247.  
  248.    
  249.     def check_votes(self,channel):
  250.         winner = [k for k, v in self.vote_dict.iteritems() if v >= self.majority]
  251.         if winner:
  252.             self.lynch(winner[0],channel)
  253.             return True
  254.         else:#need the else?
  255.             return False
  256.    
  257.     def lynch(self,target,channel):
  258.         self.mode(channel,False,'v',None,target,None)
  259.         self.msg(channel,'%s %s' % (lynch_begin,target))
  260.         role_num = self.players[target]
  261.         self.msg(channel,'after examining the remains of %s everyone learns that %s was a %s. %s' % (target,target,roles[role_num],roles_left[role_num]))
  262.        
  263.         if role_num == 1:
  264.             self.wolves.remove(target)
  265.         elif role_num == 2:
  266.             self.seer = None
  267.         #refresh variables
  268.         del self.players[target]       
  269.        
  270.         if not self.check_winner(channel):
  271.             self.night_begin()
  272.        
  273.     def check_winner(self,channel):
  274.         if not self.wolves:
  275.             self.msg(channel,village_win)
  276.             self.game_fin(channel)
  277.             return True
  278.         elif len(self.wolves) >= len([k for k, v in self.players.iteritems() if v != 1]):
  279.             self.msg(channel,wolf_win)
  280.             self.game_fin(channel)
  281.             return True
  282.         else:
  283.             return False
  284.            
  285.     def game_fin(self,channel):
  286.         #channel modes
  287.         if self.wolves:
  288.             if len(self.wolves) == 1:
  289.                 self.msg(channel,'%s was a %s' % (self.wolves[0],roles[1]))
  290.             else:
  291.                 self.msg(channel,'%s were %ss' % (' and '.join(self.wolves),roles[1]))
  292.         if self.seer:
  293.             self.msg(channel,'%s was a %s' % (self.seer,roles[2]))
  294.         self.mode(channel,False,'m',None,None,None)
  295.         self.mode(channel,False,'v' * len(self.players),None,' '.join([i for i in self.players.keys()]),None)
  296.        
  297.         #reset all variables to default shit
  298.         self.game = False
  299.         self.game_schedule = False
  300.         self.lynch_time = False
  301.         self.seen = False
  302.         self.killed = False
  303.         self.owner_force = False
  304.         self.dead = []
  305.         self.players = {}
  306.         self.wolf_targets = {}
  307.         self.wolf_target = None
  308.         self.owner = None
  309.        
  310.        
  311.     game = False
  312.     game_schedule = False
  313.     lynch_time = False
  314.     seen = False
  315.     killed = False
  316.     #used to track targets when more than one wolf
  317.     wolf_targets = {}
  318.     wolf_target = None
  319.     dead = []
  320.     owner = None #game owner/starter/founder
  321.     players = {}
  322.     owner_force = False
  323.    
  324.     def userLeft(self, user, channel):
  325.         if user in self.players:
  326.             self.player_gone(user,channel)
  327.            
  328.     def userQuit(self, user, quitMessage):
  329.         if user in self.players:
  330.             self.player_gone(user,self.factory.channel)
  331.        
  332.     def userKicked(self, user, channel, kicker, message):
  333.         if user in self.players:
  334.             self.player_gone(user,channel)
  335.  
  336.     def irc_NICK(self, user, params):
  337.         old_nick = user.split('!')[0].lower()
  338.         new_nick = params[0].lower()
  339.         if old_nick in self.players:
  340.             role = self.players[old_nick]
  341.             if role == 1:
  342.                 self.wolves[self.wolves.index(old_nick)] = new_nick
  343.                 self.wolf_targets[new_nick] = self.wolf_target[old_nick]
  344.                 del self.wolf_target[old_nick]
  345.             elif role == 2:
  346.                 self.seer = new_nick
  347.            
  348.             if old_nick == self.wolf_target:
  349.                 self.wolf_target = new_nick
  350.             if old_nick in self.wolf_targets.values():
  351.                 for k, v in self.wolf_targets.iteritems():
  352.                     if v == old_nick:
  353.                         self.wolf_targets[k] = new_nick
  354.            
  355.             del self.players[old_nick]
  356.             self.players[new_nick] = role
  357.            
  358.             #update votes etc
  359.             if self.lynch_time:
  360.                 if old_nick in self.not_voted:
  361.                     self.not_voted.remove(old_nick)
  362.                     self.not_voted.append(new_nick)
  363.                 else:
  364.                     self.player_vote[new_nick] = self.player_vote[old_nick]
  365.                     del self.player_vote[old_nick]
  366.                 #update vote count for this person
  367.                 self.vote_dict[new_nick] = self.vote_dict[old_nick]
  368.                 del self.vote_dict[old_nick]
  369.            
  370.             if old_nick == self.owner:
  371.                 self.owner = new_nick
  372.             self.notice(new_nick,'Tracked your nick change.')
  373.  
  374.     def privmsg(self, user, channel, msg):
  375.         nick = user.split('!')[0].lower()
  376.         command = msg.split(' ')[0].lower()
  377.         #needs to be faster :o
  378.         #could do handleing here maybe
  379.        
  380.         if command == '>join' and channel == self.factory.channel:
  381.             if self.game and nick in self.players:
  382.                 self.notice(nick,'You are already in the game in progress')
  383.             elif self.game and nick not in self.players:
  384.                 self.notice(nick,'You may not join a game in progress')
  385.             elif self.game_schedule and nick in self.players:
  386.                 self.notice(nick,'You have already joined')
  387.             elif self.game_schedule and nick not in self.players:
  388.                 self.msg(channel,'%s has just joined the game' % nick)
  389.                 self.players[nick] = None
  390.             else:
  391.                 self.notice(nick,'No game at the moment, use >start to begin one')
  392.                
  393.         elif command == '>leave' and channel == self.factory.channel:
  394.             if self.game and nick in self.players:
  395.                 self.notice(nick,'You cant leave a game in progress')
  396.             elif self.game and nick not in self.players:
  397.                 self.notice(nick,'You cant leave a game you\'re not a part of')
  398.             elif self.game_schedule and nick in self.players:
  399.                 del self.players[nick]
  400.                 self.notice(nick,'You have just left the game')
  401.             elif self.game_schedule and nick not in self.players:
  402.                 self.notice(nick,'You cant leave a game you\'re not a part of')
  403.             else:
  404.                 self.notice(nick,'No game at the moment, use >start to begin one')
  405.            
  406.         elif command == '>start' and channel == self.factory.channel:
  407.             #expand
  408.             if self.game or self.game_schedule:
  409.                 self.notice(nick,'Game already in progress')
  410.             else:
  411.                 self.game_schedule = True
  412.                 self.owner = nick
  413.                 self.players[nick] = None
  414.                 self.notice(nick,'You are the game owner, use >begin to begin the game one all players have joined')
  415.                 self.msg(channel,'%s has just started a new game, use >join to join!' % nick)
  416.                
  417.         elif command == '>begin' and channel == self.factory.channel:
  418.             if self.game:
  419.                 self.notice(nick,'Game already in progress')
  420.             elif nick != self.owner and self.game_schedule:
  421.                 self.notice(nick,'Only the game owner can begin the game, current owner: %s' % self.owner)
  422.             elif nick == self.owner and self.game_schedule:
  423.                 if len(self.players) < min_players:
  424.                     self.msg(channel,'Not enough players to begin the new game')
  425.                 else:
  426.                     self.game_schedule = False
  427.                     self.game = True
  428.                     self.msg(channel,'New game starting, assigining roles')
  429.                     self.assign_roles(channel)
  430.             elif not self.game_schedule:
  431.                 self.notice(nick,'No game at the moment, use >start to begin one')
  432.        
  433.         elif command == commands['lynch'] and channel == self.factory.channel:
  434.             if not self.lynch_time:
  435.                 self.notice(nick,'Now is not the time for that')
  436.             else:
  437.                 try:
  438.                     target = msg.split(' ')[1].lower()
  439.                 except IndexError, e:
  440.                     self.notice(nick,'No target given.')
  441.                 else:
  442.                     if target in self.players:
  443.                         if nick == target:
  444.                             self.notice(nick,'You cannot vote for yourself')
  445.                         elif nick in self.not_voted:
  446.                             self.not_voted.remove(nick)
  447.                             self.vote_dict[target] += 1
  448.                             self.player_vote[nick] = target
  449.                             self.notice(nick,'Vote set, current vote: %s' % target)
  450.                             self.update_vote(nick,target,channel)
  451.                         elif self.player_vote.get(nick,None) != target:
  452.                             self.vote_dict[self.player_vote[nick]] -= 1
  453.                             self.player_vote[nick] = target
  454.                             self.vote_dict[target] += 1
  455.                             self.notice(nick,'Vote updated, current vote: %s' % target)
  456.                             self.update_vote(nick,target,channel)  
  457.                         elif self.player_vote.get(nick,None) == target:
  458.                             self.notice(nick,'%s has already got your vote.' % target)
  459.                            
  460.                     elif target in self.dead:
  461.                         self.notice(nick,'You cannot vote for %s, since they are already dead' % target)
  462.                     else:
  463.                         self.notice(nick,'%s isn\'t playing' % target)
  464.  
  465.         elif command == commands['kill'] and channel == self.nickname:
  466.             if self.lynch_time and nick in self.wolves:
  467.                 self.msg(nick,'Now is not the time for that')
  468.             if not self.lynch_time and nick in self.wolves:
  469.                 if self.killed:
  470.                     if len(self.wolves) == 2:
  471.                         self.msg(nick,'You and the other %s have already decided on your target' % roles[1])
  472.                     else:
  473.                         try:
  474.                             target = msg.split(' ')[1].lower()
  475.                         except IndexError, e:
  476.                             self.msg(nick,'No target given')
  477.                         else:
  478.                             if target == nick:
  479.                                 self.msg(nick,cant_kill_self)
  480.                             elif target in self.dead:
  481.                                 self.msg(nick,'%s is already dead' % target)
  482.                             elif target in self.players:
  483.                                 self.msg(nick,'Target updated')
  484.                                 self.wolf_target = target
  485.                                 self.check_night_finished()
  486.                 else:
  487.                     try:
  488.                         target = msg.split(' ')[1].lower()
  489.                     except IndexError, e:
  490.                         self.msg(nick,'No target given')
  491.                     else:
  492.                         if target == nick:
  493.                             self.msg(nick,cant_kill_self)
  494.                         elif target in self.dead:
  495.                             self.msg(nick,'%s is already dead' % target)
  496.                         elif target in self.players and len(self.wolves) != 2:
  497.                             self.msg(nick,'Target set')
  498.                             self.wolf_target = target
  499.                             self.killed = True
  500.                             self.check_night_finished()
  501.                         elif target in self.wolves:
  502.                             self.msg(nick,cant_kill_wolf)
  503.                         elif target in self.players and len(self.wolves) == 2:
  504.                             self.msg(nick,'Target set')
  505.                             self.wolf_targets[nick] = target
  506.                             other_wolf = self.get_other_wolf(nick)
  507.                             if self.wolf_targets.get(other_wolf, None) == target:
  508.                                 self.msg('%s,%s' % (nick,other_wolf),'Target has been agreed on, no going back.') #sake of ease
  509.                                 self.wolf_target = target
  510.                                 self.killed = True
  511.                                 self.check_night_finished()
  512.                             elif self.wolf_targets.get(other_wolf, None) == None:
  513.                                 self.msg(nick,'%s hasn\'t chose a target yet' % other_wolf)
  514.                                 self.msg(other_wolf,'%s has just chosen %s as a target' % (nick,target))
  515.                             else:
  516.                                 self.msg(other_wolf,'%s has just chosen %s as a target' % (nick,target))
  517.                                 self.msg('%s,%s' % (nick,other_wolf),'You have both chosen different targets, you need to agree')
  518.                                
  519.                         else:
  520.                             self.msg(nick,'%s isn\'t playing' % target)
  521.                            
  522.         elif command == commands['see'] and channel == self.nickname:
  523.             if self.lynch_time and nick == self.seer:
  524.                 self.msg(nick,'Now is not the time for that')
  525.             elif not self.lynch_time and nick == self.seer:
  526.                 if self.seen:
  527.                     self.msg(nick,'You have already used your ability for tonight')
  528.                 else:
  529.                     try:
  530.                         target = msg.split(' ')[1].lower()
  531.                     except IndexError, e:
  532.                         self.msg(nick,'No target given')
  533.                     else:
  534.                         if target == nick:
  535.                             self.msg(nick,'%s...try again' % cant_see_self)
  536.                         elif target in self.dead:
  537.                             self.msg(nick,'%s is dead' % target)
  538.                         elif target in self.players:
  539.                             self.msg(nick,'%s is a confirmed %s' % (target, roles[self.players[target]]))
  540.                             self.seen = True
  541.                             self.check_night_finished()
  542.                         else:
  543.                             self.msg(nick,'%s isn\'t playing' % target)
  544.    
  545.     def get_other_wolf(self,user):
  546.         for wolf in self.wolves:
  547.             if wolf != user:
  548.                 return wolf
  549.    
  550.     def ctcpQuery(self, user, channel, messages):
  551.         print 'Faggot is ctcp\'in'
  552.  
  553.  
  554. class WolfBotFactory(protocol.ClientFactory):
  555.     protocol = WolfBot
  556.  
  557.     def __init__(self, channel, nickname='Wolf'):
  558.         self.channel = channel
  559.         self.nickname = nickname
  560.        
  561.     def clientConnectionLost(self, connector, reason):
  562.         connector.connect()
  563.        
  564.     def clientConnectionFailed(self, connector, reason):
  565.         print "Connection failure:", reason
  566.         reactor.stop()
  567.  
  568. if __name__ == '__main__':
  569.     reactor.connectTCP(server, 6667, WolfBotFactory(channel))
  570.     reactor.run()
Add Comment
Please, Sign In to add comment