EventsΒΆ

This is an example of a basic events setup.

  1import logging
  2import os
  3
  4import coc
  5
  6from coc import utils
  7
  8client = coc.login(
  9    os.environ["DEV_SITE_EMAIL"],
 10    os.environ["DEV_SITE_PASSWORD"],
 11    key_names="coc.py tests",
 12    client=coc.EventsClient,
 13)
 14logging.basicConfig(level=logging.INFO)
 15log = logging.getLogger()
 16
 17
 18clan_tags = ["#P222C9Y", "#9VPR98RG", "#9G2QU8YG", "#80Y8L0QY", "#9UJ8JRUP"]
 19player_tags = ["#YQ2QYLGJ", "#QYJCVGL", "#2LURLC9V", "#QCQR298V", "#82CVC2V8", "#29U09V8J", "#8GYGL22P"]
 20
 21
 22"""Clan Events"""
 23
 24
 25@client.event  # Pro Tip : if you don't have @client.event then your events won't run! Don't forget it!
 26@coc.ClanEvents.member_donations(tags=clan_tags)
 27async def on_clan_member_donation(old_member, new_member):
 28    final_donated_troops = new_member.donations - old_member.donations
 29    log.info(f"{new_member} of {new_member.clan} just donated {final_donated_troops} troops.")
 30
 31
 32@client.event
 33@coc.ClanEvents.member_received(tags=clan_tags)
 34async def on_clan_member_donation_receive(old_member, new_member):
 35    final_received_troops = new_member.received - old_member.received
 36    log.info(f"{new_member} of {new_member.clan} just received {final_received_troops} troops.")
 37
 38
 39@client.event
 40@coc.ClanEvents.member_join(tags=clan_tags)
 41async def on_clan_member_join(member, clan):
 42    log.info(f"{member.name} has joined {clan.name}")
 43
 44
 45@client.event
 46@coc.ClanEvents.member_leave(tags=clan_tags)
 47async def on_clan_member_leave(member, clan):
 48    log.info(f"{member.name} has left {clan.name}")
 49
 50
 51@client.event
 52@coc.ClanEvents.points(tags=clan_tags)
 53async def on_clan_trophy_change(old_clan, new_clan):
 54    log.info(f"{new_clan.name} total trophies changed from {old_clan.points} to {new_clan.points}")
 55
 56
 57@client.event
 58@coc.ClanEvents.member_versus_trophies(tags=clan_tags)
 59async def clan_member_versus_trophies_changed(old_member, new_member):
 60    log.info(f"{new_member} versus trophies changed from {old_member.versus_trophies} to {new_member.versus_trophies}")
 61
 62
 63"""War Events"""
 64
 65
 66@client.event
 67@coc.WarEvents.war_attack(tags=clan_tags)
 68async def current_war_stats(attack, war):
 69    log.info(f"Attack number {attack.order}\n({attack.attacker.map_position}).{attack.attacker} of {attack.attacker.clan} "
 70             f"attacked ({attack.defender.map_position}).{attack.defender} of {attack.defender.clan}")
 71
 72
 73"""Player Events"""
 74
 75
 76@client.event
 77@coc.PlayerEvents.donations(tags=player_tags)
 78async def on_player_donation(old_player, new_player):
 79    final_donated_troops = new_player.donations - old_player.donations
 80    log.info(f"{new_player} of {new_player.clan} just donated {final_donated_troops} troops.")
 81
 82
 83@client.event
 84@coc.PlayerEvents.received(tags=player_tags)
 85async def on_player_donation_receive(old_player, new_player):
 86    final_received_troops = new_player.received - old_player.received
 87    log.info(f"{new_player} of {new_player.clan} just received {final_received_troops} troops.")
 88
 89
 90@client.event
 91@coc.PlayerEvents.trophies(tags=player_tags)
 92async def on_player_trophy_change(old_player, new_player):
 93    log.info(f"{new_player} trophies changed from {old_player.trophies} to {new_player.trophies}")
 94
 95
 96@client.event
 97@coc.PlayerEvents.versus_trophies(tags=player_tags)
 98async def on_player_versus_trophy_change(old_player, new_player):
 99    log.info(f"{new_player} versus trophies changed from {old_player.trophies} to {new_player.trophies}")
100
101
102"""Client Events"""
103
104
105@client.event
106@coc.ClientEvents.maintenance_start()
107async def on_maintenance():
108    log.info("Maintenace Started")
109
110
111@client.event
112@coc.ClientEvents.maintenance_completion()
113async def on_maintenance_completion(time_started):
114    log.info("Maintenace Ended; started at %s", time_started)
115
116
117@client.event
118@coc.ClientEvents.new_season_start()
119async def season_started():
120    log.info("New season started, and will finish at %s", str(utils.get_season_end()))
121
122
123async def add_clan_players():
124    async for clan in client.get_clans(clan_tags):
125        client.add_player_updates(*[member.tag for member in clan.members])
126
127client.loop.run_until_complete(add_clan_players())
128client.loop.run_forever()