* bugfix:
Hey Plato! If You're reading this - fix your variable types and there will be 90% less bugs in Your code!!!
Some TelegramBot tweaks
when full energy update citizen info would stop working because trying to get timedelta from now - _last_full_energy_report
Too broad exception was cought without notifying about actual error - when Telegram isn't enabled
Jsonification updates - if simplejson is available some packages are importing simplejson with try-except and later throwing simplejson errors which should be cought when calling .json() on every request.
Fixed error logging
* inventory_updates:
Python 3.8, isort, requirement update
Representation of Citizen class
Created method for current products on sale. Updated inventory to also include products on sale
# Conflicts:
# erepublik/citizen.py
Citizen.set_default_weapon() - eRepublik should return list with all available weapon qualities, but when a battle is just launched, they return only dict with barehands
Citizen.fight() - no longer calls self.set_default_weapon()
Citizen.find_battle_and_fight() - now calls self.set_default_weapon() just before fighting
Citizen.update_war_info() - returns previous battle list if responses 'last_updated' isn't more than 30s old
New:
Citizen.get_battle_for_war(war_id) - returns Battle instance for specific war, if battle is active for given war
improved multi bomb deploy with auto traveling,
Citizen.fight() simplified battle data gathering logic -> Citizen.shoot logic improved
Citizen.all_battles are now defaultdict with default value of empty/invalid battle, for times when trying to do things with battle which is not in all_battle dict