Skip to content
This repository was archived by the owner on Nov 30, 2023. It is now read-only.

Commit ba577f3

Browse files
committed
feat(farmer): exchange resources on TRADING POST > CARAVAN (#11)
1 parent 09656be commit ba577f3

File tree

5 files changed

+110
-10
lines changed

5 files changed

+110
-10
lines changed

lokbot/app.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,9 @@ def main(token, captcha_solver_config=None):
2828

2929
schedule.every(120).to(240).minutes.do(farmer.alliance_helper)
3030
schedule.every(120).to(240).minutes.do(farmer.alliance_farmer)
31-
schedule.every(120).to(240).minutes.do(farmer.use_resource_in_item_list)
3231
schedule.every(200).to(300).minutes.do(farmer.vip_chest_claim)
32+
schedule.every(120).to(240).minutes.do(farmer.caravan_farmer)
33+
schedule.every(120).to(240).minutes.do(farmer.use_resource_in_item_list)
3334
schedule.every(60).to(120).minutes.do(farmer.harvester)
3435

3536
schedule.run_all()

lokbot/client.py

+11
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,17 @@ def kingdom_world_change(self, world_id):
395395
"""
396396
return self.post('kingdom/world/change', {'worldId': world_id})
397397

398+
def kingdom_caravan_list(self):
399+
return self.post('kingdom/caravan/list')
400+
401+
@tenacity.retry(
402+
wait=tenacity.wait_fixed(1),
403+
retry=tenacity.retry_if_exception_type(ratelimit.RateLimitException),
404+
)
405+
@ratelimit.limits(calls=1, period=4)
406+
def kingdom_caravan_buy(self, caravan_item_id):
407+
return self.post('kingdom/caravan/buy', {'caravanItemId': caravan_item_id})
408+
398409
def alliance_help_all(self):
399410
"""
400411
帮助全部

lokbot/enum.py

+28
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,21 @@
9090
BUILDING_CODE_MAP['gold_mine']
9191
]
9292

93+
ITEM_CODE_FOOD = 10100001
94+
ITEM_CODE_LUMBER = 10100002
95+
ITEM_CODE_STONE = 10100003
96+
ITEM_CODE_GOLD = 10100004
97+
ITEM_CODE_CRYSTAL = 10100005
98+
9399
ITEM_CODE_FOOD_1K = 10101013
94100
ITEM_CODE_FOOD_5K = 10101014
95101
ITEM_CODE_FOOD_10K = 10101015
96102
ITEM_CODE_FOOD_50K = 10101016
97103
ITEM_CODE_FOOD_100K = 10101017
98104
ITEM_CODE_FOOD_500K = 10101018
99105
ITEM_CODE_FOOD_1M = 10101019
106+
ITEM_CODE_FOOD_5M = 10101020
107+
ITEM_CODE_FOOD_10M = 10101021
100108

101109
ITEM_CODE_LUMBER_1K = 10101022
102110
ITEM_CODE_LUMBER_5K = 10101023
@@ -105,6 +113,8 @@
105113
ITEM_CODE_LUMBER_100K = 10101026
106114
ITEM_CODE_LUMBER_500K = 10101027
107115
ITEM_CODE_LUMBER_1M = 10101028
116+
ITEM_CODE_LUMBER_5M = 10101029
117+
ITEM_CODE_LUMBER_10M = 10101030
108118

109119
ITEM_CODE_STONE_1K = 10101031
110120
ITEM_CODE_STONE_5K = 10101032
@@ -113,6 +123,8 @@
113123
ITEM_CODE_STONE_100K = 10101035
114124
ITEM_CODE_STONE_500K = 10101036
115125
ITEM_CODE_STONE_1M = 10101037
126+
ITEM_CODE_STONE_5M = 10101038
127+
ITEM_CODE_STONE_10M = 10101039
116128

117129
ITEM_CODE_GOLD_1K = 10101040
118130
ITEM_CODE_GOLD_5K = 10101041
@@ -121,6 +133,8 @@
121133
ITEM_CODE_GOLD_100K = 10101044
122134
ITEM_CODE_GOLD_500K = 10101045
123135
ITEM_CODE_GOLD_1M = 10101046
136+
ITEM_CODE_GOLD_5M = 10101047
137+
ITEM_CODE_GOLD_10M = 10101048
124138

125139
ITEM_CODE_FOOD_BOOST_8H = 10102001
126140
ITEM_CODE_FOOD_BOOST_1D = 10102002
@@ -143,6 +157,20 @@
143157
ITEM_CODE_GOLD_1K, ITEM_CODE_GOLD_5K, ITEM_CODE_GOLD_10K, ITEM_CODE_GOLD_50K, ITEM_CODE_GOLD_100K,
144158
)
145159

