class Team < ActiveRecord::Base validates :name, presence: true validates :description, presence: true def join(character, _event) existing_row = CharTeam.where(char_id: character.id, team_id: id) if existing_row.empty? CharTeam.create(char_id: character.id, team_id: id, active: true) else existing_row.update(active: true) end end def leave(char) # Find the char_team row, update it to inactive ct = CharTeam.where(team_id: id).find_by!(char_id: char.id) ct.update(active: false) # Check if they have any members left in the team # Special Query sql = 'SELECT * ' + 'FROM char_teams JOIN characters ' + 'ON char_teams.char_id = characters.id ' + 'WHERE characters.user_id = ? ' + 'AND char_teams.team_id = ? ' + 'and char_teams.active = true;' # Execute sql = ActiveRecord::Base.send(:sanitize_sql_array, [sql, char.user_id, id]) remaining_chars = ActiveRecord::Base.connection.exec_query(sql) # Return if the user should have team role removed remaining_chars.count == 0 rescue ActiveRecord::RecordNotFound => e error_embed(e.message) end def archive(event) # Update each character team status to false, then the team CharTeam.where(team_id: id).update(active: false) update(active: false) # Delete Server Role, and move channel event.server.role(role_id).delete('Archived Team') event.channel.category = (ENV['TEAM_ARCHIVES']) end end