async def on_ready(): print('Logged in as') print(client.user.name) print(client.user.id) print('-----') client_game = Game(name=config.game_played) await client.change_presence(activity = client_game) globals_file.init(client, config) globals_file.log_information("Bot Started")
async def send_message(message, message_to_send, force_author=False): try: message_destination = determine_destination(message, force_author) await message_destination.send(message_to_send) except: print('Failed to send message') print(sys.exc_info()[0]) error_message = "Failed to send message. %s" % sys.exc_info()[0] globals_file.log_information(error_message)
async def handle(member): try: if (globals_file.welcome_message): if (member.dm_channel == None): await member.create_dm() dm_channel = member.dm_channel welcome_string = globals_file.welcome_message await dm_channel.send(welcome_string) except: log_message = "Error: %s" % sys.exc_info()[0] globals_file.log_information(log_message)
async def delete_message(message): try: await message.channel.fetch_message(message.id) if (message.channel.name and globals_file.commands_config and message.channel.id == globals_file.commands_config['commands_channel'].id): return 0 if (message.channel.name): await message.delete() except: print('Failed to delete message') print(sys.exc_info()[0]) error_message = "Failed to delete message. %s" % sys.exc_info()[0] globals_file.log_information(error_message)
async def apply(message): if (globals_file.tps_booster and globals_file.tps_booster['waiting_on_player_list'] and globals_file.tps_booster['waiting_on_player_list']['is_waiting']): if (globals_file.tps_booster['waiting_on_player_list']['is_waiting']): time_delta = datetime.datetime.now() - globals_file.tps_booster[ 'waiting_on_player_list']['time_started'] if ((time_delta > datetime.timedelta(minutes=5))): globals_file.tps_booster['waiting_on_player_list'][ 'is_waiting'] = False globals_file.tps_booster['waiting_on_player_list'][ 'time_started'] = None log_message = "Time expired for getting player list. tps_booster: %s" % globals_file.tps_booster globals_file.log_information(log_message) return 0 matches = re.search("(There are \d+ of a max \d+ players online: .+)", message.content) if (matches): globals_file.tps_booster['waiting_on_player_list'] = False players = matches.groups()[0].split(': ')[1].split(', ') globals_file.tps_booster['waiting_on_player_status'] = {} if (players): globals_file.tps_booster['waiting_on_player_status'][ 'players'] = {} globals_file.tps_booster['waiting_on_player_status'][ 'is_waiting'] = True globals_file.tps_booster['waiting_on_player_status'][ 'time_started'] = datetime.datetime.now() log_message = "Started waiting on afk status. tps_booster: %s" % globals_file.tps_booster globals_file.log_information(log_message) else: globals_file.tps_booster['waiting_on_player_status'][ 'players'] = None globals_file.tps_booster['waiting_on_player_status'][ 'is_waiting'] = False globals_file.tps_booster['waiting_on_player_status'][ 'time_started'] = None log_message = "Not players afk. tps_booster: %s" % globals_file.tps_booster globals_file.log_information(log_message) return 0 for player in players: globals_file.tps_booster['waiting_on_player_status']['players'][ player] = {} globals_file.tps_booster['waiting_on_player_status']['players'][ player]['waiting'] = True globals_file.tps_booster['waiting_on_player_status']['players'][ player]['start_time'] = datetime.datetime.now() globals_file.tps_booster['waiting_on_player_status']['players'][ player]['is_afk'] = False log_message = "Started waiting on player specific afk status. tps_booster: %s" % globals_file.tps_booster globals_file.log_information(log_message) time.sleep(1) await globals_file.console_logs_channel.send( u'afkplus player %s' % player.replace('\\', ''))
async def handle(before, after): try: if (globals_file.console_logs_channel and globals_file.tps_booster and globals_file.moderation): if (before.id == globals_file.console_logs_channel.id and after.id == globals_file.console_logs_channel.id): tps = float(after.topic.split('|')[0].split(' ')[1]) if (tps < globals_file.tps_booster['minimum_tps']): await globals_file.moderation['moderation_channel'].send( "TPS is %s. Starting process to kick afk members." % tps) globals_file.tps_booster['waiting_on_player_list'] = { "is_waiting": True, "time_started": datetime.datetime.now() } time.sleep(1) await globals_file.console_logs_channel.send('list') except: log_message = "Error: %s" % sys.exc_info()[0] globals_file.log_information(log_message)
async def on_message(message): if(not message.author == client.user and globals_file.console_logs_channel and message.channel.id == globals_file.console_logs_channel.id and globals_file.tps_booster and globals_file.tps_booster['waiting_on_player_list'] and globals_file.tps_booster['waiting_on_player_list']['is_waiting']): log_message = "Setting playerlist\ntps_booster: %s" % globals_file.tps_booster globals_file.log_information(log_message) await set_playerlist.apply(message) if(not message.author == client.user and globals_file.console_logs_channel and message.channel.id == globals_file.console_logs_channel.id and globals_file.tps_booster and globals_file.tps_booster['waiting_on_player_status'] and globals_file.tps_booster['waiting_on_player_status']['is_waiting']): log_message = "Handling afk statuses\ntps_booster: %s" % globals_file.tps_booster globals_file.log_information(log_message) await handle_afk_status.apply(message) # Ignore everything in the logs channel if(globals_file.logs): if(message.channel.id == globals_file.logs['logs_channel'].id or message.channel.id in globals_file.logs['ignored_channels']): return 0 # Ignore any private messages or own messages for logs if(message.author != client.user and globals_file.logs['log_all_messages'] and message.channel.name): author = message.author.nick if message.author.nick else message.author.name log_message = ('%s said \"%s\" in %s#%s at %s') % (author, message.clean_content, message.guild.name, message.channel.name, message.created_at.strftime("%m/%d/%Y, %H:%M:%S")) await globals_file.logs['logs_channel'].send(log_message) # Ignore commands outside of commands channel or in ignored channels if set if(globals_file.commands_config): if(globals_file.commands_config['only_commands_here'] and message.channel.id != globals_file.commands_config['commands_channel'].id): return 0 if(message.channel.id in globals_file.commands_config['ignored_channels']): return 0 # listen to command attempt if(message.content.startswith('!')): log_message = "Command detected. messageContent:%s, messageAuthor:%s" % (message.content, message.author) globals_file.log_information(log_message) command_body = message.content[1:].lower() if(version.is_triggered(command_body)): await version.command(message, current_version) elif(status.is_triggered(command_body)): await status.command(message) elif(ping.is_triggered(command_body)): await ping.command(message) elif(join_message_test.is_triggered(command_body)): await join_message_test.command(message) elif(help.is_triggered(command_body)): await help.command(message)
async def apply(message): try: if (globals_file.tps_booster['waiting_on_player_status'] ['time_started']): now = datetime.datetime.now() time_delta = now - globals_file.tps_booster[ 'waiting_on_player_status']['time_started'] if (time_delta > datetime.timedelta(minutes=5)): globals_file.tps_booster['waiting_on_player_status'][ 'time_started'] = None log_message = "Time expired for handling afk status. Time delta:%s, tps_booster:%s" % ( time_delta, globals_file.tps_booster) globals_file.log_information(log_message) return 0 not_afk_matches = re.search("(]\s.+( is not AFK))", message.content) afk_matches = re.search("(]\s.+( has been AFK since))", message.content) if (not_afk_matches): player = not_afk_matches.groups()[0].split(' ')[1] if (globals_file.tps_booster['waiting_on_player_status']['players'] [player]): if (globals_file.tps_booster['waiting_on_player_status'] ['players'][player]['waiting']): globals_file.tps_booster['waiting_on_player_status'][ 'players'][player]['waiting'] = False globals_file.tps_booster['waiting_on_player_status'][ 'players'][player]['is_afk'] = False log_message = "Updated tps_booster: %s" % globals_file.tps_booster globals_file.log_information(log_message) elif (afk_matches): player = afk_matches.groups()[0].split(' ')[1] if (globals_file.tps_booster['waiting_on_player_status']['players'] [player]): if (globals_file.tps_booster['waiting_on_player_status'] ['players'][player]['waiting']): globals_file.tps_booster['waiting_on_player_status'][ 'players'][player]['waiting'] = False globals_file.tps_booster['waiting_on_player_status'][ 'players'][player]['is_afk'] = True await globals_file.moderation['moderation_channel'].send( "Kicking %s due to being AFK during low TPS" % player) await globals_file.console_logs_channel.send( u"kick %s %s" % (player.replace( '\\', ''), globals_file.tps_booster['kick_reason']) ) log_message = "Kicked afk player: %s, tps_booster: %s" % ( player.replace('\\', ''), globals_file.tps_booster) globals_file.log_information(log_message) for player in globals_file.tps_booster['waiting_on_player_status'][ 'players']: if globals_file.tps_booster['waiting_on_player_status']['players'][ player]['waiting']: return 0 globals_file.tps_booster['waiting_on_player_status'][ 'is_waiting'] = False log_message = "No longer waiting to handle afk status: %s" % globals_file.tps_booster globals_file.log_information(log_message) except: log_message = "Error: %s" % sys.exc_info()[0] globals_file.log_information(log_message)
async def on_guild_channel_update(before, after): log_message = "Guild Channel Update Event\nBefore: name:%s, id:%d, topic:%s\nAfter: name:%s, id:%d, topic:%s" % (before.name, before.id, before.topic, after.name, after.id, after.topic) globals_file.log_information(log_message) await guild_channel_updated.handle(before, after)
async def on_member_ban(guild, user): log_message = "Guild Member Ban Event\nGuild: name:%s\nUser: name:%s, id:%d" % (guild.name, user.name, user.id) globals_file.log_information(log_message) await member_banned.handle(guild, user)
async def on_member_remove(member): log_message = "Member Remove Event\nMember: name:%s, nick:%s. id:%d" % (member.name, member.nick, member.id) globals_file.log_information(log_message) await member_left.handle(member)
async def on_member_join(member): log_message = "Member Joined\nMember: name:%s, nick:%s, id:%d" % (member.name, member.nick, member.id) globals_file.log_information(log_message) await member_joined.handle(member)