160+
BUYABLE_CARAVAN_ITEM_CODE_LIST = (
161+
ITEM_CODE_FOOD, ITEM_CODE_FOOD_1K, ITEM_CODE_FOOD_5K, ITEM_CODE_FOOD_10K, ITEM_CODE_FOOD_50K,
162+
ITEM_CODE_FOOD_100K, ITEM_CODE_FOOD_1M, ITEM_CODE_FOOD_5M, ITEM_CODE_FOOD_10M,
163+
164+
ITEM_CODE_LUMBER, ITEM_CODE_LUMBER_1K, ITEM_CODE_LUMBER_5K, ITEM_CODE_LUMBER_10K, ITEM_CODE_LUMBER_50K,
165+
ITEM_CODE_LUMBER_100K, ITEM_CODE_LUMBER_1M, ITEM_CODE_LUMBER_5M, ITEM_CODE_LUMBER_10M,
166+
167+
ITEM_CODE_STONE, ITEM_CODE_STONE_1K, ITEM_CODE_STONE_5K, ITEM_CODE_STONE_10K, ITEM_CODE_STONE_50K,
168+
ITEM_CODE_STONE_100K, ITEM_CODE_STONE_1M, ITEM_CODE_STONE_5M, ITEM_CODE_STONE_10M,
169+
170+
ITEM_CODE_GOLD, ITEM_CODE_GOLD_1K, ITEM_CODE_GOLD_5K, ITEM_CODE_GOLD_10K, ITEM_CODE_GOLD_50K,
171+
ITEM_CODE_GOLD_100K, ITEM_CODE_GOLD_1M, ITEM_CODE_GOLD_5M, ITEM_CODE_GOLD_10M,
172+
)
173+
146174
USABLE_BOOST_CODE_MAP = {
147175
'food': (ITEM_CODE_FOOD_BOOST_8H, ITEM_CODE_FOOD_BOOST_1D),
148176
'lumber': (ITEM_CODE_LUMBER_BOOST_8H, ITEM_CODE_LUMBER_BOOST_1D),

lokbot/farmer.py

+38-9
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from lokbot import logger, builtin_logger
1111
from lokbot.exceptions import OtherException
1212
from lokbot.enum import *
13+
from lokbot.util import get_resource_index_by_item_code, run_functions_in_random_order
1314

1415

1516
class LokFarmer:
@@ -32,15 +33,17 @@ def __init__(self, access_token, captcha_solver_config):
3233
# knock
3334
self.api.auth_set_device_info(device_info)
3435
self.api.chat_logs(self.kingdom_enter.get('kingdom').get('worldId'))
35-
self.api.kingdom_wall_info()
36-
self.api.quest_main()
37-
self.api.item_list()
38-
self.api.kingdom_treasure_list()
39-
self.api.event_list()
40-
self.api.event_cvc_open()
41-
self.api.event_roulette_open()
42-
self.api.pkg_recommend()
43-
self.api.pkg_list()
36+
run_functions_in_random_order(
37+
self.api.kingdom_wall_info,
38+
self.api.quest_main,
39+
self.api.item_list,
40+
self.api.kingdom_treasure_list,
41+
self.api.event_list,
42+
self.api.event_cvc_open,
43+
self.api.event_roulette_open,
44+
self.api.pkg_recommend,
45+
self.api.pkg_list,
46+
)
4447
self.api.auth_set_device_info(device_info)
4548

4649
# [food, lumber, stone, gold]
@@ -555,3 +558,29 @@ def alliance_farmer(self):
555558
self.api.alliance_research_donate_all(code)
556559
except OtherException:
557560
pass
561+
562+
def caravan_farmer(self):
563+
caravan = self.api.kingdom_caravan_list().get('caravan')
564+
565+
if not caravan:
566+
return
567+
568+
for each_item in caravan.get('items', []):
569+
if each_item.get('amount') < 1:
570+
continue
571+
572+
if each_item.get('code') not in BUYABLE_CARAVAN_ITEM_CODE_LIST:
573+
continue
574+
575+
if each_item.get('costItemCode') not in BUYABLE_CARAVAN_ITEM_CODE_LIST:
576+
continue
577+
578+
resource_index = get_resource_index_by_item_code(each_item.get('costItemCode'))
579+
580+
if resource_index == -1:
581+
continue
582+
583+
if each_item.get('cost') > self.resources[resource_index]:
584+
continue
585+
586+
self.api.kingdom_caravan_buy(each_item.get('_id'))

lokbot/util.py

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import random
2+
3+
from lokbot.enum import *
4+
5+
6+
def get_resource_index_by_item_code(item_code):
7+
"""
8+
Returns the index of the item in the resource list
9+
[0, 1, 2, 3 ]
10+
[food, lumber, stone, gold]
11+
"""
12+
if (ITEM_CODE_FOOD_1K <= item_code <= ITEM_CODE_FOOD_10M) or (item_code == ITEM_CODE_FOOD):
13+
return 0
14+
15+
if (ITEM_CODE_LUMBER_1K <= item_code <= ITEM_CODE_LUMBER_10M) or (item_code == ITEM_CODE_LUMBER):
16+
return 1
17+
18+
if (ITEM_CODE_STONE_1K <= item_code <= ITEM_CODE_STONE_10M) or (item_code == ITEM_CODE_STONE):
19+
return 2
20+
21+
if (ITEM_CODE_GOLD_1K <= item_code <= ITEM_CODE_GOLD_10M) or (item_code == ITEM_CODE_GOLD):
22+
return 3
23+
24+
return -1
25+
26+
27+
def run_functions_in_random_order(*funcs):
28+
functions = list(funcs)
29+
random.shuffle(functions)
30+
for func in functions:
31+
func()

0 commit comments

Comments
 (0)