-
Notifications
You must be signed in to change notification settings - Fork 1
/
upload.pl
121 lines (111 loc) · 3.5 KB
/
upload.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
use strict;
use 5.010;
use TheGameCrafter::Client;
use DateTime;
use Config::JSON;
use Getopt::Long;
# settings
my $config_file;
GetOptions(
'config=s' => \$config_file,
);
unless ($config_file) {
say "Usage: $0 --config=game.conf";
exit;
}
my $config = Config::JSON->new($config_file);
# create session
say "Creating session";
my $session = tgc_post('session',[
username => $ENV{TGC_USER},
password => $ENV{TGC_PASS},
api_key_id => $ENV{TGC_API_KEY},
]);
# get user
say "Fetching user";
my $user = tgc_get('user/'.$session->{user_id},[
session_id => $session->{id},
_include_related_objects => 1,
_include_relationships => 1,
]);
# get game
say "Fetching game details";
my $game = tgc_get('game/'.$config->get('game_id'), [
session_id => $session->{id},
_include_relationships => 1,
]);
# delete old decks
say "Deleting old decks";
my $decks = tgc_get($game->{_relationships}{minidecks});
foreach my $deck (@{$decks->{items}}) {
tgc_delete('minideck/'.$deck->{id}, [
session_id => $session->{id},
]);
}
# create folder
say "Creating game folder";
my $game_folder = tgc_post('folder',[
name => 'Lacuna Expanse',
session_id => $session->{id},
user_id => $user->{id},
parent_id => $user->{root_folder}{id},
]);
# create decks
say "Creating new decks";
foreach my $deck_config (@{$config->get('decks')}) {
say $deck_config->{name};
say "Creating folder";
my $folder = tgc_post('folder',[
name => $deck_config->{name},
session_id => $session->{id},
user_id => $user->{id},
parent_id => $game_folder->{id},
]);
my $out_path = $config->get('out_path').'/'.$deck_config->{name};
say "Uploading deck back";
my $back = tgc_post('file',[
name => $deck_config->{name}.'.png',
folder_id => $folder->{id},
file => [$out_path .'.png'],
session_id => $session->{id},
]);
say "Creating deck";
my $deck = tgc_post('minideck', [
name => $deck_config->{name},
game_id => $game->{id},
session_id => $session->{id},
back_id => $back->{id},
has_proofed_back => 1,
]);
say "Creating cards";
foreach my $card_config (@{$deck_config->{cards}}) {
say $card_config->{name};
say "Uploading face";
my $face = tgc_post('file',[
name => $card_config->{name},
folder_id => $folder->{id},
file => [$out_path .'/'. $card_config->{name}.'.png'],
session_id => $session->{id},
]);
my $override_back;
if ($card_config->{override_back}) {
$override_back = tgc_post('file',[
name => $card_config->{name}.' background',
folder_id => $folder->{id},
file => [$card_config->{override_back}],
session_id => $session->{id},
]);
}
say "Creating card";
my $card = tgc_post('minicard', [
name => $card_config->{name},
quantity => $card_config->{quantity},
deck_id => $deck->{id},
session_id => $session->{id},
face_id => $face->{id},
back_id => ($card_config->{override_back} ? $override_back->{id} : $back->{id}),
has_proofed_face => 1,
]);
}
}
say "All done!";