{"id":201272,"date":"2013-11-07T18:44:03","date_gmt":"2013-11-07T14:44:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=201272"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=201272","title":{"rendered":"<span class=\"post_title\">\u041d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u043e\u0442\u0430 \u0434\u043b\u044f Grepolis<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t<img decoding=\"async\" src=\"http:\/\/browser-online-games.info\/wp-content\/uploads\/2012\/11\/grepolis.jpg\" alt=\"image\" align=\"left\"\/> \u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043e\u043f\u0438\u0448\u0443 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u043e\u0442\u0430 \u0434\u043b\u044f \u043e\u043d\u043b\u0430\u0439\u043d mmo strategy \u0438\u0433\u0440\u044b Grepolis. \u0423\u0447\u0442\u0438\u0442\u0435, \u0447\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c\u0438 \u0438\u0433\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043e, \u0437\u0430 \u044d\u0442\u043e \u0431\u0430\u043d\u044f\u0442, \u0438 \u043d\u0435 \u0431\u0435\u0437\u043f\u0440\u0438\u0447\u0438\u043d\u043d\u043e. \u041f\u0440\u043e\u0441\u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u0445\u043e\u0431\u0431\u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u0431\u043e\u0442\u044b \u0434\u043b\u044f \u0438\u0433\u0440. \u0410 \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435 \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043e. \u041a\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u043b\u043e\u0433\u0438\u043a\u0430 \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u043f\u0440\u043e\u0448\u0443 \u043f\u043e\u0434 \u043a\u0430\u0442.<br \/>  <a name=\"habracut\"><\/a><br \/>  \u041a\u0430\u043a \u0432\u0441\u0435\u0433\u0434\u0430, \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 <a href=\"https:\/\/github.com\/peinguin\/Grepolis-Bot\">\u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434<\/a>.<\/p>\n<p>  \u041c\u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f Grepolis, \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u0438\u0433\u0440\u0430. \u041d\u043e \u0447\u0442\u043e\u0431\u044b \u0442\u0430\u043c \u0432\u044b\u0436\u0438\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u043a\u0430\u0436\u0434\u044b\u0435 5 \u043c\u0438\u043d\u0443\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0434\u0430\u043d\u044c \u0441 \u0434\u0435\u0440\u0435\u0432\u0435\u043d\u044c. \u0410 \u044f \u0432\u0435\u0441\u044c \u0434\u0435\u043d\u044c \u0437\u0430\u043d\u044f\u0442 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0446\u0435\u043b\u044c\u044e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0431\u043e\u0442\u0430 \u0431\u044b\u043b\u043e \u043a\u0430\u043a-\u0440\u0430\u0437 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0434\u0430\u043d\u044c. \u041f\u043e\u0442\u043e\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u043e\u0441\u044c \u0430\u0432\u0442\u043e\u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435 \u0434\u0435\u0440\u0435\u0432\u0435\u043d\u044c(\u0442\u043e\u0433\u0434\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u0438\u0431\u044b\u043b\u0438 \u0434\u0430\u044e\u0442), \u0430\u0432\u0442\u043e\u043f\u043e\u0441\u0442\u0440\u043e\u0439\u043a\u0430(\u0447\u0442\u043e\u0431\u044b \u043d\u043e\u0447\u044c\u044e, \u043a\u043e\u0433\u0434\u0430 \u044f \u0441\u043f\u043b\u044e, \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0435 \u043f\u0443\u0441\u0442\u0435\u043b\u0430). \u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044f \u043f\u043e\u043d\u044f\u043b, \u044d\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u0438\u043d\u043e\u0441\u044f\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0434\u043e\u0445\u043e\u0434\u0430 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0438\u0433\u0440\u044b. \u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435 \u043f\u043e\u0442\u043e\u043c\u0443 \u0438\u0433\u0440\u043e\u043a\u043e\u0432, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0431\u043e\u0442\u043e\u0432, \u0442\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u0431\u0430\u043d\u044f\u0442.<\/p>\n<p>  \u0421\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u0431\u043e\u0442 \u0438\u0433\u0440\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442, \u043d\u0430 \u043d\u0435\u0433\u043e \u0432\u043e\u0437\u043b\u043e\u0436\u0435\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0418 \u0432\u043e\u043e\u0431\u0449\u0435, \u043b\u0443\u0447\u0448\u0435 \u043d\u0435 \u0431\u0440\u043e\u0441\u0430\u0439\u0442\u0435 \u0435\u0433\u043e \u043e\u0434\u043d\u043e\u0433\u043e \u043d\u0430 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u2014 \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u0431\u0430\u043d\u0438\u0442\u044c.<\/p>\n<p>  \u0427\u0435\u0441\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f \u044d\u0442\u043e \u0443\u0436\u0435 \u0432\u0442\u043e\u0440\u0430\u044f \u043f\u043e \u0441\u0447\u0435\u0442\u0443 \u0432\u0435\u0440\u0441\u0438\u044f \u0431\u043e\u0442\u0430, \u043a\u0430\u043a \u0438 \u043f\u0435\u0440\u0432\u0430\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043d\u0430 Perl. \u041f\u0435\u0440\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u043e \u043a\u0440\u043e\u043d\u0443 \u0440\u0430\u0437 \u0432 \u043f\u044f\u0442\u044c \u043c\u0438\u043d\u0443\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u0441\u0442\u0440\u043e\u0438\u043b\u0430\u0441\u044c \u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u043b\u0430\u0441\u044c. \u0418 \u044d\u0442\u043e \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u044f \u043f\u043e\u043f\u0430\u043b \u0432 \u0442\u043e\u043f \u0438\u0433\u0440\u043e\u043a\u043e\u0432, \u0432\u0441\u0435 \u0431\u044b\u043b\u043e \u0445\u043e\u0440\u043e\u0448\u043e. \u041d\u043e \u043f\u043e\u0442\u043e\u043c \u0438\u0433\u0440\u0430 \u043d\u0430\u0434\u043e\u0435\u043b\u0430 \u0438 \u044f \u0437\u0430\u0431\u0438\u043b, \u043a\u043e\u0433\u0434\u0430 \u0447\u0435\u0440\u0435\u0437 \u0432\u0440\u0435\u043c\u044f \u0441\u043d\u043e\u0432\u0430 \u043d\u0430\u0447\u0430\u043b \u0438\u0433\u0440\u0430\u0442\u044c \u2014 \u043c\u0435\u043d\u044f \u0437\u0430\u0431\u0430\u043d\u0438\u043b\u0438. \u0412\u0438\u0434\u0438\u043c\u043e, \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0431\u043e\u0442\u043e\u0432. \u0417\u043d\u0430\u0447\u0438\u0442 \u043d\u0443\u0436\u043d\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u043f\u043e\u0434\u0445\u043e\u0434. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u0442\u0430\u0440\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043d\u0435 \u0437\u043d\u0430\u043b\u0430 \u043d\u0438\u0447\u0435\u0433\u043e \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0434\u043e \u043d\u0435\u0435, \u0437\u0430\u043d\u043e\u0432\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0430 \u0432\u0441\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e. \u041d\u0435 \u0443\u043c\u0435\u043b\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0444\u0435\u0440\u043c \u0438 \u0433\u043e\u0440\u043e\u0434\u043e\u0432 \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0431\u044b\u043b\u0430 \u043d\u0435 \u0442\u0440\u0443.<\/p>\n<p>  \u0422\u0430\u043a \u0440\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u0432\u0442\u043e\u0440\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f. \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u0435\u0433\u043e-\u043b\u0438\u0448\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u044c sid(\u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0438\u0437 \u043a\u0443\u043a\u0438\u0441\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 dev-tools, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440) \u0438 \u0441\u0435\u0440\u0432\u0435\u0440, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0438\u0433\u0440\u0430\u0435\u0442\u0435. \u0421\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u0433\u043e\u0440\u043e\u0434\u043e\u0432\/\u0444\u0435\u0440\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438. \u0425\u043e\u0442\u044f \u043d\u0430 \u0434\u0432\u0443\u0445 \u0433\u043e\u0440\u043e\u0434\u0430\u0445 \u0435\u0449\u0435 \u043d\u0435 \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b, \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0433\u043e\u0440\u043e\u0434, \u043d\u043e \u0441\u043b\u0435\u0434\u0438\u0442\u0435 \u0437\u0430 github \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u043c \u2014 \u0444\u0438\u043a\u0441\u044b \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0435\u0437\u0430\u043c\u0435\u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d\u0430 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0441\u0442\u0430\u0440\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u0430\u0442\u044c \u043f\u043e\u043c\u0435\u043d\u044c\u0448\u0435 \u043b\u0438\u0448\u043d\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.<\/p>\n<p>  \u0421\u0430\u043c\u0430 \u0438\u0433\u0440\u0430 \u0442\u043e\u0436\u0435 \u043e\u0431\u043d\u043e\u0432\u0438\u043b\u0430\u0441\u044c, \u0435\u0441\u043b\u0438 \u0440\u0430\u043d\u044c\u0448\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u043f\u043e\u0441\u044b\u043b\u0430\u043b\u0441\u044f \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e html \u043a\u043e\u0434, \u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0445\u043e\u0442\u044f \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u0442\u044c \u0432 \u043f\u043e\u043b\u0435 json \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 json \u043e\u0431\u2019\u0435\u043a\u0442 \u043a\u0430\u043a \u0441\u0442\u0440\u043e\u043a\u0443 \u0442\u043e\u0442 \u0435\u0449\u0435 \u0445\u043e\u0434. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:  <\/p>\n<pre><code class=\"javascript\">{   'type' =&gt; 'backbone',   'param_id' =&gt; 13980,   'subject' =&gt; 'Units',   'id' =&gt; 4414096,   'param_str' =&gt; '{&quot;Units&quot;:{&quot;id&quot;:13980,&quot;home_town_id&quot;:5391,&quot;current_town_id&quot;:5391,&quot;sword&quot;:23,&quot;slinger&quot;:21,&quot;archer&quot;:5,&quot;hoplite&quot;:10,&quot;rider&quot;:0,&quot;chariot&quot;:0,&quot;catapult&quot;:0,&quot;minotaur&quot;:0,&quot;manticore&quot;:0,&quot;zyklop&quot;:0,&quot;harpy&quot;:0,&quot;medusa&quot;:0,&quot;centaur&quot;:0,&quot;pegasus&quot;:0,&quot;cerberus&quot;:0,&quot;fury&quot;:0,&quot;griffin&quot;:0,&quot;calydonian_boar&quot;:0,&quot;godsent&quot;:34,&quot;big_transporter&quot;:0,&quot;bireme&quot;:0,&quot;attack_ship&quot;:0,&quot;demolition_ship&quot;:0,&quot;small_transporter&quot;:0,&quot;trireme&quot;:0,&quot;colonize_ship&quot;:0,&quot;sea_monster&quot;:0,&quot;militia&quot;:0,&quot;heroes&quot;:null,&quot;home_town_link&quot;:&quot;&lt;a href=\\\\&quot;#eyJpZCI6NTM5MSwiaXgiOjUxMSwiaXkiOjYyMywidHAiOiJ0b3duIiwibmFtZSI6IlBlcmwifQ==\\\\&quot; class=\\\\&quot;gp_town_link\\\\&quot;&gt;Perl&lt;\\\\\/a&gt;&quot;,&quot;same_island&quot;:true,&quot;current_town_link&quot;:&quot;&lt;a href=\\\\&quot;#eyJpZCI6NTM5MSwiaXgiOjUxMSwiaXkiOjYyMywidHAiOiJ0b3duIiwibmFtZSI6IlBlcmwifQ==\\\\&quot; class=\\\\&quot;gp_town_link\\\\&quot;&gt;Perl&lt;\\\\\/a&gt;&quot;,&quot;current_player_link&quot;:&quot;&lt;a  href=\\\\&quot;#eyJuYW1lIjoiUGluZ3ZlaW4iLCJpZCI6e319\\\\&quot; class=\\\\&quot;gp_player_link\\\\&quot;&gt;Pingvein&lt;\\\\\/a&gt;&quot;}}',   'time' =&gt; 1383837485 } <\/code><\/pre>\n<p>  \u042f \u0441\u043e\u0437\u0434\u0430\u043b \u0444\u0430\u0439\u043b \u00abinstall_libraries.sh\u00bb \u0434\u043b\u044f \u0442\u0435\u0445 \u0443 \u043a\u043e\u0433\u043e debian\/ubuntu, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0432\u0441\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438. \u0414\u0440\u0443\u0433\u0438\u043c \u0436\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c cpan \u0438\u043b\u0438 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u0441\u0432\u043e\u0435\u0433\u043e \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430. \u0412\u0435\u0441\u044c \u043a\u043e\u0434 \u0443 \u043c\u0435\u043d\u044f \u043e\u0434\u043d\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u044b\u0439, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u043e \u0431\u0443\u0434\u0435\u0442, \u0435\u0441\u043b\u0438 \u0431\u043e\u0442 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u0448\u043b\u0435\u0442 2 \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u0418 \u043f\u043e\u0442\u043e\u043a\u043e\u043c \u044d\u0442\u0438\u043c \u0437\u0430\u0432\u0435\u0434\u0443\u0435\u0442 \u00abIO::Async::Loop\u00bb. Async.pm:<\/p>\n<pre><code class=\"perl\">package GrepolisBotModules::Async;  use GrepolisBotModules::Log;  use IO::Async::Timer::Countdown; use IO::Async::Loop;  my $loop = IO::Async::Loop-&gt;new;  sub delay{ \tmy($delay, $callback) = @_;  \tGrepolisBotModules::Log::echo 1, &quot;Start delay $delay \\n&quot;;  \tmy $timer = IO::Async::Timer::Countdown-&gt;new( \t\tdelay =&gt; $delay, \t\ton_expire =&gt; $callback, \t); \t  \t$timer-&gt;start; \t$loop-&gt;add( $timer ); }  sub run{ \t$loop-&gt;later(shift); \t$loop-&gt;run; }  1; <\/code><\/pre>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u043c\u043e\u0434\u0443\u043b\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u044f\u0442\u0441\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u0442\u043e\u0440\u044b \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0446\u0438\u043a\u043b. \u0423 \u043c\u0435\u043d\u044f \u0432\u0441\u0435 \u043f\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0443, \u043d\u043e \u043a\u043e\u0434, \u0447\u0442\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043e\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 \u00abrun\u00bb. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u044f \u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u0432\u0440\u0435\u043c\u044f \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0432\u044b\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 rand, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0430\u043b\u0438\u0442\u0441\u044f. \u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u2014 grepolis_bot.pl:<\/p>\n<pre><code class=\"perl\">#!\/usr\/bin\/perl  use strict; use warnings;  use Config::IniFiles;  use GrepolisBotModules::Request; use GrepolisBotModules::Town; use GrepolisBotModules::Async; use GrepolisBotModules::Log;  use utf8;  my $cfg = Config::IniFiles-&gt;new( -file =&gt; &quot;config.ini&quot; ); my $config = {     security =&gt; {         sid    =&gt; $cfg-&gt;val( 'security', 'sid' ),         server =&gt; $cfg-&gt;val( 'security', 'server' )     },     global =&gt; {         log    =&gt; $cfg-&gt;val( 'global', 'log' ),     } }; undef $cfg;  my $Towns = [];  GrepolisBotModules::Async::run sub{      GrepolisBotModules::Request::init($config-&gt;{'security'});     GrepolisBotModules::Log::init($config-&gt;{'global'});      GrepolisBotModules::Log::echo(0, &quot;Program started\\n&quot;);      my $game = GrepolisBotModules::Request::base_request('http:\/\/'.$config-&gt;{'security'}-&gt;{'server'}.'.grepolis.com\/game');      $game =~ \/&quot;csrfToken&quot;:&quot;([^&quot;]+)&quot;,\/;     GrepolisBotModules::Request::setH($1);     $game =~ \/&quot;townId&quot;:(\\d+),\/;     GrepolisBotModules::Log::echo 1, &quot;Town $1 added\\n&quot;;     push($Towns, new GrepolisBotModules::Town($1)); }; <\/code><\/pre>\n<p>  \u0421\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043d\u0444\u0438\u0433, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c csrfToken \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0433\u043e\u0440\u043e\u0434. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0433\u043e\u0440\u043e\u0434\u043e\u0432 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u044f \u0437\u0430\u0445\u0432\u0430\u0447\u0443 \u043d\u043e\u0432\u044b\u0439 \u0433\u043e\u0440\u043e\u0434. \u041e\u0431\u0435\u0449\u0430\u044e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0442\u0430\u043a \u0431\u044b\u0441\u0442\u0440\u043e \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043c\u043e\u0433\u0443.<\/p>\n<p>  \u041c\u043e\u0434\u0443\u043b\u044c \u0434\u043b\u044f \u0433\u043e\u0440\u043e\u0434\u0430, Town.pm:<\/p>\n<pre><code class=\"perl\">package GrepolisBotModules::Town;  use strict; use warnings;  use GrepolisBotModules::Request; use GrepolisBotModules::Farm; use GrepolisBotModules::Log;  use JSON;  my $get_town_data = sub {     my( $self ) = @_;      my $resp = JSON-&gt;new-&gt;allow_nonref-&gt;decode(         GrepolisBotModules::Request::request(                 'town_info',                 'go_to_town',                 $self-&gt;{'id'},                 undef,                 0             )         );      $self-&gt;{'max_storage'} = $resp-&gt;{'json'}-&gt;{'max_storage'};      $resp = JSON-&gt;new-&gt;allow_nonref-&gt;decode(         GrepolisBotModules::Request::request(                 'data',                 'get',                 $self-&gt;{'id'},                 '{&quot;types&quot;:[{&quot;type&quot;:&quot;backbone&quot;},{&quot;type&quot;:&quot;map&quot;,&quot;param&quot;:{&quot;x&quot;:0,&quot;y&quot;:0}}]}',                 1             )         );      foreach my $arg (@{$resp-&gt;{'json'}-&gt;{'backbone'}-&gt;{'collections'}}) {         if(             defined $arg-&gt;{'model_class_name'} &&             $arg-&gt;{'model_class_name'} eq 'Town'         ){             my $town = pop($arg-&gt;{'data'});             $self-&gt;setResources($town-&gt;{'last_iron'}, $town-&gt;{'last_stone'}, $town-&gt;{'last_wood'});         }     }      foreach my $data (@{$resp-&gt;{'json'}-&gt;{'map'}-&gt;{'data'}-&gt;{'data'}-&gt;{'data'}} ) {         foreach my $key (keys %{$data-&gt;{'towns'}}) {             if(                 defined $data-&gt;{'towns'}-&gt;{$key}-&gt;{'relation_status'} &&                 $data-&gt;{'towns'}-&gt;{$key}-&gt;{'relation_status'} == 1             ){                 my $village = new GrepolisBotModules::Farm($data-&gt;{'towns'}-&gt;{$key}-&gt;{'id'}, $self);                 push($self-&gt;{'villages'}, $village);             }         }     } };  my $build_something;  $build_something = sub {     my $self = shift;      GrepolisBotModules::Log::echo 0, &quot;Build request &quot;.$self-&gt;{'id'}.&quot;\\n&quot;;     my $response_body = GrepolisBotModules::Request::request('building_main', 'index', $self-&gt;{'id'}, '{&quot;town_id&quot;:&quot;'.$self-&gt;{'id'}.'&quot;}', 0);      $response_body =~ m\/({.*})\/;      my %hash = ( JSON-&gt;new-&gt;allow_nonref-&gt;decode( $1 )-&gt;{'json'}-&gt;{'html'} =~ \/BuildingMain.buildBuilding\\('([^']+)',\\s(\\d+)\\)\/g );     my $to_build = '';          if(defined $hash{'main'} && $hash{'main'}&lt;25){         $to_build = 'main';     }elsif(defined $hash{'academy'}){         $to_build = 'academy';     }elsif(defined $hash{'farm'}){         $to_build = 'farm';     }elsif(defined $hash{'barracks'}){         $to_build = 'barracks';     }elsif(defined $hash{'storage'}){         $to_build = 'storage';     }elsif(defined $hash{'docks'}){         $to_build = 'docks';     }elsif(defined $hash{'stoner'}){         $to_build = 'stoner';     }elsif(defined $hash{'lumber'}){         $to_build = 'lumber';     }elsif(defined $hash{'ironer'}){         $to_build = 'ironer';     }     if($to_build ne ''){         my $response_body = GrepolisBotModules::Request::request(             'building_main',             'build',             $self-&gt;{'id'},             '{&quot;building&quot;:&quot;'.$to_build.'&quot;,&quot;level&quot;:5,&quot;wnd_main&quot;:{&quot;typeinforefid&quot;:0,&quot;type&quot;:9},&quot;wnd_index&quot;:0,&quot;town_id&quot;:&quot;'.$self-&gt;{'id'}.'&quot;}',             1         );     }      my $time_wait = undef;      my $json = JSON-&gt;new-&gt;allow_nonref-&gt;decode($response_body);     if(defined $json-&gt;{'notifications'}){         foreach my $arg (@{$json-&gt;{'notifications'}}) {             if(                 $arg-&gt;{'type'} eq 'backbone' &&                 $arg-&gt;{'subject'} eq 'BuildingOrder'             ){                 my $order = JSON-&gt;new-&gt;allow_nonref-&gt;decode($arg-&gt;{'param_str'})-&gt;{'BuildingOrder'};                 $time_wait = $order-&gt;{'to_be_completed_at'} - $order-&gt;{'created_at'};             }         }     }      if(defined $time_wait){         GrepolisBotModules::Log::echo 0, &quot;Town &quot;.$self-&gt;{'id'}.&quot; build &quot;.$to_build.&quot;\\n&quot;;         GrepolisBotModules::Async::delay( $time_wait + int(rand(60)), sub {$self-&gt;$build_something} );     }else{         GrepolisBotModules::Log::echo 0, &quot;Town &quot;.$self-&gt;{'id'}.&quot; can not build. Waiting\\n&quot;;         GrepolisBotModules::Async::delay( 600 + int(rand(300)), sub {$self-&gt;$build_something} );     } };  sub setResources{     my $self = shift;     my $iron = shift;     my $stone = shift;     my $wood = shift;      $self-&gt;{'iron'} = $iron;     $self-&gt;{'wood'} = $wood;     $self-&gt;{'stone'} = $stone;      GrepolisBotModules::Log::echo 1, &quot;Town &quot;.$self-&gt;{'id'}.&quot; resources updates iron-&quot;.$self-&gt;{'iron'}.&quot;, stone-&quot;.$self-&gt;{'stone'}.&quot;, wood-&quot;.$self-&gt;{'wood'}.&quot;\\n&quot;; }  sub needResources{     my $self = shift;     my $resources_by_request = shift;      if(         $self-&gt;{'iron'} + $resources_by_request &lt; $self-&gt;{'max_storage'} ||         $self-&gt;{'wood'} + $resources_by_request &lt; $self-&gt;{'max_storage'} ||         $self-&gt;{'stone'} + $resources_by_request &lt; $self-&gt;{'max_storage'}     ){         return 1;     }     return 0; }  sub toUpgradeResources{     my $self = shift;      return {         wood =&gt; int($self-&gt;{'iron'}\/5),         stone =&gt; int($self-&gt;{'wood'}\/5),         iron =&gt; int($self-&gt;{'stone'}\/5),     }; }  sub getId{     my $self = shift;     return $self-&gt;{'id'}; }  sub new {     my $class = shift;     my $self = {         id =&gt; shift,         villages =&gt; [],         max_storage =&gt; undef,         iron =&gt; undef,         wood =&gt; undef,         stone =&gt; undef      };      bless $self, $class;          GrepolisBotModules::Log::echo 0, &quot;Town &quot;.$self-&gt;{'id'}.&quot; init started\\n&quot;;      $self-&gt;$get_town_data;     GrepolisBotModules::Log::echo 0, &quot;Town &quot;.$self-&gt;{'id'}.&quot; data gettings finished\\n&quot;;     $self-&gt;$build_something;     GrepolisBotModules::Log::echo 0, &quot;Town &quot;.$self-&gt;{'id'}.&quot; build started\\n&quot;;      return $self; }  1;  <\/code><\/pre>\n<p>  \u041e\u043d \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442, \u0438\u0449\u0435\u0442 \u0444\u0435\u0440\u043c\u044b, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u044c, \u0438 \u043e\u0431\u044a\u0435\u043c \u0441\u043a\u043b\u0430\u0434\u0430. \u0422\u0430\u043a \u0436\u0435 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u00abbuild_something\u00bb. \u042f \u043e\u0441\u043e\u0431\u043e \u043d\u0435 \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u043b\u0441\u044f \u043d\u0430\u0434 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043e\u0441\u043e\u0431\u043e\u0439 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0435\u0439 \u043f\u043e\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430 \u0442\u0430\u043a, \u043a\u0430\u043a \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0435 \u043d\u0443\u0436\u043d\u044b\u043c. \u041c\u043e\u0434\u0443\u043b\u044c \u0434\u043b\u044f \u00ab\u0444\u0435\u0440\u043c\u00bb (\u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u043a\u0440\u0435\u0441\u0442\u044c\u044f\u043d\u0441\u043a\u0438\u0445 \u043f\u043e\u0441\u0435\u043b\u0435\u043d\u0438\u0439) Farm.pm:<\/p>\n<pre><code class=\"perl\">package GrepolisBotModules::Farm;  use GrepolisBotModules::Request; use GrepolisBotModules::Log;  use JSON;  my $get_farm_data = sub { \t \tmy $self = shift;      my $resp = JSON-&gt;new-&gt;allow_nonref-&gt;decode(         GrepolisBotModules::Request::request(                 'farm_town_info',                 'claim_info',                 $self-&gt;{'town'}-&gt;getId,                 '{&quot;id&quot;:&quot;'.$self-&gt;{'id'}.'&quot;}',                 0             )         );      $self-&gt;{'name'} = $resp-&gt;{'json'}-&gt;{'json'}-&gt;{'farm_town_name'};     $resp-&gt;{'json'}-&gt;{'html'} =~ \/&lt;h4&gt;You\\sreceive:\\s\\d+\\sresources&lt;\\\/h4&gt;&lt;ul&gt;&lt;li&gt;(\\d+)\\swood&lt;\\\/li&gt;&lt;li&gt;\\d+\\srock&lt;\\\/li&gt;&lt;li&gt;\\d+\\ssilver\\scoins&lt;\\\/li&gt;&lt;\\\/ul&gt;\/;     $self-&gt;{'resources_by_request'} = $1;     if($resp-&gt;{'json'}-&gt;{'html'} =~ \/&lt;h4&gt;Upgrade\\slevel\\s\\((\\d)\\\/6\\)&lt;\\\/h4&gt;\/ ){         $self-&gt;{'level'} = $1;     }else{         die('Level not found');     } };  my $upgrade = sub{ \tmy $self = shift;  \tmy $donate = $self-&gt;{'town'}-&gt;toUpgradeResources();      $json = '{&quot;target_id&quot;:'.$self-&gt;{'id'}.',&quot;wood&quot;:'.$donate-&gt;{'wood'}.',&quot;stone&quot;:'.$donate-&gt;{'stone'}.',&quot;iron&quot;:'.$donate-&gt;{'iron'}.',&quot;town_id&quot;:&quot;'.$self-&gt;{'town'}-&gt;getId().'&quot;}';     my $response_body = GrepolisBotModules::Request::request('farm_town_info', 'send_resources', $self-&gt;{'town'}-&gt;getId(), $json, 1);     GrepolisBotModules::Log::echo 1, &quot;Village send request. Town ID &quot;.$self-&gt;{'town'}-&gt;getId().&quot; Village ID &quot;.$self-&gt;{'id'}.&quot;\\n&quot;; }; my $claim = sub{ \tmy $self = shift; \t$json = '{&quot;target_id&quot;:&quot;'.$self-&gt;{'id'}.'&quot;,&quot;claim_type&quot;:&quot;normal&quot;,&quot;time&quot;:300,&quot;town_id&quot;:&quot;'.$self-&gt;{'town'}-&gt;getId.'&quot;}';     my $response_body = GrepolisBotModules::Request::request('farm_town_info', 'claim_load', $self-&gt;{'town'}-&gt;getId, $json, 1);      my $json = JSON-&gt;new-&gt;allow_nonref-&gt;decode($response_body)-&gt;{'json'};     if(defined $json-&gt;{'notifications'}){         foreach my $arg (@{$json-&gt;{'notifications'}}) {             if(                 $arg-&gt;{'type'} eq 'backbone' &&                 $arg-&gt;{'subject'} eq 'Town'             ){                 my $town = JSON-&gt;new-&gt;allow_nonref-&gt;decode($arg-&gt;{'param_str'})-&gt;{'Town'};                 $self-&gt;{'town'}-&gt;setResources($town-&gt;{'last_iron'}, $town-&gt;{'last_stone'}, $town-&gt;{'last_wood'});             }         }     }      GrepolisBotModules::Log::echo 1, &quot;Farm &quot;.$self-&gt;{'id'}.&quot; claim finished\\n&quot;; };  my $needUpgrade = sub { \tmy $self = shift; \tif($self-&gt;{'level'} &lt; 6){ \t\treturn true; \t}else{ \t\treturn false; \t} };  my $tick; $tick = sub {  \tmy $self = shift;  \tif($self-&gt;{'town'}-&gt;needResources($self-&gt;{'resources_by_request'})){ \t\t$self-&gt;$claim(); \t    GrepolisBotModules::Async::delay( 360 + int(rand(240)), sub { $self-&gt;$tick} ); \t}elsif($self-&gt;$needUpgrade()){ \t\t$self-&gt;$upgrade(); \t\tGrepolisBotModules::Async::delay( 600 + int(rand(240)), sub { $self-&gt;$tick} );     } };  sub new {     my $class = shift;      my $self = {         id =&gt; shift,         name =&gt; undef,         resources_by_request =&gt; undef,         town =&gt; shift,         level =&gt; undef     };     GrepolisBotModules::Log::echo 0, &quot;Farm &quot;.$self-&gt;{'id'}.&quot; init started\\n&quot;;     bless $self, $class;          $self-&gt;$get_farm_data;     GrepolisBotModules::Log::echo 0, &quot;Farm &quot;.$self-&gt;{'id'}.&quot; data gettings finished\\n&quot;;     $self-&gt;$tick;     GrepolisBotModules::Log::echo 0, &quot;Farm &quot;.$self-&gt;{'id'}.&quot; ticker started\\n&quot;;      return $self; }  1; <\/code><\/pre>\n<p>  \u0424\u0435\u0440\u043c\u0430, \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u0432\u043e\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u043e\u0442\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u043a\u0430\u0436\u0434\u044b\u0435 5 \u043c\u0438\u043d\u0443\u0442. \u0427\u0442\u043e\u0431\u044b \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445, \u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e, \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0443\u0436\u043d\u044b \u043b\u0438 \u0433\u043e\u0440\u043e\u0434\u0443 \u044d\u0442\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e, \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043f\u043e\u0441\u0435\u043b\u0435\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u043e \u0434\u0430\u0432\u0430\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0437\u0430 \u0440\u0430\u0437. \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0441 \u043f\u043e\u0441\u0435\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u044b \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f, \u0438 \u0438\u0445 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0437\u0430\u0434\u0430\u044e \u0433\u043e\u0440\u043e\u0434\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u0441\u044b\u043b\u0430\u0442\u044c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. \u0415\u0449\u0435 \u043d\u0430\u043f\u0438\u0448\u0443 \u043f\u0440\u043e \u043e\u0434\u0438\u043d \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0438\u0437 \u043c\u043e\u0434\u0443\u043b\u044f, \u0447\u0442\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043f\u043e\u0441\u044b\u043b\u043a\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440, Request.pm:<\/p>\n<pre><code class=\"perl\">if($response_body =~ \/^{\/){     my $json = JSON-&gt;new-&gt;allow_nonref-&gt;decode( $response_body )-&gt;{'json'};     if(defined $json-&gt;{'notifications'}){         foreach my $arg (@{$json-&gt;{'notifications'}}) {             if(                 (                     $arg-&gt;{'type'} ne 'building_finished' &&                     $arg-&gt;{'type'} ne 'newreport' &&                     (                         $arg-&gt;{'type'} ne 'backbone' ||                         $arg-&gt;{'type'} eq 'backbone' &&                          (                             !(defined $arg-&gt;{'subject'}) ||                             (                                 $arg-&gt;{'subject'} ne 'BuildingOrder' &&                                 $arg-&gt;{'subject'} ne 'Town' &&                                 $arg-&gt;{'subject'} ne 'PlayerRanking' &&                                 $arg-&gt;{'subject'} ne 'Buildings' &&                                 $arg-&gt;{'subject'} ne 'IslandQuest' &&                                 $arg-&gt;{'subject'} ne 'TutorialQuest'                             )                         )                     )                 )             ){                 GrepolisBotModules::Log::dump 5, $arg;             }         }     } } <\/code><\/pre>\n<p>  \u042f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e \u043d\u043e\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043e\u0434\u043d\u0443, \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0443\u044e \u043c\u0435\u043d\u044f. \u0410 \u0438\u043c\u0435\u043d\u043d\u043e \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043a\u0430\u043f\u0447\u0438. \u0412\u043e\u043e\u0431\u0449\u0435-\u0442\u043e \u044f \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0434\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u0432\u043e\u0434\u0438\u0442\u044c \u043a\u0430\u043f\u0447\u0443, \u0447\u0442\u043e\u0431\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0431\u043e\u0442\u0430. \u0415\u0449\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u00ab\u043d\u043e\u0447\u043d\u043e\u0439 \u0440\u0435\u0436\u0438\u043c\u00bb \u2014 \u0447\u0442\u043e\u0431\u044b \u0431\u043e\u0442 \u043d\u0435 \u043e\u0442\u0441\u044b\u043b\u0430\u043b \u0432 \u043d\u043e\u0447\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u044b. \u0425\u043e\u0442\u044f, \u0435\u0441\u043b\u0438 \u0441\u043a\u043b\u0430\u0434\u044b \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u043b\u043d\u044b \u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430 \u043f\u043e\u043b\u043d\u0430 \u0434\u043e\u043b\u0433\u0438\u043c\u0438 \u0437\u0430\u0434\u0430\u043d\u0438\u044f\u043c\u0438, \u0442\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438 \u0442\u0430\u043a \u0441\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0431\u0443\u0434\u0443\u0442.<\/p>\n<p>  \u0412 \u0438\u0433\u0440\u0435 \u043f\u0435\u0440\u0432\u044b\u0439 \u0433\u043e\u0440\u043e\u0434 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439, \u043d\u043e \u043f\u043e\u0442\u043e\u043c \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0442\u044c \u043d\u0430 \u0433\u043e\u0440\u043e\u0434\u0430, \u0447\u0442\u043e \u0441\u0442\u043e\u044f\u0442 \u043c\u043e\u0440\u0441\u043a\u0443\u044e \u0430\u0442\u0430\u043a\u0443\u044e\u0449\u0443\u044e \u0430\u0440\u043c\u0438\u044e, \u043c\u043e\u0440\u0441\u043a\u0443\u044e \u0437\u0430\u0449\u0438\u0442\u043d\u0443\u044e \u0438 \u0441\u0443\u0445\u043e\u043f\u0443\u0442\u043d\u044b\u0435 \u0430\u0442\u0430\u043a\u0443\u044e\u0449\u0443\u044e\/\u0437\u0430\u0449\u0438\u0442\u043d\u0443\u044e. \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u0438\u043f\u0430 \u0433\u043e\u0440\u043e\u0434\u0430, \u0432 \u043d\u0435\u043c \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0437\u0434\u0430\u043d\u0438\u0439, \u0434\u043b\u044f \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0438 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f, \u0438 \u0440\u0430\u0437\u043d\u0430\u044f \u043d\u0430\u0443\u0447\u043d\u0430\u044f \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430. \u0411\u0443\u0434\u0443 \u0440\u0430\u0434 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438, \u0441\u0442\u043e\u0438\u0442 \u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0430\u0432\u0442\u043e\u043f\u043e\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u0430\u0440\u043c\u0438\u0439, \u0437\u0434\u0430\u043d\u0438\u0439, \u0430\u0432\u0442\u043e\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0433\u043e\u0440\u043e\u0434\u0430 \u0438\u043b\u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0431\u043e\u0442\u0430 \u043a\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0430. \u0415\u0449\u0435 \u043c\u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0431\u0443\u0434\u0435\u0442 \u043b\u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0432\u043e\u0439\u0441\u043a \u043f\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e. <\/p>\n<p>  \u0421 \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435\u043c \u043e\u0442\u0432\u0435\u0447\u0443 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 Grepolis, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c.    \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/201272\/\"> http:\/\/habrahabr.ru\/post\/201272\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t<img decoding=\"async\" src=\"http:\/\/browser-online-games.info\/wp-content\/uploads\/2012\/11\/grepolis.jpg\" alt=\"image\" align=\"left\"\/> \u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043e\u043f\u0438\u0448\u0443 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u043e\u0442\u0430 \u0434\u043b\u044f \u043e\u043d\u043b\u0430\u0439\u043d mmo strategy \u0438\u0433\u0440\u044b Grepolis. \u0423\u0447\u0442\u0438\u0442\u0435, \u0447\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c\u0438 \u0438\u0433\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043e, \u0437\u0430 \u044d\u0442\u043e \u0431\u0430\u043d\u044f\u0442, \u0438 \u043d\u0435 \u0431\u0435\u0437\u043f\u0440\u0438\u0447\u0438\u043d\u043d\u043e. \u041f\u0440\u043e\u0441\u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u0445\u043e\u0431\u0431\u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u0431\u043e\u0442\u044b \u0434\u043b\u044f \u0438\u0433\u0440. \u0410 \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435 \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043e. \u041a\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u043b\u043e\u0433\u0438\u043a\u0430 \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u043f\u0440\u043e\u0448\u0443 \u043f\u043e\u0434 \u043a\u0430\u0442.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-201272","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/201272","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=201272"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/201272\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=201272"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=201272"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=201272"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}