def kick_afk(connection, minutes, amount=None):
protocol = connection.protocol
minutes = int(minutes)
if minutes < 1:
raise ValueError()
to_kick = []
seconds = minutes * 60.0
minutes_s = prettify_timespan(seconds)
lower_bound = reactor.seconds() - seconds
for conn in protocol.connections.values():
if not conn.admin and conn.last_activity < lower_bound:
to_kick.append(conn)
if not to_kick:
return S_NO_PLAYERS_INACTIVE.format(time=minutes_s)
to_kick.sort(key=attrgetter('last_activity'))
to_kick.sort(key=lambda conn: conn.name is None)
amount = amount or len(to_kick)
kicks = 0
for conn in to_kick[:amount]:
if conn.name:
conn.afk_kick()
kicks += 1
else:
conn.disconnect()
message = S_AFK_KICKED.format(
num_players=kicks,
num_connections=amount - kicks,
time=minutes_s)
protocol.irc_say('* ' + message)
if connection in protocol.players:
return message
评论列表
文章目录