diff --git a/.dialyzer_ignore.exs b/.dialyzer_ignore.exs index 5dec52e7b..5b8f838a6 100644 --- a/.dialyzer_ignore.exs +++ b/.dialyzer_ignore.exs @@ -1,570 +1,591 @@ [ {"lib/central/input_helper.ex", :guard_fail}, -{"lib/gen_server.ex", :callback_info_missing}, -{"lib/nostrum/consumer.ex", :unknown_function}, -{"lib/teiserver.ex", :unknown_type}, -{"lib/teiserver.ex", :invalid_contract}, -{"lib/teiserver/account.ex", :unknown_type}, -{"lib/teiserver/account.ex", :invalid_contract}, -{"lib/teiserver/account.ex", :call}, -{"lib/teiserver/account.ex", :no_return}, -{"lib/teiserver/account/accolades/accolade_bot_server.ex", :unknown_type}, -{"lib/teiserver/account/accolades/accolade_bot_server.ex", :no_return}, -{"lib/teiserver/account/accolades/accolade_bot_server.ex", :call}, -{"lib/teiserver/account/accolades/accolade_chat_server.ex", :no_return}, -{"lib/teiserver/account/accolades/accolade_chat_server.ex", :call}, -{"lib/teiserver/account/accolades/accolade_chat_server.ex", :unknown_type}, -{"lib/teiserver/account/caches/user_cache_lib.ex", :no_return}, -{"lib/teiserver/account/caches/user_cache_lib.ex", :call}, -{"lib/teiserver/account/caches/user_cache_lib.ex", :unknown_type}, -{"lib/teiserver/account/libs/accolade_lib.ex", :unknown_type}, -{"lib/teiserver/account/libs/accolade_lib.ex", :no_return}, -{"lib/teiserver/account/libs/accolade_lib.ex", :call}, -{"lib/teiserver/account/libs/auth_lib.ex", :unknown_type}, -{"lib/teiserver/account/libs/badge_type_lib.ex", :unknown_type}, -{"lib/teiserver/account/libs/client_lib.ex", :unknown_type}, -{"lib/teiserver/account/libs/friend_lib.ex", :unknown_type}, -{"lib/teiserver/account/libs/friend_request_lib.ex", :unknown_type}, -{"lib/teiserver/account/libs/party_lib.ex", :no_return}, -{"lib/teiserver/account/libs/party_lib.ex", :call}, -{"lib/teiserver/account/libs/rating_lib.ex", :unknown_type}, -{"lib/teiserver/account/libs/relationship_lib.ex", :unknown_type}, -{"lib/teiserver/account/libs/smurf_key_lib.ex", :unknown_type}, -{"lib/teiserver/account/libs/smurf_key_type_lib.ex", :unknown_type}, -{"lib/teiserver/account/libs/user_lib.ex", :unknown_type}, -{"lib/teiserver/account/libs/user_lib.ex", :call}, -{"lib/teiserver/account/libs/user_stat_lib.ex", :unknown_type}, -{"lib/teiserver/account/plugs/auth_plug.ex", :call}, -{"lib/teiserver/account/queries/friend_queries.ex", :unknown_type}, -{"lib/teiserver/account/queries/friend_request_queries.ex", :unknown_type}, -{"lib/teiserver/account/queries/relationship_queries.ex", :unknown_type}, -{"lib/teiserver/account/queries/user_queries.ex", :unknown_type}, -{"lib/teiserver/account/reports/ban_evasion_report.ex", :invalid_contract}, -{"lib/teiserver/account/reports/growth_report.ex", :callback_spec_type_mismatch}, -{"lib/teiserver/account/reports/growth_report.ex", :no_return}, -{"lib/teiserver/account/reports/growth_report.ex", :call}, -{"lib/teiserver/account/reports/leaderboard_report.ex", :invalid_contract}, -{"lib/teiserver/account/reports/mapping_report.ex", :invalid_contract}, -{"lib/teiserver/account/reports/open_skill_report.ex", :invalid_contract}, -{"lib/teiserver/account/reports/population_report.ex", :no_return}, -{"lib/teiserver/account/reports/population_report.ex", :call}, -{"lib/teiserver/account/reports/population_report.ex", :pattern_match}, -{"lib/teiserver/account/reports/population_report.ex", :invalid_contract}, -{"lib/teiserver/account/reports/population_report.ex", :unused_fun}, -{"lib/teiserver/account/reports/records_report.ex", :invalid_contract}, -{"lib/teiserver/account/reports/retention_report.ex", :invalid_contract}, -{"lib/teiserver/account/reports/time_compare_report.ex", :invalid_contract}, -{"lib/teiserver/account/reports/time_compare_report.ex", :call}, -{"lib/teiserver/account/reports/tournament_report.ex", :invalid_contract}, -{"lib/teiserver/account/reports/user_age_report.ex", :invalid_contract}, -{"lib/teiserver/account/reports/week_on_week_report.ex", :invalid_contract}, -{"lib/teiserver/account/schemas/accolade.ex", :unknown_type}, -{"lib/teiserver/account/schemas/badge_type.ex", :unknown_type}, -{"lib/teiserver/account/schemas/friend.ex", :unknown_type}, -{"lib/teiserver/account/schemas/friend_request.ex", :unknown_type}, -{"lib/teiserver/account/schemas/relationship.ex", :unknown_type}, -{"lib/teiserver/account/schemas/smurf_key.ex", :unknown_type}, -{"lib/teiserver/account/schemas/smurf_key_type.ex", :unknown_type}, -{"lib/teiserver/account/servers/client_server.ex", :unknown_type}, -{"lib/teiserver/account/servers/login_throttle_server.ex", :unknown_type}, -{"lib/teiserver/account/servers/party_server.ex", :no_return}, -{"lib/teiserver/account/servers/party_server.ex", :call}, -{"lib/teiserver/account/servers/party_server.ex", :unknown_type}, -{"lib/teiserver/account/tasks/merge_accounts_task.ex", :no_return}, -{"lib/teiserver/account/tasks/merge_accounts_task.ex", :pattern_match}, -{"lib/teiserver/account/tasks/recalculate_user_cache_task.ex", :invalid_contract}, -{"lib/teiserver/battle.ex", :unknown_type}, -{"lib/teiserver/battle.ex", :call}, -{"lib/teiserver/battle.ex", :no_return}, -{"lib/teiserver/battle/api_auth.ex", :unknown_type}, -{"lib/teiserver/battle/balance/balance_types.ex", :unknown_type}, -{"lib/teiserver/battle/balance/cheeky_switcher_smart.ex", :unknown_type}, -{"lib/teiserver/battle/balance/cheeky_switcher_smart.ex", :call}, -{"lib/teiserver/battle/balance/cheeky_switcher_smart.ex", :no_return}, -{"lib/teiserver/battle/balance/cheeky_switcher_smart.ex", :pattern_match}, -{"lib/teiserver/battle/balance/cheeky_switcher_smart.ex", :unused_fun}, -{"lib/teiserver/battle/balance/loser_picks.ex", :invalid_contract}, -{"lib/teiserver/battle/libs/balance_lib.ex", :call}, -{"lib/teiserver/battle/libs/balance_lib.ex", :unknown_type}, -{"lib/teiserver/battle/libs/balance_lib.ex", :no_return}, -{"lib/teiserver/battle/libs/match_lib.ex", :unknown_type}, -{"lib/teiserver/battle/mix_tasks/compare_balance_algorithms_task.ex", :callback_info_missing}, -{"lib/teiserver/battle/schemas/match.ex", :unknown_type}, -{"lib/teiserver/battle/servers/match_monitor_server.ex", :unknown_type}, -{"lib/teiserver/battle/servers/match_monitor_server.ex", :call}, -{"lib/teiserver/battle/servers/match_monitor_server.ex", :no_return}, -{"lib/teiserver/battle/tasks/post_match_process_task.ex", :no_return}, -{"lib/teiserver/battle/tasks/post_match_process_task.ex", :call}, -{"lib/teiserver/battle/tasks/post_match_process_task.ex", :unused_fun}, -{"lib/teiserver/benchmark/benchmark_task.ex", :callback_info_missing}, -{"lib/teiserver/bridge/bridge_server.ex", :unknown_type}, -{"lib/teiserver/bridge/bridge_server.ex", :unknown_function}, -{"lib/teiserver/bridge/bridge_server.ex", :call}, -{"lib/teiserver/bridge/bridge_server.ex", :unused_fun}, -{"lib/teiserver/bridge/bridge_server.ex", :no_return}, -{"lib/teiserver/bridge/chat_commands.ex", :unknown_type}, -{"lib/teiserver/bridge/chat_commands.ex", :call}, -{"lib/teiserver/bridge/chat_commands.ex", :unknown_function}, -{"lib/teiserver/bridge/command_lib.ex", :unknown_type}, -{"lib/teiserver/bridge/commands/bridge_command_behaviour.ex", :unknown_type}, -{"lib/teiserver/bridge/commands/textcb_command.ex", :unknown_type}, -{"lib/teiserver/bridge/discord_bridge_bot.ex", :guard_fail}, -{"lib/teiserver/bridge/discord_bridge_bot.ex", :unknown_function}, -{"lib/teiserver/bridge/discord_bridge_bot.ex", :unknown_type}, -{"lib/teiserver/bridge/discord_bridge_bot.ex", :no_return}, -{"lib/teiserver/bridge/discord_bridge_bot.ex", :call}, -{"lib/teiserver/bridge/message_commands.ex", :unknown_type}, -{"lib/teiserver/bridge/message_commands.ex", :call}, -{"lib/teiserver/bridge/message_commands.ex", :pattern_match}, -{"lib/teiserver/bridge/message_commands.ex", :pattern_match_cov}, -{"lib/teiserver/bridge/message_commands.ex", :unknown_function}, -{"lib/teiserver/chat.ex", :unknown_type}, -{"lib/teiserver/chat/chat_room_cache.ex", :unknown_type}, -{"lib/teiserver/chat/chat_room_cache.ex", :call}, -{"lib/teiserver/chat/chat_room_cache.ex", :no_return}, -{"lib/teiserver/chat/libs/direct_message_lib.ex", :unknown_type}, -{"lib/teiserver/chat/libs/lobby_message_lib.ex", :unknown_type}, -{"lib/teiserver/chat/libs/party_message_lib.ex", :unknown_type}, -{"lib/teiserver/chat/libs/room_message_lib.ex", :unknown_type}, -{"lib/teiserver/chat/schemas/direct_message.ex", :unknown_type}, -{"lib/teiserver/chat/schemas/lobby_message.ex", :unknown_type}, -{"lib/teiserver/chat/schemas/party_message.ex", :unknown_type}, -{"lib/teiserver/chat/schemas/room_message.ex", :unknown_type}, -{"lib/teiserver/clans.ex", :unknown_type}, -{"lib/teiserver/clans/libs/clan_invite_lib.ex", :unknown_type}, -{"lib/teiserver/clans/libs/clan_lib.ex", :unknown_type}, -{"lib/teiserver/clans/libs/clan_membership_lib.ex", :unknown_type}, -{"lib/teiserver/communication.ex", :unknown_type}, -{"lib/teiserver/communication.ex", :invalid_contract}, -{"lib/teiserver/communication/libs/discord_channel_lib.ex", :unknown_type}, -{"lib/teiserver/communication/libs/discord_channel_lib.ex", :unknown_function}, -{"lib/teiserver/communication/libs/text_callback_lib.ex", :unknown_type}, -{"lib/teiserver/communication/queries/discord_channel_queries.ex", :unknown_type}, -{"lib/teiserver/communication/schemas/discord_channel.ex", :unknown_type}, -{"lib/teiserver/communication/schemas/text_callback.ex", :unknown_type}, -{"lib/teiserver/config.ex", :unknown_type}, -{"lib/teiserver/coordinator.ex", :pattern_match}, -{"lib/teiserver/coordinator.ex", :unknown_type}, -{"lib/teiserver/coordinator.ex", :no_return}, -{"lib/teiserver/coordinator.ex", :call}, -{"lib/teiserver/coordinator/automod_server.ex", :invalid_contract}, -{"lib/teiserver/coordinator/automod_server.ex", :unknown_type}, -{"lib/teiserver/coordinator/automod_server.ex", :no_return}, -{"lib/teiserver/coordinator/automod_server.ex", :call}, -{"lib/teiserver/coordinator/consul_commands.ex", :unknown_type}, -{"lib/teiserver/coordinator/consul_commands.ex", :call}, -{"lib/teiserver/coordinator/consul_commands.ex", :no_return}, -{"lib/teiserver/coordinator/consul_server.ex", :unknown_type}, -{"lib/teiserver/coordinator/consul_server.ex", :no_return}, -{"lib/teiserver/coordinator/consul_server.ex", :call}, -{"lib/teiserver/coordinator/coordinator_commands.ex", :unknown_type}, -{"lib/teiserver/coordinator/coordinator_commands.ex", :call}, -{"lib/teiserver/coordinator/coordinator_lib.ex", :unknown_type}, -{"lib/teiserver/coordinator/coordinator_parser.ex", :unknown_type}, -{"lib/teiserver/coordinator/coordinator_server.ex", :unknown_type}, -{"lib/teiserver/coordinator/coordinator_server.ex", :no_return}, -{"lib/teiserver/coordinator/coordinator_server.ex", :call}, -{"lib/teiserver/coordinator/spads_parser.ex", :unknown_type}, -{"lib/teiserver/coordinator/spads_parser.ex", :call}, -{"lib/teiserver/data/cache_user.ex", :pattern_match}, -{"lib/teiserver/data/cache_user.ex", :call}, -{"lib/teiserver/data/cache_user.ex", :no_return}, -{"lib/teiserver/data/cache_user.ex", :unused_fun}, -{"lib/teiserver/data/cache_user.ex", :unknown_type}, -{"lib/teiserver/data/cache_user.ex", :invalid_contract}, -{"lib/teiserver/data/client.ex", :unknown_type}, -{"lib/teiserver/data/client.ex", :no_return}, -{"lib/teiserver/data/lobby_id_server.ex", :unknown_type}, -{"lib/teiserver/data/matchmaking.ex", :unknown_type}, -{"lib/teiserver/data/matchmaking.ex", :no_return}, -{"lib/teiserver/data/matchmaking.ex", :call}, -{"lib/teiserver/data/matchmaking.ex", :invalid_contract}, -{"lib/teiserver/data/types.ex", :unknown_type}, -{"lib/teiserver/game.ex", :unknown_type}, -{"lib/teiserver/game/libs/achievement_type_lib.ex", :unknown_type}, -{"lib/teiserver/game/libs/lobby_policy_lib.ex", :unknown_type}, -{"lib/teiserver/game/libs/lobby_policy_lib.ex", :no_return}, -{"lib/teiserver/game/libs/lobby_policy_lib.ex", :call}, -{"lib/teiserver/game/libs/match_rating_lib.ex", :unknown_type}, -{"lib/teiserver/game/libs/queue_lib.ex", :unknown_type}, -{"lib/teiserver/game/libs/rating_log_lib.ex", :unknown_type}, -{"lib/teiserver/game/libs/rating_type_lib.ex", :unknown_type}, -{"lib/teiserver/game/libs/user_achievement_lib.ex", :unknown_type}, -{"lib/teiserver/game/schemas/achievement_type.ex", :unknown_type}, -{"lib/teiserver/game/schemas/lobby_policy.ex", :unknown_type}, -{"lib/teiserver/game/schemas/queue.ex", :unknown_type}, -{"lib/teiserver/game/schemas/rating_log.ex", :unknown_type}, -{"lib/teiserver/game/schemas/rating_type.ex", :unknown_type}, -{"lib/teiserver/game/schemas/user_achievement.ex", :unknown_type}, -{"lib/teiserver/game/servers/balancer_server.ex", :unknown_type}, -{"lib/teiserver/game/servers/lobby_policy_bot_server.ex", :unknown_type}, -{"lib/teiserver/game/servers/lobby_policy_bot_server.ex", :no_return}, -{"lib/teiserver/game/servers/lobby_policy_bot_server.ex", :pattern_match}, -{"lib/teiserver/game/servers/lobby_policy_organiser_server.ex", :unknown_type}, -{"lib/teiserver/game/servers/queue_room_server.ex", :call}, -{"lib/teiserver/game/servers/queue_room_server.ex", :unknown_type}, -{"lib/teiserver/game/servers/queue_wait_server.ex", :unknown_type}, -{"lib/teiserver/helpers/number_helper.ex", :unknown_type}, -{"lib/teiserver/helpers/query_helper.ex", :unknown_type}, -{"lib/teiserver/helpers/schema_helper.ex", :unknown_type}, -{"lib/teiserver/helpers/styling_helpers.ex", :unknown_type}, -{"lib/teiserver/libs/test_lib.ex", :call}, -{"lib/teiserver/libs/test_lib.ex", :unknown_type}, -{"lib/teiserver/libs/test_lib.ex", :no_return}, -{"lib/teiserver/libs/test_lib.ex", :pattern_match}, -{"lib/teiserver/libs/test_lib.ex", :unused_fun}, -{"lib/teiserver/lobby.ex", :no_return}, -{"lib/teiserver/lobby.ex", :unknown_type}, -{"lib/teiserver/lobby.ex", :call}, -{"lib/teiserver/lobby.ex", :pattern_match}, -{"lib/teiserver/lobby.ex", :exact_eq}, -{"lib/teiserver/lobby.ex", :invalid_contract}, -{"lib/teiserver/lobby/commands/explain_command.ex", :no_return}, -{"lib/teiserver/lobby/commands/explain_command.ex", :call}, -{"lib/teiserver/lobby/libs/chat_lib.ex", :unknown_type}, -{"lib/teiserver/lobby/libs/chat_lib.ex", :call}, -{"lib/teiserver/lobby/libs/chat_lib.ex", :no_return}, -{"lib/teiserver/lobby/libs/command_lib.ex", :unknown_type}, -{"lib/teiserver/lobby/libs/lobby_lib.ex", :unknown_type}, -{"lib/teiserver/lobby/libs/lobby_lib.ex", :no_return}, -{"lib/teiserver/lobby/servers/lobby_index_throttle.ex", :guard_fail}, -{"lib/teiserver/lobby/servers/lobby_server.ex", :unknown_type}, -{"lib/teiserver/logging.ex", :no_return}, -{"lib/teiserver/logging.ex", :call}, -{"lib/teiserver/logging.ex", :unknown_type}, -{"lib/teiserver/logging/lib/logging_helpers.ex", :unknown_type}, -{"lib/teiserver/logging/lib/logging_plug.ex", :unknown_type}, -{"lib/teiserver/logging/lib/logging_test_lib.ex", :unknown_type}, -{"lib/teiserver/logging/lib/logging_test_lib.ex", :call}, -{"lib/teiserver/logging/schemas/match_day_log.ex", :unknown_type}, -{"lib/teiserver/logging/schemas/match_month_log.ex", :unknown_type}, -{"lib/teiserver/logging/schemas/server_day_log.ex", :unknown_type}, -{"lib/teiserver/logging/schemas/server_minute_log.ex", :unknown_type}, -{"lib/teiserver/logging/schemas/server_month_log.ex", :unknown_type}, -{"lib/teiserver/logging/schemas/server_quarter_log.ex", :unknown_type}, -{"lib/teiserver/logging/schemas/server_week_log.ex", :unknown_type}, -{"lib/teiserver/logging/schemas/server_year_log.ex", :unknown_type}, -{"lib/teiserver/logging/schemas/user_activity_day_log.ex", :unknown_type}, -{"lib/teiserver/logging/tasks/aggregate_logs_task.ex", :no_return}, -{"lib/teiserver/logging/tasks/aggregate_logs_task.ex", :call}, -{"lib/teiserver/logging/tasks/aggregate_logs_task.ex", :unused_fun}, -{"lib/teiserver/logging/tasks/persist_server_day_task.ex", :call}, -{"lib/teiserver/logging/tasks/persist_server_day_task.ex", :invalid_contract}, -{"lib/teiserver/microblog.ex", :unknown_type}, -{"lib/teiserver/microblog.ex", :invalid_contract}, -{"lib/teiserver/microblog/libs/post_lib.ex", :unknown_type}, -{"lib/teiserver/microblog/libs/post_lib.ex", :invalid_contract}, -{"lib/teiserver/microblog/libs/post_tag_lib.ex", :unknown_type}, -{"lib/teiserver/microblog/libs/post_tag_lib.ex", :invalid_contract}, -{"lib/teiserver/microblog/libs/tag_lib.ex", :unknown_type}, -{"lib/teiserver/microblog/libs/user_preference_lib.ex", :unknown_type}, -{"lib/teiserver/microblog/queries/post_queries.ex", :unknown_type}, -{"lib/teiserver/microblog/queries/post_tag_queries.ex", :unknown_type}, -{"lib/teiserver/microblog/queries/tag_queries.ex", :unknown_type}, -{"lib/teiserver/microblog/queries/user_preference_queries.ex", :pattern_match}, -{"lib/teiserver/microblog/queries/user_preference_queries.ex", :unknown_type}, -{"lib/teiserver/microblog/schemas/post.ex", :unknown_type}, -{"lib/teiserver/microblog/schemas/post_tag.ex", :unknown_type}, -{"lib/teiserver/microblog/schemas/tag.ex", :unknown_type}, -{"lib/teiserver/microblog/schemas/user_preference.ex", :unknown_type}, -{"lib/teiserver/mix_tasks/fake_data.ex", :callback_info_missing}, -{"lib/teiserver/mix_tasks/fake_data.ex", :unused_fun}, -{"lib/teiserver/mix_tasks/fake_data.ex", :unknown_function}, -{"lib/teiserver/mix_tasks/fake_data.ex", :no_return}, -{"lib/teiserver/mix_tasks/fake_data.ex", :call}, -{"lib/teiserver/moderation.ex", :unknown_type}, -{"lib/teiserver/moderation.ex", :invalid_contract}, -{"lib/teiserver/moderation.ex", :call}, -{"lib/teiserver/moderation/libs/action_lib.ex", :unknown_type}, -{"lib/teiserver/moderation/libs/action_lib.ex", :pattern_match}, -{"lib/teiserver/moderation/libs/ban_lib.ex", :unknown_type}, -{"lib/teiserver/moderation/libs/proposal_lib.ex", :unknown_type}, -{"lib/teiserver/moderation/libs/proposal_vote_lib.ex", :unknown_type}, -{"lib/teiserver/moderation/libs/report_group_lib.ex", :unknown_type}, -{"lib/teiserver/moderation/libs/report_group_lib.ex", :call}, -{"lib/teiserver/moderation/libs/report_lib.ex", :unknown_type}, -{"lib/teiserver/moderation/libs/response_lib.ex", :unknown_type}, -{"lib/teiserver/moderation/libs/test_lib.ex", :unknown_type}, -{"lib/teiserver/moderation/queries/report_group_queries.ex", :unknown_type}, -{"lib/teiserver/moderation/reports/activity_report.ex", :invalid_contract}, -{"lib/teiserver/moderation/schemas/action.ex", :unknown_type}, -{"lib/teiserver/moderation/schemas/ban.ex", :unknown_type}, -{"lib/teiserver/moderation/schemas/proposal.ex", :unknown_type}, -{"lib/teiserver/moderation/schemas/proposal_vote.ex", :unknown_type}, -{"lib/teiserver/moderation/schemas/report.ex", :unknown_type}, -{"lib/teiserver/moderation/schemas/report_group.ex", :unknown_type}, -{"lib/teiserver/moderation/schemas/report_group_message.ex", :unknown_type}, -{"lib/teiserver/moderation/schemas/report_group_vote.ex", :unknown_type}, -{"lib/teiserver/moderation/schemas/response.ex", :unknown_type}, -{"lib/teiserver/protocols/spring/spring.ex", :unknown_type}, -{"lib/teiserver/protocols/spring/spring_auth_in.ex", :unknown_type}, -{"lib/teiserver/protocols/spring/spring_battle_in.ex", :unknown_type}, -{"lib/teiserver/protocols/spring/spring_battle_in.ex", :call}, -{"lib/teiserver/protocols/spring/spring_in.ex", :unknown_type}, -{"lib/teiserver/protocols/spring/spring_in.ex", :call}, -{"lib/teiserver/protocols/spring/spring_in.ex", :pattern_match}, -{"lib/teiserver/protocols/spring/spring_lobby_policy_in.ex", :unknown_type}, -{"lib/teiserver/protocols/spring/spring_out.ex", :unknown_type}, -{"lib/teiserver/protocols/spring/spring_out.ex", :call}, -{"lib/teiserver/protocols/spring/spring_out.ex", :no_return}, -{"lib/teiserver/protocols/spring/spring_system_in.ex", :unknown_type}, -{"lib/teiserver/protocols/spring/spring_telemetry_in.ex", :unknown_type}, -{"lib/teiserver/protocols/spring/spring_user_in.ex", :unknown_type}, -{"lib/teiserver/protocols/spring/spring_user_in.ex", :call}, -{"lib/teiserver/protocols/spring/spring_user_in.ex", :pattern_match}, -{"lib/teiserver/protocols/tachyon_json_ws/converters.ex", :unknown_type}, -{"lib/teiserver/protocols/tachyon_json_ws/handlers/lobby/join_request.ex", :no_return}, -{"lib/teiserver/protocols/tachyon_json_ws/handlers/lobby/join_request.ex", :call}, -{"lib/teiserver/protocols/tachyon_json_ws/handlers/lobby/list_lobbies_request.ex", :no_return}, -{"lib/teiserver/protocols/tachyon_json_ws/handlers/lobby/list_lobbies_request.ex", :call}, -{"lib/teiserver/protocols/tachyon_json_ws/handlers/lobby_host/create_request.ex", :pattern_match}, -{"lib/teiserver/protocols/tachyon_json_ws/handlers/system/disconnect_request.ex", :invalid_contract}, -{"lib/teiserver/protocols/tachyon_json_ws/handlers/system/no_command_error_request.ex", :invalid_contract}, -{"lib/teiserver/protocols/tachyon_json_ws/responses/account/whoami_response.ex", :unknown_type}, -{"lib/teiserver/protocols/tachyon_json_ws/responses/communication/received_direct_message_response.ex", :invalid_contract}, -{"lib/teiserver/protocols/tachyon_json_ws/responses/communication/received_direct_message_response.ex", :unknown_type}, -{"lib/teiserver/protocols/tachyon_json_ws/responses/communication/send_direct_message_response.ex", :unknown_type}, -{"lib/teiserver/protocols/tachyon_json_ws/responses/lobby_host/add_bot_response.ex", :invalid_contract}, -{"lib/teiserver/protocols/tachyon_json_ws/responses/lobby_host/close_response.ex", :invalid_contract}, -{"lib/teiserver/protocols/tachyon_json_ws/responses/lobby_host/create_response.ex", :invalid_contract}, -{"lib/teiserver/protocols/tachyon_json_ws/responses/lobby_host/end_battle_response.ex", :invalid_contract}, -{"lib/teiserver/protocols/tachyon_json_ws/responses/lobby_host/join_request_response.ex", :invalid_contract}, -{"lib/teiserver/protocols/tachyon_json_ws/responses/lobby_host/remove_bot_response.ex", :invalid_contract}, -{"lib/teiserver/protocols/tachyon_json_ws/responses/lobby_host/respond_to_join_request_response.ex", :invalid_contract}, -{"lib/teiserver/protocols/tachyon_json_ws/responses/lobby_host/start_battle_response.ex", :invalid_contract}, -{"lib/teiserver/protocols/tachyon_json_ws/responses/lobby_host/update_bot_response.ex", :invalid_contract}, -{"lib/teiserver/protocols/tachyon_json_ws/responses/lobby_host/updated_status_response.ex", :invalid_contract}, -{"lib/teiserver/protocols/tachyon_json_ws/responses/system/disconnect_response.ex", :invalid_contract}, -{"lib/teiserver/protocols/tachyon_json_ws/responses/system/error_response.ex", :invalid_contract}, -{"lib/teiserver/protocols/tachyon_json_ws/responses/system/ping_response.ex", :unknown_type}, -{"lib/teiserver/protocols/tachyon_json_ws/responses/telemetry/event_response.ex", :unknown_type}, -{"lib/teiserver/protocols/tachyon_json_ws/responses/telemetry/property_response.ex", :unknown_type}, -{"lib/teiserver/protocols/tachyon_json_ws/responses/user/updated_user_client_response.ex", :invalid_contract}, -{"lib/teiserver/protocols/tachyon_json_ws/tachyon_socket.ex", :pattern_match}, -{"lib/teiserver/protocols/tachyon_json_ws/tachyon_socket.ex", :callback_spec_type_mismatch}, -{"lib/teiserver/protocols/tachyon_json_ws/tachyon_socket.ex", :invalid_contract}, -{"lib/teiserver/protocols/tachyon_json_ws/tachyon_socket.ex", :unknown_type}, -{"lib/teiserver/protocols/tachyon_json_ws/tachyon_socket.ex", :unused_fun}, -{"lib/teiserver/protocols/tachyon_lib.ex", :unknown_type}, -{"lib/teiserver/protocols/tachyon_v1/auth_in.ex", :unknown_type}, -{"lib/teiserver/protocols/tachyon_v1/auth_in.ex", :call}, -{"lib/teiserver/protocols/tachyon_v1/auth_in.ex", :pattern_match}, -{"lib/teiserver/protocols/tachyon_v1/auth_out.ex", :unknown_type}, -{"lib/teiserver/protocols/tachyon_v1/client_in.ex", :unknown_type}, -{"lib/teiserver/protocols/tachyon_v1/client_out.ex", :unknown_type}, -{"lib/teiserver/protocols/tachyon_v1/communication_in.ex", :unknown_type}, -{"lib/teiserver/protocols/tachyon_v1/communication_out.ex", :unknown_type}, -{"lib/teiserver/protocols/tachyon_v1/config_in.ex", :unknown_type}, -{"lib/teiserver/protocols/tachyon_v1/config_out.ex", :unknown_type}, -{"lib/teiserver/protocols/tachyon_v1/config_out.ex", :call}, -{"lib/teiserver/protocols/tachyon_v1/config_out.ex", :no_return}, -{"lib/teiserver/protocols/tachyon_v1/lobby_host_in.ex", :unknown_type}, -{"lib/teiserver/protocols/tachyon_v1/lobby_host_out.ex", :unknown_type}, -{"lib/teiserver/protocols/tachyon_v1/lobby_host_out.ex", :call}, -{"lib/teiserver/protocols/tachyon_v1/lobby_in.ex", :unknown_type}, -{"lib/teiserver/protocols/tachyon_v1/lobby_in.ex", :call}, -{"lib/teiserver/protocols/tachyon_v1/lobby_in.ex", :pattern_match}, -{"lib/teiserver/protocols/tachyon_v1/lobby_out.ex", :unknown_type}, -{"lib/teiserver/protocols/tachyon_v1/lobby_out.ex", :call}, -{"lib/teiserver/protocols/tachyon_v1/matchmaking_in.ex", :unknown_type}, -{"lib/teiserver/protocols/tachyon_v1/matchmaking_in.ex", :pattern_match}, -{"lib/teiserver/protocols/tachyon_v1/matchmaking_in.ex", :pattern_match_cov}, -{"lib/teiserver/protocols/tachyon_v1/matchmaking_out.ex", :unknown_type}, -{"lib/teiserver/protocols/tachyon_v1/party_in.ex", :unknown_type}, -{"lib/teiserver/protocols/tachyon_v1/party_in.ex", :call}, -{"lib/teiserver/protocols/tachyon_v1/party_out.ex", :unknown_type}, -{"lib/teiserver/protocols/tachyon_v1/party_out.ex", :call}, -{"lib/teiserver/protocols/tachyon_v1/system_in.ex", :unknown_type}, -{"lib/teiserver/protocols/tachyon_v1/system_out.ex", :unknown_type}, -{"lib/teiserver/protocols/tachyon_v1/tachyon.ex", :unknown_type}, -{"lib/teiserver/protocols/tachyon_v1/tachyon_out.ex", :unknown_type}, -{"lib/teiserver/protocols/tachyon_v1/telemetry_in.ex", :unknown_type}, -{"lib/teiserver/protocols/tachyon_v1/user_in.ex", :unknown_type}, -{"lib/teiserver/protocols/tachyon_v1/user_in.ex", :call}, -{"lib/teiserver/protocols/tachyon_v1/user_out.ex", :unknown_type}, -{"lib/teiserver/servers/telemetry_server.ex", :unknown_type}, -{"lib/teiserver/tcp/spring/spring_tcp_server.ex", :call}, -{"lib/teiserver/tcp/spring/spring_tcp_server.ex", :no_return}, -{"lib/teiserver/tcp/spring/spring_tcp_server.ex", :invalid_contract}, -{"lib/teiserver/tcp/spring/spring_tcp_server.ex", :unknown_type}, -{"lib/teiserver/tcp/tachyon/tachyon_tcp_server.ex", :no_return}, -{"lib/teiserver/tcp/tachyon/tachyon_tcp_server.ex", :call}, -{"lib/teiserver/telemetry.ex", :unknown_type}, -{"lib/teiserver/telemetry.ex", :invalid_contract}, -{"lib/teiserver/telemetry/libs/anon_property_lib.ex", :unknown_type}, -{"lib/teiserver/telemetry/libs/complex_client_event_type_lib.ex", :invalid_contract}, -{"lib/teiserver/telemetry/libs/complex_lobby_event_lib.ex", :invalid_contract}, -{"lib/teiserver/telemetry/libs/complex_lobby_event_type_lib.ex", :invalid_contract}, -{"lib/teiserver/telemetry/libs/complex_match_event_lib.ex", :invalid_contract}, -{"lib/teiserver/telemetry/libs/complex_match_event_type_lib.ex", :invalid_contract}, -{"lib/teiserver/telemetry/libs/complex_server_event_lib.ex", :invalid_contract}, -{"lib/teiserver/telemetry/libs/complex_server_event_type_lib.ex", :invalid_contract}, -{"lib/teiserver/telemetry/libs/infolog_lib.ex", :unknown_type}, -{"lib/teiserver/telemetry/libs/property_type_lib.ex", :invalid_contract}, -{"lib/teiserver/telemetry/libs/simple_client_event_type_lib.ex", :invalid_contract}, -{"lib/teiserver/telemetry/libs/simple_lobby_event_type_lib.ex", :invalid_contract}, -{"lib/teiserver/telemetry/libs/simple_match_event_type_lib.ex", :invalid_contract}, -{"lib/teiserver/telemetry/libs/simple_server_event_type_lib.ex", :invalid_contract}, -{"lib/teiserver/telemetry/libs/telemetry_lib.ex", :unknown_type}, -{"lib/teiserver/telemetry/libs/user_property_lib.ex", :unknown_type}, -{"lib/teiserver/telemetry/queries/anon_property_queries.ex", :unknown_type}, -{"lib/teiserver/telemetry/queries/complex_anon_event_queries.ex", :unknown_type}, -{"lib/teiserver/telemetry/queries/complex_client_event_queries.ex", :unknown_type}, -{"lib/teiserver/telemetry/queries/complex_client_event_type_queries.ex", :unknown_type}, -{"lib/teiserver/telemetry/queries/complex_lobby_event_queries.ex", :unknown_type}, -{"lib/teiserver/telemetry/queries/complex_lobby_event_type_queries.ex", :unknown_type}, -{"lib/teiserver/telemetry/queries/complex_match_event_queries.ex", :unknown_type}, -{"lib/teiserver/telemetry/queries/complex_match_event_type_queries.ex", :unknown_type}, -{"lib/teiserver/telemetry/queries/complex_server_event_queries.ex", :unknown_type}, -{"lib/teiserver/telemetry/queries/complex_server_event_type_queries.ex", :unknown_type}, -{"lib/teiserver/telemetry/queries/property_type_queries.ex", :unknown_type}, -{"lib/teiserver/telemetry/queries/simple_anon_event_queries.ex", :unknown_type}, -{"lib/teiserver/telemetry/queries/simple_client_event_queries.ex", :unknown_type}, -{"lib/teiserver/telemetry/queries/simple_client_event_type_queries.ex", :unknown_type}, -{"lib/teiserver/telemetry/queries/simple_lobby_event_queries.ex", :unknown_type}, -{"lib/teiserver/telemetry/queries/simple_lobby_event_type_queries.ex", :unknown_type}, -{"lib/teiserver/telemetry/queries/simple_match_event_queries.ex", :unknown_type}, -{"lib/teiserver/telemetry/queries/simple_match_event_type_queries.ex", :unknown_type}, -{"lib/teiserver/telemetry/queries/simple_server_event_queries.ex", :unknown_type}, -{"lib/teiserver/telemetry/queries/simple_server_event_type_queries.ex", :unknown_type}, -{"lib/teiserver/telemetry/queries/user_property_queries.ex", :unknown_type}, -{"lib/teiserver/telemetry/schemas/anon_property.ex", :unknown_type}, -{"lib/teiserver/telemetry/schemas/complex_anon_event.ex", :unknown_type}, -{"lib/teiserver/telemetry/schemas/complex_client_event.ex", :unknown_type}, -{"lib/teiserver/telemetry/schemas/complex_client_event_type.ex", :unknown_type}, -{"lib/teiserver/telemetry/schemas/complex_lobby_event.ex", :unknown_type}, -{"lib/teiserver/telemetry/schemas/complex_lobby_event_type.ex", :unknown_type}, -{"lib/teiserver/telemetry/schemas/complex_match_event.ex", :unknown_type}, -{"lib/teiserver/telemetry/schemas/complex_match_event_type.ex", :unknown_type}, -{"lib/teiserver/telemetry/schemas/complex_server_event.ex", :unknown_type}, -{"lib/teiserver/telemetry/schemas/complex_server_event_type.ex", :unknown_type}, -{"lib/teiserver/telemetry/schemas/infolog.ex", :unknown_type}, -{"lib/teiserver/telemetry/schemas/property_types.ex", :unknown_type}, -{"lib/teiserver/telemetry/schemas/simple_anon_event.ex", :unknown_type}, -{"lib/teiserver/telemetry/schemas/simple_client_event.ex", :unknown_type}, -{"lib/teiserver/telemetry/schemas/simple_client_event_type.ex", :unknown_type}, -{"lib/teiserver/telemetry/schemas/simple_lobby_event.ex", :unknown_type}, -{"lib/teiserver/telemetry/schemas/simple_lobby_event_type.ex", :unknown_type}, -{"lib/teiserver/telemetry/schemas/simple_match_event.ex", :unknown_type}, -{"lib/teiserver/telemetry/schemas/simple_match_event_type.ex", :unknown_type}, -{"lib/teiserver/telemetry/schemas/simple_server_event.ex", :unknown_type}, -{"lib/teiserver/telemetry/schemas/simple_server_event_type.ex", :unknown_type}, -{"lib/teiserver/telemetry/schemas/user_property.ex", :unknown_type}, -{"lib/teiserver_web/controllers/account/security_controller.ex", :unknown_type}, -{"lib/teiserver_web/controllers/account/session_controller.ex", :unknown_type}, -{"lib/teiserver_web/controllers/admin/accolade_controller.ex", :unknown_type}, -{"lib/teiserver_web/controllers/admin/accolade_controller.ex", :no_return}, -{"lib/teiserver_web/controllers/admin/achievement_controller.ex", :unknown_type}, -{"lib/teiserver_web/controllers/admin/badge_type_controller.ex", :unknown_type}, -{"lib/teiserver_web/controllers/admin/chat_controller.ex", :unknown_type}, -{"lib/teiserver_web/controllers/admin/code_controller.ex", :unknown_type}, -{"lib/teiserver_web/controllers/admin/discord_channel_controller.ex", :unknown_type}, -{"lib/teiserver_web/controllers/admin/discord_channel_controller.ex", :pattern_match}, -{"lib/teiserver_web/controllers/admin/lobby_controller.ex", :no_return}, -{"lib/teiserver_web/controllers/admin/lobby_controller.ex", :call}, -{"lib/teiserver_web/controllers/admin/lobby_policy_controller.ex", :unknown_type}, -{"lib/teiserver_web/controllers/admin/match_controller.ex", :unknown_type}, -{"lib/teiserver_web/controllers/admin/text_callback_controller.ex", :unknown_type}, -{"lib/teiserver_web/controllers/admin/text_callback_controller.ex", :no_return}, -{"lib/teiserver_web/controllers/admin/text_callback_controller.ex", :call}, -{"lib/teiserver_web/controllers/admin/tool_controller.ex", :unknown_type}, -{"lib/teiserver_web/controllers/admin/tool_controller.ex", :no_return}, -{"lib/teiserver_web/controllers/admin/tool_controller.ex", :call}, -{"lib/teiserver_web/controllers/admin/user_controller.ex", :unknown_type}, -{"lib/teiserver_web/controllers/admin/user_controller.ex", :pattern_match}, -{"lib/teiserver_web/controllers/api/hailstorm_controller.ex", :pattern_match}, -{"lib/teiserver_web/controllers/api/hailstorm_controller.ex", :call}, -{"lib/teiserver_web/controllers/api/hailstorm_controller.ex", :no_return}, -{"lib/teiserver_web/controllers/api/hailstorm_controller.ex", :unknown_type}, -{"lib/teiserver_web/controllers/api/session_controller.ex", :unknown_type}, -{"lib/teiserver_web/controllers/api/session_controller.ex", :pattern_match}, -{"lib/teiserver_web/controllers/api/session_controller.ex", :call}, -{"lib/teiserver_web/controllers/api/spads_controller.ex", :call}, -{"lib/teiserver_web/controllers/battle/general_controller.ex", :unknown_type}, -{"lib/teiserver_web/controllers/battle/match_controller.ex", :unknown_type}, -{"lib/teiserver_web/controllers/battle/ratings_controller.ex", :unknown_type}, -{"lib/teiserver_web/controllers/game/queue_controller.ex", :unknown_type}, -{"lib/teiserver_web/controllers/general/general_controller.ex", :unknown_type}, -{"lib/teiserver_web/controllers/logging/aggregate_view_log_controller.ex", :unknown_type}, -{"lib/teiserver_web/controllers/logging/aggregate_view_log_controller.ex", :no_return}, -{"lib/teiserver_web/controllers/logging/audit_log_controller.ex", :unknown_type}, -{"lib/teiserver_web/controllers/logging/general_controller.ex", :unknown_type}, -{"lib/teiserver_web/controllers/logging/match_log_controller.ex", :call}, -{"lib/teiserver_web/controllers/logging/match_log_controller.ex", :no_return}, -{"lib/teiserver_web/controllers/logging/page_view_log_controller.ex", :unknown_type}, -{"lib/teiserver_web/controllers/moderation/action_controller.ex", :unknown_type}, -{"lib/teiserver_web/controllers/moderation/ban_controller.ex", :unknown_type}, -{"lib/teiserver_web/controllers/moderation/ban_controller.ex", :no_return}, -{"lib/teiserver_web/controllers/moderation/ban_controller.ex", :call}, -{"lib/teiserver_web/controllers/moderation/general_controller.ex", :unknown_type}, -{"lib/teiserver_web/controllers/moderation/proposal_controller.ex", :unknown_type}, -{"lib/teiserver_web/controllers/moderation/report_controller.ex", :unknown_type}, -{"lib/teiserver_web/controllers/report/report_controller.ex", :unknown_type}, -{"lib/teiserver_web/controllers/telemetry/complex_client_event_controller.ex", :no_return}, -{"lib/teiserver_web/controllers/telemetry/complex_client_event_controller.ex", :call}, -{"lib/teiserver_web/controllers/telemetry/complex_lobby_event_controller.ex", :no_return}, -{"lib/teiserver_web/controllers/telemetry/complex_lobby_event_controller.ex", :call}, -{"lib/teiserver_web/controllers/telemetry/complex_match_event_controller.ex", :no_return}, -{"lib/teiserver_web/controllers/telemetry/complex_match_event_controller.ex", :call}, -{"lib/teiserver_web/controllers/telemetry/complex_server_event_controller.ex", :no_return}, -{"lib/teiserver_web/controllers/telemetry/complex_server_event_controller.ex", :call}, -{"lib/teiserver_web/controllers/telemetry/simple_client_event_controller.ex", :no_return}, -{"lib/teiserver_web/controllers/telemetry/simple_client_event_controller.ex", :call}, -{"lib/teiserver_web/controllers/telemetry/simple_lobby_event_controller.ex", :no_return}, -{"lib/teiserver_web/controllers/telemetry/simple_lobby_event_controller.ex", :call}, -{"lib/teiserver_web/controllers/telemetry/simple_match_event_controller.ex", :no_return}, -{"lib/teiserver_web/controllers/telemetry/simple_match_event_controller.ex", :call}, -{"lib/teiserver_web/controllers/telemetry/simple_server_event_controller.ex", :no_return}, -{"lib/teiserver_web/controllers/telemetry/simple_server_event_controller.ex", :call}, -{"lib/teiserver_web/live/account/party/index.ex", :no_return}, -{"lib/teiserver_web/live/account/party/index.ex", :pattern_match}, -{"lib/teiserver_web/live/account/party/index.ex", :unused_fun}, -{"lib/teiserver_web/live/account/party/show.ex", :no_return}, -{"lib/teiserver_web/live/account/party/show.ex", :pattern_match}, -{"lib/teiserver_web/live/account/party/show.ex", :call}, -{"lib/teiserver_web/live/account/relationship/index.ex", :call}, -{"lib/teiserver_web/live/account/relationship/index.html.heex", :no_return}, -{"lib/teiserver_web/live/account/relationship/index.html.heex", :call}, -{"lib/teiserver_web/live/admin/chat/index.html.heex", :no_return}, -{"lib/teiserver_web/live/admin/chat/index.html.heex", :call}, -{"lib/teiserver_web/live/admin_dashboard/index.ex", :unknown_type}, -{"lib/teiserver_web/live/admin_dashboard/policy.ex", :unknown_type}, -{"lib/teiserver_web/live/battles/lobbies/index.ex", :guard_fail}, -{"lib/teiserver_web/live/battles/lobbies/index.ex", :exact_eq}, -{"lib/teiserver_web/live/battles/lobbies/show.ex", :exact_eq}, -{"lib/teiserver_web/live/battles/match/chat.ex", :no_return}, -{"lib/teiserver_web/live/battles/match/chat.ex", :call}, -{"lib/teiserver_web/live/battles/match/chat.html.heex", :no_return}, -{"lib/teiserver_web/live/battles/match/chat.html.heex", :call}, -{"lib/teiserver_web/live/battles/match/show.ex", :call}, -{"lib/teiserver_web/live/clients/show.ex", :call}, -{"lib/teiserver_web/live/clients/show.ex", :exact_eq}, -{"lib/teiserver_web/live/communication/chat/room.ex", :call}, -{"lib/teiserver_web/live/microblog/admin/post/post_form_component.ex", :call}, -{"lib/teiserver_web/live/microblog/admin/post/post_form_component.ex", :pattern_match}, -{"lib/teiserver_web/live/microblog/admin/tag/tag_form_component.ex", :pattern_match}, -{"lib/teiserver_web/live/microblog/blog/show.ex", :call}, -{"lib/teiserver_web/live/microblog/blog/show.html.heex", :call}, -{"lib/teiserver_web/live/microblog/microblog_components.ex", :call}, -{"lib/teiserver_web/live/tournament/index.ex", :exact_eq}, -{"lib/teiserver_web/live/tournament/show.ex", :exact_eq}, -{"lib/teiserver_web/plugs/cache_plug.ex", :call}, -{"lib/teiserver_web/router.ex", :no_return}, -{"lib/teiserver_web/templates/account/session/edit.html.heex", :call}, -{"lib/teiserver_web/templates/admin/accolade/edit.html.heex", :call}, -{"lib/teiserver_web/templates/admin/accolade/new.html.heex", :call}, -{"lib/teiserver_web/templates/admin/accolade/show.html.heex", :call}, -{"lib/teiserver_web/templates/admin/chat/index.html.heex", :no_return}, -{"lib/teiserver_web/templates/admin/chat/index.html.heex", :call}, -{"lib/teiserver_web/templates/admin/lobby/lobby_chat.html.heex", :no_return}, -{"lib/teiserver_web/templates/admin/lobby/lobby_chat.html.heex", :call}, -{"lib/teiserver_web/templates/admin/lobby/server_chat.html.heex", :no_return}, -{"lib/teiserver_web/templates/admin/lobby/server_chat.html.heex", :call}, -{"lib/teiserver_web/templates/admin/user/full_chat.html.heex", :no_return}, -{"lib/teiserver_web/templates/admin/user/full_chat.html.heex", :call}, -{"lib/teiserver_web/templates/battle/match/index.html.heex", :no_return}, -{"lib/teiserver_web/templates/battle/match/index.html.heex", :call}, -{"lib/teiserver_web/templates/battle/match/ratings.html.heex", :no_return}, -{"lib/teiserver_web/templates/battle/match/ratings.html.heex", :call}, -{"lib/teiserver_web/views/admin/code_view.ex", :invalid_contract}, + {"lib/gen_server.ex", :callback_info_missing}, + {"lib/nostrum/consumer.ex", :unknown_function}, + {"lib/teiserver.ex", :unknown_type}, + {"lib/teiserver.ex", :invalid_contract}, + {"lib/teiserver/account.ex", :unknown_type}, + {"lib/teiserver/account.ex", :invalid_contract}, + {"lib/teiserver/account.ex", :call}, + {"lib/teiserver/account.ex", :no_return}, + {"lib/teiserver/account/accolades/accolade_bot_server.ex", :unknown_type}, + {"lib/teiserver/account/accolades/accolade_bot_server.ex", :no_return}, + {"lib/teiserver/account/accolades/accolade_bot_server.ex", :call}, + {"lib/teiserver/account/accolades/accolade_chat_server.ex", :no_return}, + {"lib/teiserver/account/accolades/accolade_chat_server.ex", :call}, + {"lib/teiserver/account/accolades/accolade_chat_server.ex", :unknown_type}, + {"lib/teiserver/account/caches/user_cache_lib.ex", :no_return}, + {"lib/teiserver/account/caches/user_cache_lib.ex", :call}, + {"lib/teiserver/account/caches/user_cache_lib.ex", :unknown_type}, + {"lib/teiserver/account/libs/accolade_lib.ex", :unknown_type}, + {"lib/teiserver/account/libs/accolade_lib.ex", :no_return}, + {"lib/teiserver/account/libs/accolade_lib.ex", :call}, + {"lib/teiserver/account/libs/auth_lib.ex", :unknown_type}, + {"lib/teiserver/account/libs/badge_type_lib.ex", :unknown_type}, + {"lib/teiserver/account/libs/client_lib.ex", :unknown_type}, + {"lib/teiserver/account/libs/friend_lib.ex", :unknown_type}, + {"lib/teiserver/account/libs/friend_request_lib.ex", :unknown_type}, + {"lib/teiserver/account/libs/party_lib.ex", :no_return}, + {"lib/teiserver/account/libs/party_lib.ex", :call}, + {"lib/teiserver/account/libs/rating_lib.ex", :unknown_type}, + {"lib/teiserver/account/libs/relationship_lib.ex", :unknown_type}, + {"lib/teiserver/account/libs/smurf_key_lib.ex", :unknown_type}, + {"lib/teiserver/account/libs/smurf_key_type_lib.ex", :unknown_type}, + {"lib/teiserver/account/libs/user_lib.ex", :unknown_type}, + {"lib/teiserver/account/libs/user_lib.ex", :call}, + {"lib/teiserver/account/libs/user_stat_lib.ex", :unknown_type}, + {"lib/teiserver/account/plugs/auth_plug.ex", :call}, + {"lib/teiserver/account/queries/friend_queries.ex", :unknown_type}, + {"lib/teiserver/account/queries/friend_request_queries.ex", :unknown_type}, + {"lib/teiserver/account/queries/relationship_queries.ex", :unknown_type}, + {"lib/teiserver/account/queries/user_queries.ex", :unknown_type}, + {"lib/teiserver/account/reports/ban_evasion_report.ex", :invalid_contract}, + {"lib/teiserver/account/reports/growth_report.ex", :callback_spec_type_mismatch}, + {"lib/teiserver/account/reports/growth_report.ex", :no_return}, + {"lib/teiserver/account/reports/growth_report.ex", :call}, + {"lib/teiserver/account/reports/leaderboard_report.ex", :invalid_contract}, + {"lib/teiserver/account/reports/mapping_report.ex", :invalid_contract}, + {"lib/teiserver/account/reports/open_skill_report.ex", :invalid_contract}, + {"lib/teiserver/account/reports/population_report.ex", :no_return}, + {"lib/teiserver/account/reports/population_report.ex", :call}, + {"lib/teiserver/account/reports/population_report.ex", :pattern_match}, + {"lib/teiserver/account/reports/population_report.ex", :invalid_contract}, + {"lib/teiserver/account/reports/population_report.ex", :unused_fun}, + {"lib/teiserver/account/reports/records_report.ex", :invalid_contract}, + {"lib/teiserver/account/reports/retention_report.ex", :invalid_contract}, + {"lib/teiserver/account/reports/time_compare_report.ex", :invalid_contract}, + {"lib/teiserver/account/reports/time_compare_report.ex", :call}, + {"lib/teiserver/account/reports/tournament_report.ex", :invalid_contract}, + {"lib/teiserver/account/reports/user_age_report.ex", :invalid_contract}, + {"lib/teiserver/account/reports/week_on_week_report.ex", :invalid_contract}, + {"lib/teiserver/account/schemas/accolade.ex", :unknown_type}, + {"lib/teiserver/account/schemas/badge_type.ex", :unknown_type}, + {"lib/teiserver/account/schemas/friend.ex", :unknown_type}, + {"lib/teiserver/account/schemas/friend_request.ex", :unknown_type}, + {"lib/teiserver/account/schemas/relationship.ex", :unknown_type}, + {"lib/teiserver/account/schemas/smurf_key.ex", :unknown_type}, + {"lib/teiserver/account/schemas/smurf_key_type.ex", :unknown_type}, + {"lib/teiserver/account/servers/client_server.ex", :unknown_type}, + {"lib/teiserver/account/servers/login_throttle_server.ex", :unknown_type}, + {"lib/teiserver/account/servers/party_server.ex", :no_return}, + {"lib/teiserver/account/servers/party_server.ex", :call}, + {"lib/teiserver/account/servers/party_server.ex", :unknown_type}, + {"lib/teiserver/account/tasks/merge_accounts_task.ex", :no_return}, + {"lib/teiserver/account/tasks/merge_accounts_task.ex", :pattern_match}, + {"lib/teiserver/account/tasks/recalculate_user_cache_task.ex", :invalid_contract}, + {"lib/teiserver/battle.ex", :unknown_type}, + {"lib/teiserver/battle.ex", :call}, + {"lib/teiserver/battle.ex", :no_return}, + {"lib/teiserver/battle/api_auth.ex", :unknown_type}, + {"lib/teiserver/battle/balance/balance_types.ex", :unknown_type}, + {"lib/teiserver/battle/balance/cheeky_switcher_smart.ex", :unknown_type}, + {"lib/teiserver/battle/balance/cheeky_switcher_smart.ex", :call}, + {"lib/teiserver/battle/balance/cheeky_switcher_smart.ex", :no_return}, + {"lib/teiserver/battle/balance/cheeky_switcher_smart.ex", :pattern_match}, + {"lib/teiserver/battle/balance/cheeky_switcher_smart.ex", :unused_fun}, + {"lib/teiserver/battle/balance/loser_picks.ex", :invalid_contract}, + {"lib/teiserver/battle/libs/balance_lib.ex", :call}, + {"lib/teiserver/battle/libs/balance_lib.ex", :unknown_type}, + {"lib/teiserver/battle/libs/balance_lib.ex", :no_return}, + {"lib/teiserver/battle/libs/match_lib.ex", :unknown_type}, + {"lib/teiserver/battle/mix_tasks/compare_balance_algorithms_task.ex", :callback_info_missing}, + {"lib/teiserver/battle/schemas/match.ex", :unknown_type}, + {"lib/teiserver/battle/servers/match_monitor_server.ex", :unknown_type}, + {"lib/teiserver/battle/servers/match_monitor_server.ex", :call}, + {"lib/teiserver/battle/servers/match_monitor_server.ex", :no_return}, + {"lib/teiserver/battle/tasks/post_match_process_task.ex", :no_return}, + {"lib/teiserver/battle/tasks/post_match_process_task.ex", :call}, + {"lib/teiserver/battle/tasks/post_match_process_task.ex", :unused_fun}, + {"lib/teiserver/benchmark/benchmark_task.ex", :callback_info_missing}, + {"lib/teiserver/bridge/bridge_server.ex", :unknown_type}, + {"lib/teiserver/bridge/bridge_server.ex", :unknown_function}, + {"lib/teiserver/bridge/bridge_server.ex", :call}, + {"lib/teiserver/bridge/bridge_server.ex", :unused_fun}, + {"lib/teiserver/bridge/bridge_server.ex", :no_return}, + {"lib/teiserver/bridge/chat_commands.ex", :unknown_type}, + {"lib/teiserver/bridge/chat_commands.ex", :call}, + {"lib/teiserver/bridge/chat_commands.ex", :unknown_function}, + {"lib/teiserver/bridge/command_lib.ex", :unknown_type}, + {"lib/teiserver/bridge/commands/bridge_command_behaviour.ex", :unknown_type}, + {"lib/teiserver/bridge/commands/textcb_command.ex", :unknown_type}, + {"lib/teiserver/bridge/discord_bridge_bot.ex", :guard_fail}, + {"lib/teiserver/bridge/discord_bridge_bot.ex", :unknown_function}, + {"lib/teiserver/bridge/discord_bridge_bot.ex", :unknown_type}, + {"lib/teiserver/bridge/discord_bridge_bot.ex", :no_return}, + {"lib/teiserver/bridge/discord_bridge_bot.ex", :call}, + {"lib/teiserver/bridge/message_commands.ex", :unknown_type}, + {"lib/teiserver/bridge/message_commands.ex", :call}, + {"lib/teiserver/bridge/message_commands.ex", :pattern_match}, + {"lib/teiserver/bridge/message_commands.ex", :pattern_match_cov}, + {"lib/teiserver/bridge/message_commands.ex", :unknown_function}, + {"lib/teiserver/chat.ex", :unknown_type}, + {"lib/teiserver/chat/chat_room_cache.ex", :unknown_type}, + {"lib/teiserver/chat/chat_room_cache.ex", :call}, + {"lib/teiserver/chat/chat_room_cache.ex", :no_return}, + {"lib/teiserver/chat/libs/direct_message_lib.ex", :unknown_type}, + {"lib/teiserver/chat/libs/lobby_message_lib.ex", :unknown_type}, + {"lib/teiserver/chat/libs/party_message_lib.ex", :unknown_type}, + {"lib/teiserver/chat/libs/room_message_lib.ex", :unknown_type}, + {"lib/teiserver/chat/schemas/direct_message.ex", :unknown_type}, + {"lib/teiserver/chat/schemas/lobby_message.ex", :unknown_type}, + {"lib/teiserver/chat/schemas/party_message.ex", :unknown_type}, + {"lib/teiserver/chat/schemas/room_message.ex", :unknown_type}, + {"lib/teiserver/clans.ex", :unknown_type}, + {"lib/teiserver/clans/libs/clan_invite_lib.ex", :unknown_type}, + {"lib/teiserver/clans/libs/clan_lib.ex", :unknown_type}, + {"lib/teiserver/clans/libs/clan_membership_lib.ex", :unknown_type}, + {"lib/teiserver/communication.ex", :unknown_type}, + {"lib/teiserver/communication.ex", :invalid_contract}, + {"lib/teiserver/communication/libs/discord_channel_lib.ex", :unknown_type}, + {"lib/teiserver/communication/libs/discord_channel_lib.ex", :unknown_function}, + {"lib/teiserver/communication/libs/text_callback_lib.ex", :unknown_type}, + {"lib/teiserver/communication/queries/discord_channel_queries.ex", :unknown_type}, + {"lib/teiserver/communication/schemas/discord_channel.ex", :unknown_type}, + {"lib/teiserver/communication/schemas/text_callback.ex", :unknown_type}, + {"lib/teiserver/config.ex", :unknown_type}, + {"lib/teiserver/coordinator.ex", :pattern_match}, + {"lib/teiserver/coordinator.ex", :unknown_type}, + {"lib/teiserver/coordinator.ex", :no_return}, + {"lib/teiserver/coordinator.ex", :call}, + {"lib/teiserver/coordinator/automod_server.ex", :invalid_contract}, + {"lib/teiserver/coordinator/automod_server.ex", :unknown_type}, + {"lib/teiserver/coordinator/automod_server.ex", :no_return}, + {"lib/teiserver/coordinator/automod_server.ex", :call}, + {"lib/teiserver/coordinator/consul_commands.ex", :unknown_type}, + {"lib/teiserver/coordinator/consul_commands.ex", :call}, + {"lib/teiserver/coordinator/consul_commands.ex", :no_return}, + {"lib/teiserver/coordinator/consul_server.ex", :unknown_type}, + {"lib/teiserver/coordinator/consul_server.ex", :no_return}, + {"lib/teiserver/coordinator/consul_server.ex", :call}, + {"lib/teiserver/coordinator/coordinator_commands.ex", :unknown_type}, + {"lib/teiserver/coordinator/coordinator_commands.ex", :call}, + {"lib/teiserver/coordinator/coordinator_lib.ex", :unknown_type}, + {"lib/teiserver/coordinator/coordinator_parser.ex", :unknown_type}, + {"lib/teiserver/coordinator/coordinator_server.ex", :unknown_type}, + {"lib/teiserver/coordinator/coordinator_server.ex", :no_return}, + {"lib/teiserver/coordinator/coordinator_server.ex", :call}, + {"lib/teiserver/coordinator/spads_parser.ex", :unknown_type}, + {"lib/teiserver/coordinator/spads_parser.ex", :call}, + {"lib/teiserver/data/cache_user.ex", :pattern_match}, + {"lib/teiserver/data/cache_user.ex", :call}, + {"lib/teiserver/data/cache_user.ex", :no_return}, + {"lib/teiserver/data/cache_user.ex", :unused_fun}, + {"lib/teiserver/data/cache_user.ex", :unknown_type}, + {"lib/teiserver/data/cache_user.ex", :invalid_contract}, + {"lib/teiserver/data/client.ex", :unknown_type}, + {"lib/teiserver/data/client.ex", :no_return}, + {"lib/teiserver/data/lobby_id_server.ex", :unknown_type}, + {"lib/teiserver/data/matchmaking.ex", :unknown_type}, + {"lib/teiserver/data/matchmaking.ex", :no_return}, + {"lib/teiserver/data/matchmaking.ex", :call}, + {"lib/teiserver/data/matchmaking.ex", :invalid_contract}, + {"lib/teiserver/data/types.ex", :unknown_type}, + {"lib/teiserver/game.ex", :unknown_type}, + {"lib/teiserver/game/libs/achievement_type_lib.ex", :unknown_type}, + {"lib/teiserver/game/libs/lobby_policy_lib.ex", :unknown_type}, + {"lib/teiserver/game/libs/lobby_policy_lib.ex", :no_return}, + {"lib/teiserver/game/libs/lobby_policy_lib.ex", :call}, + {"lib/teiserver/game/libs/match_rating_lib.ex", :unknown_type}, + {"lib/teiserver/game/libs/queue_lib.ex", :unknown_type}, + {"lib/teiserver/game/libs/rating_log_lib.ex", :unknown_type}, + {"lib/teiserver/game/libs/rating_type_lib.ex", :unknown_type}, + {"lib/teiserver/game/libs/user_achievement_lib.ex", :unknown_type}, + {"lib/teiserver/game/schemas/achievement_type.ex", :unknown_type}, + {"lib/teiserver/game/schemas/lobby_policy.ex", :unknown_type}, + {"lib/teiserver/game/schemas/queue.ex", :unknown_type}, + {"lib/teiserver/game/schemas/rating_log.ex", :unknown_type}, + {"lib/teiserver/game/schemas/rating_type.ex", :unknown_type}, + {"lib/teiserver/game/schemas/user_achievement.ex", :unknown_type}, + {"lib/teiserver/game/servers/balancer_server.ex", :unknown_type}, + {"lib/teiserver/game/servers/lobby_policy_bot_server.ex", :unknown_type}, + {"lib/teiserver/game/servers/lobby_policy_bot_server.ex", :no_return}, + {"lib/teiserver/game/servers/lobby_policy_bot_server.ex", :pattern_match}, + {"lib/teiserver/game/servers/lobby_policy_organiser_server.ex", :unknown_type}, + {"lib/teiserver/game/servers/queue_room_server.ex", :call}, + {"lib/teiserver/game/servers/queue_room_server.ex", :unknown_type}, + {"lib/teiserver/game/servers/queue_wait_server.ex", :unknown_type}, + {"lib/teiserver/helpers/number_helper.ex", :unknown_type}, + {"lib/teiserver/helpers/query_helper.ex", :unknown_type}, + {"lib/teiserver/helpers/schema_helper.ex", :unknown_type}, + {"lib/teiserver/helpers/styling_helpers.ex", :unknown_type}, + {"lib/teiserver/libs/test_lib.ex", :call}, + {"lib/teiserver/libs/test_lib.ex", :unknown_type}, + {"lib/teiserver/libs/test_lib.ex", :no_return}, + {"lib/teiserver/libs/test_lib.ex", :pattern_match}, + {"lib/teiserver/libs/test_lib.ex", :unused_fun}, + {"lib/teiserver/lobby.ex", :no_return}, + {"lib/teiserver/lobby.ex", :unknown_type}, + {"lib/teiserver/lobby.ex", :call}, + {"lib/teiserver/lobby.ex", :pattern_match}, + {"lib/teiserver/lobby.ex", :exact_eq}, + {"lib/teiserver/lobby.ex", :invalid_contract}, + {"lib/teiserver/lobby/commands/explain_command.ex", :no_return}, + {"lib/teiserver/lobby/commands/explain_command.ex", :call}, + {"lib/teiserver/lobby/libs/chat_lib.ex", :unknown_type}, + {"lib/teiserver/lobby/libs/chat_lib.ex", :call}, + {"lib/teiserver/lobby/libs/chat_lib.ex", :no_return}, + {"lib/teiserver/lobby/libs/command_lib.ex", :unknown_type}, + {"lib/teiserver/lobby/libs/lobby_lib.ex", :unknown_type}, + {"lib/teiserver/lobby/libs/lobby_lib.ex", :no_return}, + {"lib/teiserver/lobby/servers/lobby_index_throttle.ex", :guard_fail}, + {"lib/teiserver/lobby/servers/lobby_server.ex", :unknown_type}, + {"lib/teiserver/logging.ex", :no_return}, + {"lib/teiserver/logging.ex", :call}, + {"lib/teiserver/logging.ex", :unknown_type}, + {"lib/teiserver/logging/lib/logging_helpers.ex", :unknown_type}, + {"lib/teiserver/logging/lib/logging_plug.ex", :unknown_type}, + {"lib/teiserver/logging/lib/logging_test_lib.ex", :unknown_type}, + {"lib/teiserver/logging/lib/logging_test_lib.ex", :call}, + {"lib/teiserver/logging/schemas/match_day_log.ex", :unknown_type}, + {"lib/teiserver/logging/schemas/match_month_log.ex", :unknown_type}, + {"lib/teiserver/logging/schemas/server_day_log.ex", :unknown_type}, + {"lib/teiserver/logging/schemas/server_minute_log.ex", :unknown_type}, + {"lib/teiserver/logging/schemas/server_month_log.ex", :unknown_type}, + {"lib/teiserver/logging/schemas/server_quarter_log.ex", :unknown_type}, + {"lib/teiserver/logging/schemas/server_week_log.ex", :unknown_type}, + {"lib/teiserver/logging/schemas/server_year_log.ex", :unknown_type}, + {"lib/teiserver/logging/schemas/user_activity_day_log.ex", :unknown_type}, + {"lib/teiserver/logging/tasks/aggregate_logs_task.ex", :no_return}, + {"lib/teiserver/logging/tasks/aggregate_logs_task.ex", :call}, + {"lib/teiserver/logging/tasks/aggregate_logs_task.ex", :unused_fun}, + {"lib/teiserver/logging/tasks/persist_server_day_task.ex", :call}, + {"lib/teiserver/logging/tasks/persist_server_day_task.ex", :invalid_contract}, + {"lib/teiserver/microblog.ex", :unknown_type}, + {"lib/teiserver/microblog.ex", :invalid_contract}, + {"lib/teiserver/microblog/libs/post_lib.ex", :unknown_type}, + {"lib/teiserver/microblog/libs/post_lib.ex", :invalid_contract}, + {"lib/teiserver/microblog/libs/post_tag_lib.ex", :unknown_type}, + {"lib/teiserver/microblog/libs/post_tag_lib.ex", :invalid_contract}, + {"lib/teiserver/microblog/libs/tag_lib.ex", :unknown_type}, + {"lib/teiserver/microblog/libs/user_preference_lib.ex", :unknown_type}, + {"lib/teiserver/microblog/queries/post_queries.ex", :unknown_type}, + {"lib/teiserver/microblog/queries/post_tag_queries.ex", :unknown_type}, + {"lib/teiserver/microblog/queries/tag_queries.ex", :unknown_type}, + {"lib/teiserver/microblog/queries/user_preference_queries.ex", :pattern_match}, + {"lib/teiserver/microblog/queries/user_preference_queries.ex", :unknown_type}, + {"lib/teiserver/microblog/schemas/post.ex", :unknown_type}, + {"lib/teiserver/microblog/schemas/post_tag.ex", :unknown_type}, + {"lib/teiserver/microblog/schemas/tag.ex", :unknown_type}, + {"lib/teiserver/microblog/schemas/user_preference.ex", :unknown_type}, + {"lib/teiserver/mix_tasks/fake_data.ex", :callback_info_missing}, + {"lib/teiserver/mix_tasks/fake_data.ex", :unused_fun}, + {"lib/teiserver/mix_tasks/fake_data.ex", :unknown_function}, + {"lib/teiserver/mix_tasks/fake_data.ex", :no_return}, + {"lib/teiserver/mix_tasks/fake_data.ex", :call}, + {"lib/teiserver/moderation.ex", :unknown_type}, + {"lib/teiserver/moderation.ex", :invalid_contract}, + {"lib/teiserver/moderation.ex", :call}, + {"lib/teiserver/moderation/libs/action_lib.ex", :unknown_type}, + {"lib/teiserver/moderation/libs/action_lib.ex", :pattern_match}, + {"lib/teiserver/moderation/libs/ban_lib.ex", :unknown_type}, + {"lib/teiserver/moderation/libs/proposal_lib.ex", :unknown_type}, + {"lib/teiserver/moderation/libs/proposal_vote_lib.ex", :unknown_type}, + {"lib/teiserver/moderation/libs/report_group_lib.ex", :unknown_type}, + {"lib/teiserver/moderation/libs/report_group_lib.ex", :call}, + {"lib/teiserver/moderation/libs/report_lib.ex", :unknown_type}, + {"lib/teiserver/moderation/libs/response_lib.ex", :unknown_type}, + {"lib/teiserver/moderation/libs/test_lib.ex", :unknown_type}, + {"lib/teiserver/moderation/queries/report_group_queries.ex", :unknown_type}, + {"lib/teiserver/moderation/reports/activity_report.ex", :invalid_contract}, + {"lib/teiserver/moderation/schemas/action.ex", :unknown_type}, + {"lib/teiserver/moderation/schemas/ban.ex", :unknown_type}, + {"lib/teiserver/moderation/schemas/proposal.ex", :unknown_type}, + {"lib/teiserver/moderation/schemas/proposal_vote.ex", :unknown_type}, + {"lib/teiserver/moderation/schemas/report.ex", :unknown_type}, + {"lib/teiserver/moderation/schemas/report_group.ex", :unknown_type}, + {"lib/teiserver/moderation/schemas/report_group_message.ex", :unknown_type}, + {"lib/teiserver/moderation/schemas/report_group_vote.ex", :unknown_type}, + {"lib/teiserver/moderation/schemas/response.ex", :unknown_type}, + {"lib/teiserver/protocols/spring/spring.ex", :unknown_type}, + {"lib/teiserver/protocols/spring/spring_auth_in.ex", :unknown_type}, + {"lib/teiserver/protocols/spring/spring_battle_in.ex", :unknown_type}, + {"lib/teiserver/protocols/spring/spring_battle_in.ex", :call}, + {"lib/teiserver/protocols/spring/spring_in.ex", :unknown_type}, + {"lib/teiserver/protocols/spring/spring_in.ex", :call}, + {"lib/teiserver/protocols/spring/spring_in.ex", :pattern_match}, + {"lib/teiserver/protocols/spring/spring_lobby_policy_in.ex", :unknown_type}, + {"lib/teiserver/protocols/spring/spring_out.ex", :unknown_type}, + {"lib/teiserver/protocols/spring/spring_out.ex", :call}, + {"lib/teiserver/protocols/spring/spring_out.ex", :no_return}, + {"lib/teiserver/protocols/spring/spring_system_in.ex", :unknown_type}, + {"lib/teiserver/protocols/spring/spring_telemetry_in.ex", :unknown_type}, + {"lib/teiserver/protocols/spring/spring_user_in.ex", :unknown_type}, + {"lib/teiserver/protocols/spring/spring_user_in.ex", :call}, + {"lib/teiserver/protocols/spring/spring_user_in.ex", :pattern_match}, + {"lib/teiserver/protocols/tachyon_json_ws/converters.ex", :unknown_type}, + {"lib/teiserver/protocols/tachyon_json_ws/handlers/lobby/join_request.ex", :no_return}, + {"lib/teiserver/protocols/tachyon_json_ws/handlers/lobby/join_request.ex", :call}, + {"lib/teiserver/protocols/tachyon_json_ws/handlers/lobby/list_lobbies_request.ex", :no_return}, + {"lib/teiserver/protocols/tachyon_json_ws/handlers/lobby/list_lobbies_request.ex", :call}, + {"lib/teiserver/protocols/tachyon_json_ws/handlers/lobby_host/create_request.ex", + :pattern_match}, + {"lib/teiserver/protocols/tachyon_json_ws/handlers/system/disconnect_request.ex", + :invalid_contract}, + {"lib/teiserver/protocols/tachyon_json_ws/handlers/system/no_command_error_request.ex", + :invalid_contract}, + {"lib/teiserver/protocols/tachyon_json_ws/responses/account/whoami_response.ex", :unknown_type}, + {"lib/teiserver/protocols/tachyon_json_ws/responses/communication/received_direct_message_response.ex", + :invalid_contract}, + {"lib/teiserver/protocols/tachyon_json_ws/responses/communication/received_direct_message_response.ex", + :unknown_type}, + {"lib/teiserver/protocols/tachyon_json_ws/responses/communication/send_direct_message_response.ex", + :unknown_type}, + {"lib/teiserver/protocols/tachyon_json_ws/responses/lobby_host/add_bot_response.ex", + :invalid_contract}, + {"lib/teiserver/protocols/tachyon_json_ws/responses/lobby_host/close_response.ex", + :invalid_contract}, + {"lib/teiserver/protocols/tachyon_json_ws/responses/lobby_host/create_response.ex", + :invalid_contract}, + {"lib/teiserver/protocols/tachyon_json_ws/responses/lobby_host/end_battle_response.ex", + :invalid_contract}, + {"lib/teiserver/protocols/tachyon_json_ws/responses/lobby_host/join_request_response.ex", + :invalid_contract}, + {"lib/teiserver/protocols/tachyon_json_ws/responses/lobby_host/remove_bot_response.ex", + :invalid_contract}, + {"lib/teiserver/protocols/tachyon_json_ws/responses/lobby_host/respond_to_join_request_response.ex", + :invalid_contract}, + {"lib/teiserver/protocols/tachyon_json_ws/responses/lobby_host/start_battle_response.ex", + :invalid_contract}, + {"lib/teiserver/protocols/tachyon_json_ws/responses/lobby_host/update_bot_response.ex", + :invalid_contract}, + {"lib/teiserver/protocols/tachyon_json_ws/responses/lobby_host/updated_status_response.ex", + :invalid_contract}, + {"lib/teiserver/protocols/tachyon_json_ws/responses/system/disconnect_response.ex", + :invalid_contract}, + {"lib/teiserver/protocols/tachyon_json_ws/responses/system/error_response.ex", + :invalid_contract}, + {"lib/teiserver/protocols/tachyon_json_ws/responses/system/ping_response.ex", :unknown_type}, + {"lib/teiserver/protocols/tachyon_json_ws/responses/telemetry/event_response.ex", + :unknown_type}, + {"lib/teiserver/protocols/tachyon_json_ws/responses/telemetry/property_response.ex", + :unknown_type}, + {"lib/teiserver/protocols/tachyon_json_ws/responses/user/updated_user_client_response.ex", + :invalid_contract}, + {"lib/teiserver/protocols/tachyon_json_ws/tachyon_socket.ex", :pattern_match}, + {"lib/teiserver/protocols/tachyon_json_ws/tachyon_socket.ex", :callback_spec_type_mismatch}, + {"lib/teiserver/protocols/tachyon_json_ws/tachyon_socket.ex", :invalid_contract}, + {"lib/teiserver/protocols/tachyon_json_ws/tachyon_socket.ex", :unknown_type}, + {"lib/teiserver/protocols/tachyon_json_ws/tachyon_socket.ex", :unused_fun}, + {"lib/teiserver/protocols/tachyon_lib.ex", :unknown_type}, + {"lib/teiserver/protocols/tachyon_v1/auth_in.ex", :unknown_type}, + {"lib/teiserver/protocols/tachyon_v1/auth_in.ex", :call}, + {"lib/teiserver/protocols/tachyon_v1/auth_in.ex", :pattern_match}, + {"lib/teiserver/protocols/tachyon_v1/auth_out.ex", :unknown_type}, + {"lib/teiserver/protocols/tachyon_v1/client_in.ex", :unknown_type}, + {"lib/teiserver/protocols/tachyon_v1/client_out.ex", :unknown_type}, + {"lib/teiserver/protocols/tachyon_v1/communication_in.ex", :unknown_type}, + {"lib/teiserver/protocols/tachyon_v1/communication_out.ex", :unknown_type}, + {"lib/teiserver/protocols/tachyon_v1/config_in.ex", :unknown_type}, + {"lib/teiserver/protocols/tachyon_v1/config_out.ex", :unknown_type}, + {"lib/teiserver/protocols/tachyon_v1/config_out.ex", :call}, + {"lib/teiserver/protocols/tachyon_v1/config_out.ex", :no_return}, + {"lib/teiserver/protocols/tachyon_v1/lobby_host_in.ex", :unknown_type}, + {"lib/teiserver/protocols/tachyon_v1/lobby_host_out.ex", :unknown_type}, + {"lib/teiserver/protocols/tachyon_v1/lobby_host_out.ex", :call}, + {"lib/teiserver/protocols/tachyon_v1/lobby_in.ex", :unknown_type}, + {"lib/teiserver/protocols/tachyon_v1/lobby_in.ex", :call}, + {"lib/teiserver/protocols/tachyon_v1/lobby_in.ex", :pattern_match}, + {"lib/teiserver/protocols/tachyon_v1/lobby_out.ex", :unknown_type}, + {"lib/teiserver/protocols/tachyon_v1/lobby_out.ex", :call}, + {"lib/teiserver/protocols/tachyon_v1/matchmaking_in.ex", :unknown_type}, + {"lib/teiserver/protocols/tachyon_v1/matchmaking_in.ex", :pattern_match}, + {"lib/teiserver/protocols/tachyon_v1/matchmaking_in.ex", :pattern_match_cov}, + {"lib/teiserver/protocols/tachyon_v1/matchmaking_out.ex", :unknown_type}, + {"lib/teiserver/protocols/tachyon_v1/party_in.ex", :unknown_type}, + {"lib/teiserver/protocols/tachyon_v1/party_in.ex", :call}, + {"lib/teiserver/protocols/tachyon_v1/party_out.ex", :unknown_type}, + {"lib/teiserver/protocols/tachyon_v1/party_out.ex", :call}, + {"lib/teiserver/protocols/tachyon_v1/system_in.ex", :unknown_type}, + {"lib/teiserver/protocols/tachyon_v1/system_out.ex", :unknown_type}, + {"lib/teiserver/protocols/tachyon_v1/tachyon.ex", :unknown_type}, + {"lib/teiserver/protocols/tachyon_v1/tachyon_out.ex", :unknown_type}, + {"lib/teiserver/protocols/tachyon_v1/telemetry_in.ex", :unknown_type}, + {"lib/teiserver/protocols/tachyon_v1/user_in.ex", :unknown_type}, + {"lib/teiserver/protocols/tachyon_v1/user_in.ex", :call}, + {"lib/teiserver/protocols/tachyon_v1/user_out.ex", :unknown_type}, + {"lib/teiserver/servers/telemetry_server.ex", :unknown_type}, + {"lib/teiserver/tcp/spring/spring_tcp_server.ex", :call}, + {"lib/teiserver/tcp/spring/spring_tcp_server.ex", :no_return}, + {"lib/teiserver/tcp/spring/spring_tcp_server.ex", :invalid_contract}, + {"lib/teiserver/tcp/spring/spring_tcp_server.ex", :unknown_type}, + {"lib/teiserver/tcp/tachyon/tachyon_tcp_server.ex", :no_return}, + {"lib/teiserver/tcp/tachyon/tachyon_tcp_server.ex", :call}, + {"lib/teiserver/telemetry.ex", :unknown_type}, + {"lib/teiserver/telemetry.ex", :invalid_contract}, + {"lib/teiserver/telemetry/libs/anon_property_lib.ex", :unknown_type}, + {"lib/teiserver/telemetry/libs/complex_client_event_type_lib.ex", :invalid_contract}, + {"lib/teiserver/telemetry/libs/complex_lobby_event_lib.ex", :invalid_contract}, + {"lib/teiserver/telemetry/libs/complex_lobby_event_type_lib.ex", :invalid_contract}, + {"lib/teiserver/telemetry/libs/complex_match_event_lib.ex", :invalid_contract}, + {"lib/teiserver/telemetry/libs/complex_match_event_type_lib.ex", :invalid_contract}, + {"lib/teiserver/telemetry/libs/complex_server_event_lib.ex", :invalid_contract}, + {"lib/teiserver/telemetry/libs/complex_server_event_type_lib.ex", :invalid_contract}, + {"lib/teiserver/telemetry/libs/infolog_lib.ex", :unknown_type}, + {"lib/teiserver/telemetry/libs/property_type_lib.ex", :invalid_contract}, + {"lib/teiserver/telemetry/libs/simple_client_event_type_lib.ex", :invalid_contract}, + {"lib/teiserver/telemetry/libs/simple_lobby_event_type_lib.ex", :invalid_contract}, + {"lib/teiserver/telemetry/libs/simple_match_event_type_lib.ex", :invalid_contract}, + {"lib/teiserver/telemetry/libs/simple_server_event_type_lib.ex", :invalid_contract}, + {"lib/teiserver/telemetry/libs/telemetry_lib.ex", :unknown_type}, + {"lib/teiserver/telemetry/libs/user_property_lib.ex", :unknown_type}, + {"lib/teiserver/telemetry/queries/anon_property_queries.ex", :unknown_type}, + {"lib/teiserver/telemetry/queries/complex_anon_event_queries.ex", :unknown_type}, + {"lib/teiserver/telemetry/queries/complex_client_event_queries.ex", :unknown_type}, + {"lib/teiserver/telemetry/queries/complex_client_event_type_queries.ex", :unknown_type}, + {"lib/teiserver/telemetry/queries/complex_lobby_event_queries.ex", :unknown_type}, + {"lib/teiserver/telemetry/queries/complex_lobby_event_type_queries.ex", :unknown_type}, + {"lib/teiserver/telemetry/queries/complex_match_event_queries.ex", :unknown_type}, + {"lib/teiserver/telemetry/queries/complex_match_event_type_queries.ex", :unknown_type}, + {"lib/teiserver/telemetry/queries/complex_server_event_queries.ex", :unknown_type}, + {"lib/teiserver/telemetry/queries/complex_server_event_type_queries.ex", :unknown_type}, + {"lib/teiserver/telemetry/queries/property_type_queries.ex", :unknown_type}, + {"lib/teiserver/telemetry/queries/simple_anon_event_queries.ex", :unknown_type}, + {"lib/teiserver/telemetry/queries/simple_client_event_queries.ex", :unknown_type}, + {"lib/teiserver/telemetry/queries/simple_client_event_type_queries.ex", :unknown_type}, + {"lib/teiserver/telemetry/queries/simple_lobby_event_queries.ex", :unknown_type}, + {"lib/teiserver/telemetry/queries/simple_lobby_event_type_queries.ex", :unknown_type}, + {"lib/teiserver/telemetry/queries/simple_match_event_queries.ex", :unknown_type}, + {"lib/teiserver/telemetry/queries/simple_match_event_type_queries.ex", :unknown_type}, + {"lib/teiserver/telemetry/queries/simple_server_event_queries.ex", :unknown_type}, + {"lib/teiserver/telemetry/queries/simple_server_event_type_queries.ex", :unknown_type}, + {"lib/teiserver/telemetry/queries/user_property_queries.ex", :unknown_type}, + {"lib/teiserver/telemetry/schemas/anon_property.ex", :unknown_type}, + {"lib/teiserver/telemetry/schemas/complex_anon_event.ex", :unknown_type}, + {"lib/teiserver/telemetry/schemas/complex_client_event.ex", :unknown_type}, + {"lib/teiserver/telemetry/schemas/complex_client_event_type.ex", :unknown_type}, + {"lib/teiserver/telemetry/schemas/complex_lobby_event.ex", :unknown_type}, + {"lib/teiserver/telemetry/schemas/complex_lobby_event_type.ex", :unknown_type}, + {"lib/teiserver/telemetry/schemas/complex_match_event.ex", :unknown_type}, + {"lib/teiserver/telemetry/schemas/complex_match_event_type.ex", :unknown_type}, + {"lib/teiserver/telemetry/schemas/complex_server_event.ex", :unknown_type}, + {"lib/teiserver/telemetry/schemas/complex_server_event_type.ex", :unknown_type}, + {"lib/teiserver/telemetry/schemas/infolog.ex", :unknown_type}, + {"lib/teiserver/telemetry/schemas/property_types.ex", :unknown_type}, + {"lib/teiserver/telemetry/schemas/simple_anon_event.ex", :unknown_type}, + {"lib/teiserver/telemetry/schemas/simple_client_event.ex", :unknown_type}, + {"lib/teiserver/telemetry/schemas/simple_client_event_type.ex", :unknown_type}, + {"lib/teiserver/telemetry/schemas/simple_lobby_event.ex", :unknown_type}, + {"lib/teiserver/telemetry/schemas/simple_lobby_event_type.ex", :unknown_type}, + {"lib/teiserver/telemetry/schemas/simple_match_event.ex", :unknown_type}, + {"lib/teiserver/telemetry/schemas/simple_match_event_type.ex", :unknown_type}, + {"lib/teiserver/telemetry/schemas/simple_server_event.ex", :unknown_type}, + {"lib/teiserver/telemetry/schemas/simple_server_event_type.ex", :unknown_type}, + {"lib/teiserver/telemetry/schemas/user_property.ex", :unknown_type}, + {"lib/teiserver_web/controllers/account/security_controller.ex", :unknown_type}, + {"lib/teiserver_web/controllers/account/session_controller.ex", :unknown_type}, + {"lib/teiserver_web/controllers/admin/accolade_controller.ex", :unknown_type}, + {"lib/teiserver_web/controllers/admin/accolade_controller.ex", :no_return}, + {"lib/teiserver_web/controllers/admin/achievement_controller.ex", :unknown_type}, + {"lib/teiserver_web/controllers/admin/badge_type_controller.ex", :unknown_type}, + {"lib/teiserver_web/controllers/admin/chat_controller.ex", :unknown_type}, + {"lib/teiserver_web/controllers/admin/code_controller.ex", :unknown_type}, + {"lib/teiserver_web/controllers/admin/discord_channel_controller.ex", :unknown_type}, + {"lib/teiserver_web/controllers/admin/discord_channel_controller.ex", :pattern_match}, + {"lib/teiserver_web/controllers/admin/lobby_controller.ex", :no_return}, + {"lib/teiserver_web/controllers/admin/lobby_controller.ex", :call}, + {"lib/teiserver_web/controllers/admin/lobby_policy_controller.ex", :unknown_type}, + {"lib/teiserver_web/controllers/admin/match_controller.ex", :unknown_type}, + {"lib/teiserver_web/controllers/admin/text_callback_controller.ex", :unknown_type}, + {"lib/teiserver_web/controllers/admin/text_callback_controller.ex", :no_return}, + {"lib/teiserver_web/controllers/admin/text_callback_controller.ex", :call}, + {"lib/teiserver_web/controllers/admin/tool_controller.ex", :unknown_type}, + {"lib/teiserver_web/controllers/admin/tool_controller.ex", :no_return}, + {"lib/teiserver_web/controllers/admin/tool_controller.ex", :call}, + {"lib/teiserver_web/controllers/admin/user_controller.ex", :unknown_type}, + {"lib/teiserver_web/controllers/admin/user_controller.ex", :pattern_match}, + {"lib/teiserver_web/controllers/api/hailstorm_controller.ex", :pattern_match}, + {"lib/teiserver_web/controllers/api/hailstorm_controller.ex", :call}, + {"lib/teiserver_web/controllers/api/hailstorm_controller.ex", :no_return}, + {"lib/teiserver_web/controllers/api/hailstorm_controller.ex", :unknown_type}, + {"lib/teiserver_web/controllers/api/session_controller.ex", :unknown_type}, + {"lib/teiserver_web/controllers/api/session_controller.ex", :pattern_match}, + {"lib/teiserver_web/controllers/api/session_controller.ex", :call}, + {"lib/teiserver_web/controllers/api/spads_controller.ex", :call}, + {"lib/teiserver_web/controllers/battle/general_controller.ex", :unknown_type}, + {"lib/teiserver_web/controllers/battle/match_controller.ex", :unknown_type}, + {"lib/teiserver_web/controllers/battle/ratings_controller.ex", :unknown_type}, + {"lib/teiserver_web/controllers/game/queue_controller.ex", :unknown_type}, + {"lib/teiserver_web/controllers/general/general_controller.ex", :unknown_type}, + {"lib/teiserver_web/controllers/logging/aggregate_view_log_controller.ex", :unknown_type}, + {"lib/teiserver_web/controllers/logging/aggregate_view_log_controller.ex", :no_return}, + {"lib/teiserver_web/controllers/logging/audit_log_controller.ex", :unknown_type}, + {"lib/teiserver_web/controllers/logging/general_controller.ex", :unknown_type}, + {"lib/teiserver_web/controllers/logging/match_log_controller.ex", :call}, + {"lib/teiserver_web/controllers/logging/match_log_controller.ex", :no_return}, + {"lib/teiserver_web/controllers/logging/page_view_log_controller.ex", :unknown_type}, + {"lib/teiserver_web/controllers/moderation/action_controller.ex", :unknown_type}, + {"lib/teiserver_web/controllers/moderation/ban_controller.ex", :unknown_type}, + {"lib/teiserver_web/controllers/moderation/ban_controller.ex", :no_return}, + {"lib/teiserver_web/controllers/moderation/ban_controller.ex", :call}, + {"lib/teiserver_web/controllers/moderation/general_controller.ex", :unknown_type}, + {"lib/teiserver_web/controllers/moderation/proposal_controller.ex", :unknown_type}, + {"lib/teiserver_web/controllers/moderation/report_controller.ex", :unknown_type}, + {"lib/teiserver_web/controllers/report/report_controller.ex", :unknown_type}, + {"lib/teiserver_web/controllers/telemetry/complex_client_event_controller.ex", :no_return}, + {"lib/teiserver_web/controllers/telemetry/complex_client_event_controller.ex", :call}, + {"lib/teiserver_web/controllers/telemetry/complex_lobby_event_controller.ex", :no_return}, + {"lib/teiserver_web/controllers/telemetry/complex_lobby_event_controller.ex", :call}, + {"lib/teiserver_web/controllers/telemetry/complex_match_event_controller.ex", :no_return}, + {"lib/teiserver_web/controllers/telemetry/complex_match_event_controller.ex", :call}, + {"lib/teiserver_web/controllers/telemetry/complex_server_event_controller.ex", :no_return}, + {"lib/teiserver_web/controllers/telemetry/complex_server_event_controller.ex", :call}, + {"lib/teiserver_web/controllers/telemetry/simple_client_event_controller.ex", :no_return}, + {"lib/teiserver_web/controllers/telemetry/simple_client_event_controller.ex", :call}, + {"lib/teiserver_web/controllers/telemetry/simple_lobby_event_controller.ex", :no_return}, + {"lib/teiserver_web/controllers/telemetry/simple_lobby_event_controller.ex", :call}, + {"lib/teiserver_web/controllers/telemetry/simple_match_event_controller.ex", :no_return}, + {"lib/teiserver_web/controllers/telemetry/simple_match_event_controller.ex", :call}, + {"lib/teiserver_web/controllers/telemetry/simple_server_event_controller.ex", :no_return}, + {"lib/teiserver_web/controllers/telemetry/simple_server_event_controller.ex", :call}, + {"lib/teiserver_web/live/account/party/index.ex", :no_return}, + {"lib/teiserver_web/live/account/party/index.ex", :pattern_match}, + {"lib/teiserver_web/live/account/party/index.ex", :unused_fun}, + {"lib/teiserver_web/live/account/party/show.ex", :no_return}, + {"lib/teiserver_web/live/account/party/show.ex", :pattern_match}, + {"lib/teiserver_web/live/account/party/show.ex", :call}, + {"lib/teiserver_web/live/account/relationship/index.ex", :call}, + {"lib/teiserver_web/live/account/relationship/index.html.heex", :no_return}, + {"lib/teiserver_web/live/account/relationship/index.html.heex", :call}, + {"lib/teiserver_web/live/admin/chat/index.html.heex", :no_return}, + {"lib/teiserver_web/live/admin/chat/index.html.heex", :call}, + {"lib/teiserver_web/live/admin_dashboard/index.ex", :unknown_type}, + {"lib/teiserver_web/live/admin_dashboard/policy.ex", :unknown_type}, + {"lib/teiserver_web/live/battles/lobbies/index.ex", :guard_fail}, + {"lib/teiserver_web/live/battles/lobbies/index.ex", :exact_eq}, + {"lib/teiserver_web/live/battles/lobbies/show.ex", :exact_eq}, + {"lib/teiserver_web/live/battles/match/chat.ex", :no_return}, + {"lib/teiserver_web/live/battles/match/chat.ex", :call}, + {"lib/teiserver_web/live/battles/match/chat.html.heex", :no_return}, + {"lib/teiserver_web/live/battles/match/chat.html.heex", :call}, + {"lib/teiserver_web/live/battles/match/show.ex", :call}, + {"lib/teiserver_web/live/clients/show.ex", :call}, + {"lib/teiserver_web/live/clients/show.ex", :exact_eq}, + {"lib/teiserver_web/live/communication/chat/room.ex", :call}, + {"lib/teiserver_web/live/microblog/admin/post/post_form_component.ex", :call}, + {"lib/teiserver_web/live/microblog/admin/post/post_form_component.ex", :pattern_match}, + {"lib/teiserver_web/live/microblog/admin/tag/tag_form_component.ex", :pattern_match}, + {"lib/teiserver_web/live/microblog/blog/show.ex", :call}, + {"lib/teiserver_web/live/microblog/blog/show.html.heex", :call}, + {"lib/teiserver_web/live/microblog/microblog_components.ex", :call}, + {"lib/teiserver_web/live/tournament/index.ex", :exact_eq}, + {"lib/teiserver_web/live/tournament/show.ex", :exact_eq}, + {"lib/teiserver_web/plugs/cache_plug.ex", :call}, + {"lib/teiserver_web/router.ex", :no_return}, + {"lib/teiserver_web/templates/account/session/edit.html.heex", :call}, + {"lib/teiserver_web/templates/admin/accolade/edit.html.heex", :call}, + {"lib/teiserver_web/templates/admin/accolade/new.html.heex", :call}, + {"lib/teiserver_web/templates/admin/accolade/show.html.heex", :call}, + {"lib/teiserver_web/templates/admin/chat/index.html.heex", :no_return}, + {"lib/teiserver_web/templates/admin/chat/index.html.heex", :call}, + {"lib/teiserver_web/templates/admin/lobby/lobby_chat.html.heex", :no_return}, + {"lib/teiserver_web/templates/admin/lobby/lobby_chat.html.heex", :call}, + {"lib/teiserver_web/templates/admin/lobby/server_chat.html.heex", :no_return}, + {"lib/teiserver_web/templates/admin/lobby/server_chat.html.heex", :call}, + {"lib/teiserver_web/templates/admin/user/full_chat.html.heex", :no_return}, + {"lib/teiserver_web/templates/admin/user/full_chat.html.heex", :call}, + {"lib/teiserver_web/templates/battle/match/index.html.heex", :no_return}, + {"lib/teiserver_web/templates/battle/match/index.html.heex", :call}, + {"lib/teiserver_web/templates/battle/match/ratings.html.heex", :no_return}, + {"lib/teiserver_web/templates/battle/match/ratings.html.heex", :call}, + {"lib/teiserver_web/views/admin/code_view.ex", :invalid_contract} ] diff --git a/config/runtime.exs b/config/runtime.exs index cc8596331..0c64106de 100644 --- a/config/runtime.exs +++ b/config/runtime.exs @@ -43,7 +43,8 @@ if config_env() == :prod do config :teiserver, Teiserver.Setup, key: Teiserver.ConfigHelpers.get_env("TEI_SETUP_ROOT_KEY", nil) - enable_discord_bridge = Teiserver.ConfigHelpers.get_env("TEI_ENABLE_DISCORD_BRIDGE", true, :bool) + enable_discord_bridge = + Teiserver.ConfigHelpers.get_env("TEI_ENABLE_DISCORD_BRIDGE", true, :bool) config :teiserver, Teiserver, game_name: "Beyond All Reason", diff --git a/lib/teiserver/account/libs/role_lib.ex b/lib/teiserver/account/libs/role_lib.ex index b30820d4b..97605eb9e 100644 --- a/lib/teiserver/account/libs/role_lib.ex +++ b/lib/teiserver/account/libs/role_lib.ex @@ -259,7 +259,8 @@ defmodule Teiserver.Account.RoleLib do end def allowed_role_management("Admin") do - staff_roles() ++ community_roles() ++ privileged_roles() ++ allowed_role_management("Moderator") + staff_roles() ++ + community_roles() ++ privileged_roles() ++ allowed_role_management("Moderator") end def allowed_role_management("Moderator") do diff --git a/lib/teiserver/account/libs/user_lib.ex b/lib/teiserver/account/libs/user_lib.ex index e3cc72c36..dd0acbd7f 100644 --- a/lib/teiserver/account/libs/user_lib.ex +++ b/lib/teiserver/account/libs/user_lib.ex @@ -361,10 +361,12 @@ defmodule Teiserver.Account.UserLib do defp can_login(user) do cond do Teiserver.CacheUser.is_restricted?(user.id, ["Login"]) -> - {:error, "Your account is currently suspended. Check the suspension's status at https://discord.gg/beyond-all-reason -> #moderation-bot"} + {:error, + "Your account is currently suspended. Check the suspension's status at https://discord.gg/beyond-all-reason -> #moderation-bot"} user.smurf_of_id != nil -> - {:error, "Alt account detected. Please log in using your original account instead. If you're not sure what that account is or have trouble accessing it, please contact the moderation team at https://discord.gg/beyond-all-reason -> #open-ticket"} + {:error, + "Alt account detected. Please log in using your original account instead. If you're not sure what that account is or have trouble accessing it, please contact the moderation team at https://discord.gg/beyond-all-reason -> #open-ticket"} true -> :ok diff --git a/lib/teiserver/battle/balance/balance_types.ex b/lib/teiserver/battle/balance/balance_types.ex index c51154697..47a1690ca 100644 --- a/lib/teiserver/battle/balance/balance_types.ex +++ b/lib/teiserver/battle/balance/balance_types.ex @@ -14,11 +14,11 @@ defmodule Teiserver.Battle.Balance.BalanceTypes do } @type group() :: %{ - members: [T.userid()], - ratings: [rating_value()], - group_rating: rating_value(), - count: non_neg_integer() - } + members: [T.userid()], + ratings: [rating_value()], + group_rating: rating_value(), + count: non_neg_integer() + } @type expanded_group_or_pair() :: expanded_group() | {expanded_group(), expanded_group()} @type algorithm_result :: map() diff --git a/lib/teiserver/battle/balance/cheeky_switcher_smart.ex b/lib/teiserver/battle/balance/cheeky_switcher_smart.ex index cbfa1d059..0f91475b3 100644 --- a/lib/teiserver/battle/balance/cheeky_switcher_smart.ex +++ b/lib/teiserver/battle/balance/cheeky_switcher_smart.ex @@ -33,7 +33,7 @@ defmodule Teiserver.Battle.Balance.CheekySwitcherSmart do @spec perform([BT.expanded_group_or_pair()], non_neg_integer(), list()) :: BT.algorithm_result() def perform(raw_groups, team_count, opts) do - groups_with_names = Enum.map(raw_groups, fn x-> Map.drop(x,[:ranks]) end) + groups_with_names = Enum.map(raw_groups, fn x -> Map.drop(x, [:ranks]) end) {teams, logs} = do_cheeky_switcher(groups_with_names, team_count, opts, []) diff --git a/lib/teiserver/battle/balance/split_one_chevs_types.ex b/lib/teiserver/battle/balance/split_one_chevs_types.ex index 8a5f202e9..9644893fb 100644 --- a/lib/teiserver/battle/balance/split_one_chevs_types.ex +++ b/lib/teiserver/battle/balance/split_one_chevs_types.ex @@ -7,7 +7,7 @@ defmodule Teiserver.Battle.Balance.SplitOneChevsTypes do member_id: any() } @type team :: %{ - members: [member], - team_id: integer() - } + members: [member], + team_id: integer() + } end diff --git a/lib/teiserver/battle/libs/balance_lib.ex b/lib/teiserver/battle/libs/balance_lib.ex index ca95a5ecc..8e0ea8b45 100644 --- a/lib/teiserver/battle/libs/balance_lib.ex +++ b/lib/teiserver/battle/libs/balance_lib.ex @@ -164,7 +164,8 @@ defmodule Teiserver.Battle.BalanceLib do # Only take keys we need defp clean_groups(groups) do - groups |> Enum.map(fn x-> + groups + |> Enum.map(fn x -> Map.take(x, ~w(members count group_rating ratings)a) end) end @@ -179,7 +180,7 @@ defmodule Teiserver.Battle.BalanceLib do true -> balance_result.teams |> Map.new(fn {team_id, groups} -> - {team_id, Enum.reverse(clean_groups((groups)))} + {team_id, Enum.reverse(clean_groups(groups))} end) end @@ -541,7 +542,6 @@ defmodule Teiserver.Battle.BalanceLib do get_user_rating_value(userid, rating_type_id) end - # Used to get the rating value of the user for internal balance purposes which might be # different from public/reporting @spec get_user_balance_rating_value(T.userid(), String.t() | non_neg_integer()) :: diff --git a/lib/teiserver/battle/servers/match_monitor_server.ex b/lib/teiserver/battle/servers/match_monitor_server.ex index 91a0c2508..94c7c364f 100644 --- a/lib/teiserver/battle/servers/match_monitor_server.ex +++ b/lib/teiserver/battle/servers/match_monitor_server.ex @@ -153,7 +153,10 @@ defmodule Teiserver.Battle.MatchMonitorServer do if match_id do game_time = int_parse(game_time) Telemetry.log_simple_match_event(userid, match_id, event_type_name, game_time) - Logger.info("match-event: Stored <#{username}> <#{event_type_name}> <#{game_time}> userid #{userid} match_id #{match_id}") + + Logger.info( + "match-event: Stored <#{username}> <#{event_type_name}> <#{game_time}> userid #{userid} match_id #{match_id}" + ) else Logger.warning("match-event: Cannot get match_id of userid of #{username}") end @@ -253,13 +256,14 @@ defmodule Teiserver.Battle.MatchMonitorServer do [_all, username, _user_num, to, msg] -> host = Client.get_client_by_id(from_id) user = CacheUser.get_user_by_name(username) + if host == nil do Logger.error("No host found for from_id: #{from_id} for message #{to}:#{msg}") + # Optionally, handle the case here, such as by sending a message back to the user or taking other corrective actions. # Just returning {:noreply, state} for now. {:noreply, state} else - case to do "d" -> # We don't persist this as it's already persisted elsewhere @@ -284,6 +288,7 @@ defmodule Teiserver.Battle.MatchMonitorServer do {:liveview_lobby_chat, :say, user.id, "s: #{msg}"} ) end + {:noreply, state} end @@ -337,7 +342,9 @@ defmodule Teiserver.Battle.MatchMonitorServer do defp handle_json_msg(%{"username" => username, "GPU" => _} = contents, from_id) do case CacheUser.get_user_by_name(username) do nil -> - Logger.warning("No username on handle_json_msg: #{username} - #{Kernel.inspect(contents)}") + Logger.warning( + "No username on handle_json_msg: #{username} - #{Kernel.inspect(contents)}" + ) :ok diff --git a/lib/teiserver/battle/tasks/seasonal_uncertainty_reset_task.ex b/lib/teiserver/battle/tasks/seasonal_uncertainty_reset_task.ex index 7473937e9..00ccb0add 100644 --- a/lib/teiserver/battle/tasks/seasonal_uncertainty_reset_task.ex +++ b/lib/teiserver/battle/tasks/seasonal_uncertainty_reset_task.ex @@ -26,37 +26,37 @@ defmodule Teiserver.Battle.SeasonalUncertaintyResetTask do end defp reset_rating(existing, _new_uncertainty, new_last_updated) do - # Use the greater of the existing uncertainty or the minimum value (5.0) - new_uncertainty = max(existing.uncertainty, 5.0) - - new_rating_value = BalanceLib.calculate_rating_value(existing.skill, new_uncertainty) - - new_leaderboard_rating = - BalanceLib.calculate_leaderboard_rating(existing.skill, new_uncertainty) - - Account.update_rating(existing, %{ - rating_value: new_rating_value, - uncertainty: new_uncertainty, - leaderboard_rating: new_leaderboard_rating, - last_updated: new_last_updated - }) - - log_params = %{ - user_id: existing.user_id, - rating_type_id: existing.rating_type_id, - match_id: nil, - inserted_at: new_last_updated, - value: %{ - reason: "Seasonal reset", - rating_value: new_rating_value, - skill: existing.skill, - uncertainty: new_uncertainty, - rating_value_change: new_rating_value - existing.rating_value, - skill_change: 0, - uncertainty_change: new_uncertainty - existing.uncertainty - } - } - - {:ok, _} = Game.create_rating_log(log_params) - end + # Use the greater of the existing uncertainty or the minimum value (5.0) + new_uncertainty = max(existing.uncertainty, 5.0) + + new_rating_value = BalanceLib.calculate_rating_value(existing.skill, new_uncertainty) + + new_leaderboard_rating = + BalanceLib.calculate_leaderboard_rating(existing.skill, new_uncertainty) + + Account.update_rating(existing, %{ + rating_value: new_rating_value, + uncertainty: new_uncertainty, + leaderboard_rating: new_leaderboard_rating, + last_updated: new_last_updated + }) + + log_params = %{ + user_id: existing.user_id, + rating_type_id: existing.rating_type_id, + match_id: nil, + inserted_at: new_last_updated, + value: %{ + reason: "Seasonal reset", + rating_value: new_rating_value, + skill: existing.skill, + uncertainty: new_uncertainty, + rating_value_change: new_rating_value - existing.rating_value, + skill_change: 0, + uncertainty_change: new_uncertainty - existing.uncertainty + } + } + + {:ok, _} = Game.create_rating_log(log_params) + end end diff --git a/lib/teiserver/coordinator/consul_server.ex b/lib/teiserver/coordinator/consul_server.ex index 3567cf309..861ad906c 100644 --- a/lib/teiserver/coordinator/consul_server.ex +++ b/lib/teiserver/coordinator/consul_server.ex @@ -375,7 +375,7 @@ defmodule Teiserver.Coordinator.ConsulServer do {:noreply, state} end - @doc""" + @doc """ This method handles state when all players have left the lobby """ def handle_info( @@ -387,10 +387,11 @@ defmodule Teiserver.Coordinator.ConsulServer do # Everyone left the lobby # Restore some settings to default if new_player_count == 0 do - new_state = %{state | - minimum_rating_to_play: 0, - maximum_rating_to_play: 1000, - balance_algorithm: @default_balance_algorithm + new_state = %{ + state + | minimum_rating_to_play: 0, + maximum_rating_to_play: 1000, + balance_algorithm: @default_balance_algorithm } {:noreply, new_state} diff --git a/lib/teiserver/game/libs/match_rating_lib.ex b/lib/teiserver/game/libs/match_rating_lib.ex index 483c475f5..afc34c41d 100644 --- a/lib/teiserver/game/libs/match_rating_lib.ex +++ b/lib/teiserver/game/libs/match_rating_lib.ex @@ -4,7 +4,7 @@ defmodule Teiserver.Game.MatchRatingLib do to balance matches. For that use Teiserver.Battle.BalanceLib. """ - alias Teiserver.{Account, Coordinator, Config, Game, Battle,} + alias Teiserver.{Account, Coordinator, Config, Game, Battle} alias Teiserver.Data.Types, as: T alias Teiserver.Repo alias Teiserver.Battle.{BalanceLib, MatchLib} @@ -71,7 +71,8 @@ defmodule Teiserver.Game.MatchRatingLib do match.team_count < 2 -> {:error, :not_enough_teams} - match.game_duration < Config.get_site_config_cache("matchmaking.Time to treat game as ranked") -> + match.game_duration < + Config.get_site_config_cache("matchmaking.Time to treat game as ranked") -> {:error, :too_short} Map.get(match.tags, "game/modoptions/ranked_game", "1") == "0" -> diff --git a/lib/teiserver/game/servers/balancer_server.ex b/lib/teiserver/game/servers/balancer_server.ex index 658f0ed26..fa72d846f 100644 --- a/lib/teiserver/game/servers/balancer_server.ex +++ b/lib/teiserver/game/servers/balancer_server.ex @@ -236,8 +236,7 @@ defmodule Teiserver.Game.BalancerServer do players |> Enum.map(fn %{userid: userid} -> %{ - userid => - BalanceLib.get_user_rating_rank(userid, rating_type, opts[:fuzz_multiplier]) + userid => BalanceLib.get_user_rating_rank(userid, rating_type, opts[:fuzz_multiplier]) } end) diff --git a/lib/teiserver/helpers/oban_logger.ex b/lib/teiserver/helpers/oban_logger.ex index 5c2af9cff..87f364510 100644 --- a/lib/teiserver/helpers/oban_logger.ex +++ b/lib/teiserver/helpers/oban_logger.ex @@ -40,6 +40,8 @@ defmodule Teiserver.Helper.ObanLogger do end def handle_event([:oban, :job, event], measure, meta, _) do - Logger.info("[Oban] #{event} #{meta.worker} ran in #{System.convert_time_unit(measure.duration, :native, :milliseconds)}ms") + Logger.info( + "[Oban] #{event} #{meta.worker} ran in #{System.convert_time_unit(measure.duration, :native, :milliseconds)}ms" + ) end end diff --git a/lib/teiserver/mix_tasks/fake_data.ex b/lib/teiserver/mix_tasks/fake_data.ex index dd5f02777..6fd69d24f 100644 --- a/lib/teiserver/mix_tasks/fake_data.ex +++ b/lib/teiserver/mix_tasks/fake_data.ex @@ -109,8 +109,10 @@ defmodule Mix.Tasks.Teiserver.Fakedata do inserted_at: Timex.shift(Timex.now(), days: -day, minutes: -minutes) |> time_convert, updated_at: Timex.shift(Timex.now(), days: -day, minutes: -minutes) |> time_convert } - end) |> Enum.to_list() - end) |> Enum.to_list() + end) + |> Enum.to_list() + end) + |> Enum.to_list() |> List.flatten() Ecto.Multi.new() diff --git a/lib/teiserver/protocols/spring/spring_telemetry_in.ex b/lib/teiserver/protocols/spring/spring_telemetry_in.ex index 63e7ca3e7..97f5fd972 100644 --- a/lib/teiserver/protocols/spring/spring_telemetry_in.ex +++ b/lib/teiserver/protocols/spring/spring_telemetry_in.ex @@ -18,7 +18,6 @@ defmodule Teiserver.Protocols.Spring.TelemetryIn do case Spring.unzip(compressed_contents) do {:ok, contents} -> if String.valid?(contents) do - params = %{ user_hash: user_hash, user_id: state.userid, @@ -35,14 +34,29 @@ defmodule Teiserver.Protocols.Spring.TelemetryIn do DiscordBridgeBot.new_infolog(infolog) end - reply(:spring, :okay, "upload_infolog - id:#{infolog.id}", msg_id, state) + reply( + :spring, + :okay, + "upload_infolog - id:#{infolog.id}", + msg_id, + state + ) {:error, _changeset} -> reply(:spring, :no, "upload_infolog - db error", msg_id, state) end else - Logger.error("#{state.userid} #{log_type} upload_infolog - contents contain invalid characters") - reply(:spring, :no, "upload_infolog - contents contain invalid characters", msg_id, state) + Logger.error( + "#{state.userid} #{log_type} upload_infolog - contents contain invalid characters" + ) + + reply( + :spring, + :no, + "upload_infolog - contents contain invalid characters", + msg_id, + state + ) end {:error, _} -> diff --git a/lib/teiserver_web/controllers/admin/user_controller.ex b/lib/teiserver_web/controllers/admin/user_controller.ex index 559f2c689..8a0a2ace7 100644 --- a/lib/teiserver_web/controllers/admin/user_controller.ex +++ b/lib/teiserver_web/controllers/admin/user_controller.ex @@ -93,6 +93,7 @@ defmodule TeiserverWeb.Admin.UserController do ) ++ Account.list_users(search: [id_in: id_list])) |> Enum.uniq() + user_stats = for user <- users, do: Account.get_user_stat_data(user.id) conn @@ -127,6 +128,7 @@ defmodule TeiserverWeb.Admin.UserController do Account.list_users(search: [id_in: id_list]) end + user_stats = for user <- users, do: Account.get_user_stat_data(user.id) conn diff --git a/lib/teiserver_web/live/account/profile/contributor.ex b/lib/teiserver_web/live/account/profile/contributor.ex index 8ddc15b85..f44c8f3b8 100644 --- a/lib/teiserver_web/live/account/profile/contributor.ex +++ b/lib/teiserver_web/live/account/profile/contributor.ex @@ -84,13 +84,13 @@ defmodule TeiserverWeb.Account.ProfileLive.Contributor do Account.recache_user(assigns.user.id) {:noreply, - socket - |> assign(:country_code, assigns.temp_country_code) - |> assign(:error_message, nil)} + socket + |> assign(:country_code, assigns.temp_country_code) + |> assign(:error_message, nil)} else {:noreply, - socket - |> assign(:error_message, "Country code must not contain space")} + socket + |> assign(:error_message, "Country code must not contain space")} end end diff --git a/lib/teiserver_web/live/battles/lobbies/show.html.heex b/lib/teiserver_web/live/battles/lobbies/show.html.heex index 968082826..1aaddad35 100644 --- a/lib/teiserver_web/live/battles/lobbies/show.html.heex +++ b/lib/teiserver_web/live/battles/lobbies/show.html.heex @@ -97,7 +97,11 @@ spectators =