2024-01-06, update for ibon/tixcraft.

master
Your Name 2024-01-12 14:43:24 +08:00
parent 734eef7903
commit 4b3f743f33
16 changed files with 777 additions and 130 deletions

View File

@ -41,7 +41,7 @@ try:
except Exception as exc: except Exception as exc:
pass pass
CONST_APP_VERSION = "MaxBot (2024.01.05)" CONST_APP_VERSION = "MaxBot (2024.01.06)"
CONST_MAXBOT_ANSWER_ONLINE_FILE = "MAXBOT_ONLINE_ANSWER.txt" CONST_MAXBOT_ANSWER_ONLINE_FILE = "MAXBOT_ONLINE_ANSWER.txt"
CONST_MAXBOT_CONFIG_FILE = "settings.json" CONST_MAXBOT_CONFIG_FILE = "settings.json"

View File

@ -22,7 +22,7 @@ import sys
import threading import threading
import webbrowser import webbrowser
CONST_APP_VERSION = "MaxBot (2024.01.05)" CONST_APP_VERSION = "MaxBot (2024.01.06)"
CONST_MAXBOT_LAUNCHER_FILE = "config_launcher.json" CONST_MAXBOT_LAUNCHER_FILE = "config_launcher.json"
CONST_MAXBOT_CONFIG_FILE = "settings.json" CONST_MAXBOT_CONFIG_FILE = "settings.json"

View File

@ -38,7 +38,7 @@ try:
except Exception as exc: except Exception as exc:
pass pass
CONST_APP_VERSION = "MaxBot (2024.01.05)" CONST_APP_VERSION = "MaxBot (2024.01.06)"
CONST_MAXBOT_ANSWER_ONLINE_FILE = "MAXBOT_ONLINE_ANSWER.txt" CONST_MAXBOT_ANSWER_ONLINE_FILE = "MAXBOT_ONLINE_ANSWER.txt"
CONST_MAXBOT_CONFIG_FILE = "settings.json" CONST_MAXBOT_CONFIG_FILE = "settings.json"

File diff suppressed because one or more lines are too long

View File

@ -1,21 +1,109 @@
const storage = chrome.storage.local; const storage = chrome.storage.local;
var settings = null; var settings = null;
//console.log("start ibon area");
// price row. // price row.
$("table > tbody > tr.disabled").remove(); $("table.table > tbody > tr.disabled").remove();
$("table > tbody > tr.sold-out").remove(); $("table.table > tbody > tr.sold-out").remove();
$("div.map > div > img").remove(); $("div.map > div > img").remove();
$("footer").remove(); $("footer").remove();
let $tr=$("table > tbody > tr[onclick]");
var $tr=$("table.table > tbody > tr[onclick]");
//console.log("$tr.length:"+$tr.length); //console.log("$tr.length:"+$tr.length);
if($tr.length==1) { if($tr.length==1) {
//console.log("$tr.html:"+$tr.html()); //console.log("$tr.html:"+$tr.html());
$tr.click(); $tr.click();
} }
function ibon_area_ready(settings) {
let area_keyword_array = [];
if(settings) {
if(settings.area_auto_select.area_keyword.length > 0) {
if(settings.area_auto_select.area_keyword!='""') {
area_keyword_array = JSON.parse('[' + settings.area_auto_select.area_keyword +']');
}
}
}
//let target_area = [];
let target_row=null;
let all_row = $("table.table > tbody > tr[onclick]");
if (all_row.length > 0)
{
if (all_row.length == 1) {
// single select.
target_row=all_row;
} else {
// multi select.
all_row.each(function ()
{
//console.log(all_row.index(this));
let is_match_keyword = false;
if(all_row.index(this)==0) {
target_row=$(this);
} else {
if(area_keyword_array.length) {
let html_text=$(this).text();
//console.log("html:"+html_text);
for (let i = 0; i < area_keyword_array.length; i++) {
// TOOD: multi item matched, need sort.
// target_area = get_target_area_with_order(settings, matched_block);
if(html_text.indexOf(area_keyword_array[i])>-1) {
is_match_keyword = true;
target_row=$(this);
break;
}
}
} else {
if(all_row.index(this)==0) {
is_match_keyword = true;
target_row=$(this);
}
}
}
//console.log("is_match_keyword:"+is_match_keyword);
if(is_match_keyword) {
return;
}
});
}
if(target_row) {
target_row.click();
}
} else {
location.reload();
}
}
function ibon_area_clean_exclude(settings)
{
let exclude_keyword_array = [];
if(settings) {
if(settings.keyword_exclude.length > 0) {
if(settings.keyword_exclude != '""') {
exclude_keyword_array = JSON.parse('[' + settings.keyword_exclude +']');
}
}
}
for (let i = 0; i < exclude_keyword_array.length; i++) {
$("table.table > tbody > tr").each(function ()
{
let html_text=$(this).text();
//console.log("html:"+html_text);
if(html_text.indexOf(exclude_keyword_array[i])>-1) {
$(this).remove();
}
});
}
}
function ibon_area_main() { function ibon_area_main() {
let reload=false; let reload=false;
let $tr=$("table > tbody > tr[onclick]"); let $tr=$("table.table > tbody > tr[onclick]");
if($tr.length==0) { if($tr.length==0) {
reload=true; reload=true;
} }
@ -33,6 +121,9 @@ function ibon_area_main() {
location.reload(); location.reload();
}, auto_reload_page_interval * 1000); }, auto_reload_page_interval * 1000);
} }
} else {
ibon_area_clean_exclude(settings);
ibon_area_ready(settings);
} }
} }

View File

@ -1,2 +1,164 @@
// TODO: ... const storage = chrome.storage.local;
console.log("TODO: date auto click..."); var settings = null;
function ibon_detail_ajax_done(game_info)
{
let date_keyword_array = [];
if(settings) {
if(settings.date_auto_select.date_keyword.length > 0) {
date_keyword_array = JSON.parse('[' + settings.date_auto_select.date_keyword +']');
}
}
let reload=false;
let target_href = "";
//console.log(game_info.Item);
if(game_info.Item.GIHtmls.length) {
// one of game able to buy.
let one_can_buy = false;
for (let i = 0; i < game_info.Item.GIHtmls.length; i++) {
let rs = game_info.Item.GIHtmls[i];
if(game_info.Item.GIHtmls.length==1) {
// single row.
if(rs.Href==null) {
reload=true;
} else {
if(rs.CanBuy==false) {
reload=true;
} else {
one_can_buy = true;
target_href = rs.Href;
}
}
if(reload) {
break;
}
} else {
// multi rows.
if(settings) {
let is_match_row = false;
if(date_keyword_array.length) {
for (let j = 0; j < date_keyword_array.length; j++) {
// TOOD: multi item matched, need sort.
// target_area = get_target_area_with_order(settings, matched_block);
if(rs.ShowSaleDate.indexOf(date_keyword_array[j])>-1) {
is_match_row = true;
}
if(rs.GameInfoName.indexOf(date_keyword_array[j])>-1) {
is_match_row = true;
}
if(is_match_row) {
break;
}
}
} else {
// empty keyword.
is_match_row = true;
}
if(is_match_row) {
if(rs.Href!=null) {
if(rs.CanBuy!=false) {
one_can_buy = true;
target_href = rs.Href;
break;
}
}
}
}
}
}
if(!reload) {
if(one_can_buy == false) reload=true;
}
}
console.log("reload:"+reload);
console.log("target_href:"+target_href);
if(reload) {
let auto_reload_page_interval = 0.0;
if(settings) {
auto_reload_page_interval = settings.advanced.auto_reload_page_interval;
}
if(auto_reload_page_interval == 0) {
//console.log('Start to reload now.');
location.reload();
} else {
console.log('We are going to reload after few seconeds.');
setTimeout(function () {
location.reload();
}, auto_reload_page_interval * 1000);
}
}
else {
// goto target event.
//console.log(target_href);
if(target_href.length > 0) {
location.href= "https://ticket.ibon.com.tw/" + target_href;
}
}
}
function ibon_event_status_check()
{
const currentUrl = window.location.href;
const event_code = currentUrl.split('/')[5];
//console.log(currentUrl);
//console.log(event_code);
if(event_code){
let api_url = "https://ticketapi.ibon.com.tw/api/ActivityInfo/GetGameInfoList";
"{\"id\":38042,\"hasDeadline\":true,\"SystemBrowseType\":0}"
dataJSON = {
id: parseInt(event_code, 10),
hasDeadline: true,
SystemBrowseType: 0
}
$.ajax({
url: api_url,
data: JSON.stringify(dataJSON),
type: "POST",
dataType: "json",
xhrFields: {
withCredentials: true
},
headers: {
"x-xsrf-token": getCookie("XSRF-TOKEN")
},
contentType: "application/json",
success: function(returnData){
ibon_detail_ajax_done(returnData);
//console.log(returnData);
},
error: function(xhr, ajaxOptions, thrownError){
//console.log(xhr.status);
//console.log(thrownError);
}
});
}
}
storage.get('settings', function (items)
{
if (items.settings)
{
settings = items.settings;
}
});
storage.get('status', function (items)
{
if (items.status && items.status=='ON')
{
console.log("start to ibon detail.");
//console.log(document.cookie);
//console.log(getCookie("XSRF-TOKEN"));
ibon_event_status_check();
} else {
console.log('no status found');
}
});

View File

@ -3,7 +3,7 @@ var settings = null;
$("footer").remove(); $("footer").remove();
function assign_ticket_number(ticket_number) function ibon_assign_ticket_number(ticket_number)
{ {
let $main_table = $("table.table"); let $main_table = $("table.table");
if ($main_table.length > 0) if ($main_table.length > 0)
@ -36,7 +36,7 @@ function assign_ticket_number(ticket_number)
} }
} }
function assign_adjacent_seat(flag) { function ibon_assign_adjacent_seat(flag) {
//console.log("disable_adjacent_seat flag:"+flag); //console.log("disable_adjacent_seat flag:"+flag);
if(flag) { if(flag) {
$('input[type=checkbox]').each(function() { $('input[type=checkbox]').each(function() {
@ -45,21 +45,133 @@ function assign_adjacent_seat(flag) {
} }
} }
function focus_on_captcha() function ibon_focus_on_captcha()
{ {
$("div.editor-box > div > input[type='text']").focus(); $("div.editor-box > div > input[type='text']").focus();
} }
var myInterval = null;
function ibon_get_ocr_image()
{
//console.log("get_ocr_image");
let image_data = "";
// PS: tixcraft have different domain to use the same content script.
const currentUrl = window.location.href;
const domain = currentUrl.split('/')[2];
let image_id = 'chk_pic';
let img = document.getElementById(image_id);
if(img!=null) {
let canvas = document.createElement('canvas');
let context = canvas.getContext('2d');
canvas.height = img.naturalHeight;
canvas.width = img.naturalWidth;
context.drawImage(img, 0, 0);
let img_data = canvas.toDataURL();
if(img_data) {
image_data = img_data.split(",")[1];
//console.log(image_data);
}
}
return image_data;
}
chrome.runtime.onMessage.addListener((message) => {
//console.log('sent from background', message);
ibon_set_ocr_answer(message.answer);
});
function ibon_set_ocr_answer(answer)
{
console.log("answer:"+answer);
if(answer.length > 0) {
$("div.editor-box > div > input[type='text']").val(answer);
//console.log($("div#ticket-wrap a[onclick]").length);
//$("div#ticket-wrap a[onclick]").click();
//$("#aspnetForm").submit();
let done_div="<div style='display:none' id='done'></div>";
$("body").append(done_div);
}
}
async function ibon_get_ocr_answer(api_url, image_data)
{
let bundle = {
action: 'ocr',
data: {
'url': api_url + 'ocr',
'image_data':image_data,
}
};
let bundle_string = JSON.stringify(bundle);
const return_answer = await chrome.runtime.sendMessage(bundle);
//console.log(return_answer);
}
function ibon_orc_image_ready(api_url)
{
let ret=false;
let image_data = ibon_get_ocr_image();
if(image_data.length>0) {
ret=true;
if(myInterval) clearInterval(myInterval);
ibon_get_ocr_answer(api_url, image_data);
}
//console.log("ibon_orc_image_ready:"+ret);
return ret;
}
storage.get('settings', function (items) storage.get('settings', function (items)
{ {
if (items.settings) if (items.settings)
{ {
settings = items.settings; settings = items.settings;
//console.log("ticket_number:"+ settings.ticket_number);
assign_ticket_number(settings.ticket_number);
assign_adjacent_seat(settings.advanced.disable_adjacent_seat);
focus_on_captcha();
} else { } else {
console.log('no settings found'); console.log('no settings found');
} }
}); });
storage.get('settings', function (items)
{
if (items.settings)
{
settings = items.settings;
}
});
storage.get('status', function (items)
{
if (items.status && items.status=='ON')
{
//console.log("ticket_number:"+ settings.ticket_number);
ibon_assign_ticket_number(settings.ticket_number);
ibon_assign_adjacent_seat(settings.advanced.disable_adjacent_seat);
// ocr
if(settings.ocr_captcha.enable) {
let remote_url_string = "";
let remote_url_array = [];
if(settings.advanced.remote_url.length > 0) {
remote_url_array = JSON.parse('[' + settings.advanced.remote_url +']');
}
if(remote_url_array.length) {
remote_url_string = remote_url_array[0];
}
if(!ibon_orc_image_ready(remote_url_string)) {
myInterval = setInterval(() => {
ibon_orc_image_ready(remote_url_string);
}, 100);
}
} else {
// no orc, just focus;
ibon_focus_on_captcha();
}
} else {
console.log('no status found');
}
});

View File

@ -0,0 +1,105 @@
var myInterval = null;
//console.log("assign appear");
function kktix_area_keyword(settings, register_info)
{
let area_keyword_array = [];
if(settings.area_auto_select.area_keyword.length > 0) {
area_keyword_array = JSON.parse('[' + settings.area_auto_select.area_keyword +']');
}
// console.log(area_keyword_array);
let target_area = [];
if(area_keyword_array.length) {
for (let i = 0; i < area_keyword_array.length; i++) {
let matched_block=[];
$("div.ticket-unit").each(function ()
{
let html_text=$(this).text();
if(html_text.indexOf(area_keyword_array[i])>-1) {
matched_block.push($(this));
}
target_area = get_target_area_with_order(settings, matched_block);
});
if (matched_block.length) {
console.log("match keyword:" + area_keyword_array[i]);
break;
}
}
} else {
let query_string = "div.ticket-unit";
let matched_block=$(query_string);
target_area = get_target_area_with_order(settings, matched_block);
}
if (target_area.length) {
let first_node = target_area.find(":first-child");
let link_id = first_node.attr("id");
//console.log("link_id: " + link_id);
if(link_id) {
$('input[type=checkbox]').each(function() {
//$(this).prop('checked', true);
if(!$(this).is(':checked')) {
$(this).click();
}
});
let seat_inventory_key=link_id.split("_")[1];
let seat_inventory_number=register_info.inventory.seatInventory[seat_inventory_key];
let ticket_number = settings.ticket_number;
if(seat_inventory_number<ticket_number) {
ticket_number=seat_inventory_number;
}
if(ticket_number>0) {
/*
let target_input = target_area.find("input");
target_input.click();
target_input.prop("value", ticket_number);
let down = $.Event('keydown');
down.key=""+ticket_number;
target_input.trigger(down);
let up = $.Event('keyup');
up.key=""+ticket_number;
target_input.trigger(up);
*/
let add_button = target_area.find('button[ng-click="quantityBtnClick(1)"]');
for(let i=0; i<ticket_number; i++) {
add_button.click();
}
let $next_btn = $('div.register-new-next-button-area > button');
$next_btn.click();
}
}
} else {
console.log("not target_area found.")
}
}
function begin()
{
console.log("begin to next");
$("div#ticket-wrap a[onclick]").click();
}
function dom_ready()
{
let ret=false;
if($("#done").length>0) {
$("#done").remove();
ret=true;
if(myInterval) clearInterval(myInterval);
begin();
}
console.log("dom_ready:"+ret);
return ret;
}
if(!dom_ready()) {
myInterval = setInterval(() => {
dom_ready();
}, 100);
}

View File

@ -4,32 +4,29 @@ var myInterval = null;
function kktix_area_keyword(settings, register_info) function kktix_area_keyword(settings, register_info)
{ {
let area_keyword_array = []; let area_keyword_array = [];
if(settings.area_auto_select.area_keyword.length > 0) { if(settings) {
area_keyword_array = JSON.parse('[' + settings.area_auto_select.area_keyword +']'); if(settings.area_auto_select.area_keyword.length > 0) {
if(settings.area_auto_select.area_keyword!='""') {
area_keyword_array = JSON.parse('[' + settings.area_auto_select.area_keyword +']');
}
}
} }
// console.log(area_keyword_array); // console.log(area_keyword_array);
let target_area = []; let target_area = [];
if(area_keyword_array.length) { if(area_keyword_array.length) {
for (let i = 0; i < area_keyword_array.length; i++) { for (let i = 0; i < area_keyword_array.length; i++) {
let matched_flag=false;
let matched_block=[]; let matched_block=[];
$("div.ticket-unit").each(function () $("div.ticket-unit").each(function ()
{ {
let html_text=$(this).text(); let html_text=$(this).text();
if(html_text.indexOf(exclude_keyword_array[i])>-1) { if(html_text.indexOf(area_keyword_array[i])>-1) {
is_match_keyword=true;
}
if(is_match_keyword) {
matched_block.push($(this)); matched_block.push($(this));
} }
target_area = get_target_area_with_order(settings, matched_block); target_area = get_target_area_with_order(settings, matched_block);
if (target_area.length) {
matched_flag=true;
}
}); });
if (matched_flag) { if (matched_block.length) {
console.log("match keyword:" + area_keyword_array[i]); console.log("match keyword:" + area_keyword_array[i]);
break; break;
} }

View File

@ -5,9 +5,14 @@ var myInterval = null;
function kktix_clean_exclude(settings, register_info) function kktix_clean_exclude(settings, register_info)
{ {
let exclude_keyword_array = []; let exclude_keyword_array = [];
if(settings.keyword_exclude.length > 0) { if(settings) {
exclude_keyword_array = JSON.parse('[' + settings.keyword_exclude +']'); if(settings.keyword_exclude.length > 0) {
if(settings.keyword_exclude != '""') {
exclude_keyword_array = JSON.parse('[' + settings.keyword_exclude +']');
}
}
} }
for (let i = 0; i < exclude_keyword_array.length; i++) { for (let i = 0; i < exclude_keyword_array.length; i++) {
$("div.ticket-unit").each(function () $("div.ticket-unit").each(function ()
{ {

View File

@ -8,9 +8,14 @@ $("footer").remove();
function tixcraft_clean_exclude(settings) function tixcraft_clean_exclude(settings)
{ {
let exclude_keyword_array = []; let exclude_keyword_array = [];
if(settings.keyword_exclude.length > 0) { if(settings) {
exclude_keyword_array = JSON.parse('[' + settings.keyword_exclude +']'); if(settings.keyword_exclude.length > 0) {
if(settings.keyword_exclude != '""') {
exclude_keyword_array = JSON.parse('[' + settings.keyword_exclude +']');
}
}
} }
for (let i = 0; i < exclude_keyword_array.length; i++) { for (let i = 0; i < exclude_keyword_array.length; i++) {
$("ul.area-list > li > a:contains('"+ exclude_keyword_array[i] +"')").each(function () $("ul.area-list > li > a:contains('"+ exclude_keyword_array[i] +"')").each(function ()
{ {
@ -23,8 +28,12 @@ function tixcraft_clean_exclude(settings)
function tixcraft_area_keyword(settings) function tixcraft_area_keyword(settings)
{ {
let area_keyword_array = []; let area_keyword_array = [];
if(settings.area_auto_select.area_keyword.length > 0) { if(settings) {
area_keyword_array = JSON.parse('[' + settings.area_auto_select.area_keyword +']'); if(settings.area_auto_select.area_keyword.length > 0) {
if(settings.area_auto_select.area_keyword!='""') {
area_keyword_array = JSON.parse('[' + settings.area_auto_select.area_keyword +']');
}
}
} }
// console.log(area_keyword_array); // console.log(area_keyword_array);
let target_area=[]; let target_area=[];

View File

@ -27,8 +27,12 @@ function date_clean()
function date_keyword(settings) function date_keyword(settings)
{ {
let date_keyword_array = []; let date_keyword_array = [];
if(settings.date_auto_select.date_keyword.length > 0) { if(settings) {
date_keyword_array = JSON.parse('[' + settings.date_auto_select.date_keyword +']'); if(settings.date_auto_select.date_keyword.length > 0) {
if(settings.date_auto_select.date_keyword!='""') {
date_keyword_array = JSON.parse('[' + settings.date_auto_select.date_keyword +']');
}
}
} }
//console.log(date_keyword_array); //console.log(date_keyword_array);
let target_date; let target_date;

View File

@ -9,26 +9,99 @@ $('input[type=checkbox]').each(function ()
$("img[style='width: 100%; padding: 0;']").remove(); $("img[style='width: 100%; padding: 0;']").remove();
$("footer").remove(); $("footer").remove();
function assign_ticket_number(ticket_number) function tixcraft_ticket_clean_exclude(settings)
{ {
if ($("#ticketPriceList select").length > 0) let exclude_keyword_array = [];
if(settings) {
if(settings.keyword_exclude.length > 0) {
if(settings.keyword_exclude!='""') {
exclude_keyword_array = JSON.parse('[' + settings.keyword_exclude +']');
}
}
}
for (let i = 0; i < exclude_keyword_array.length; i++) {
$("#ticketPriceList > tbody > tr").each(function ()
{
let html_text=$(this).text();
//console.log("html:"+html_text);
if(html_text.indexOf(exclude_keyword_array[i])>-1) {
$(this).remove();
}
});
}
}
function tixcraft_assign_ticket_number(settings)
{
let area_keyword_array = [];
if(settings) {
if(settings.area_auto_select.area_keyword.length > 0) {
if(settings.area_auto_select.area_keyword!='""') {
area_keyword_array = JSON.parse('[' + settings.area_auto_select.area_keyword +']');
}
}
}
//let target_area = [];
let target_row=null;
let all_row = $("#ticketPriceList > tbody > tr");
if (all_row.length > 0)
{ {
let $ticket_options = $("#ticketPriceList select:first option"); if (all_row.length == 1) {
// single select.
target_row=all_row;
} else {
// single select.
all_row.each(function ()
{
//console.log(all_row.index(this));
let is_match_keyword = false;
if(all_row.index(this)==0) {
target_row=$(this);
} else {
if(area_keyword_array.length) {
let html_text=$(this).text();
//console.log("html:"+html_text);
for (let i = 0; i < area_keyword_array.length; i++) {
// TOOD: multi item matched, need sort.
// target_area = get_target_area_with_order(settings, matched_block);
if(html_text.indexOf(area_keyword_array[i])>-1) {
is_match_keyword = true;
target_row=$(this);
break;
}
}
} else {
if(all_row.index(this)==0) {
is_match_keyword = true;
target_row=$(this);
}
}
}
//console.log("is_match_keyword:"+is_match_keyword);
if(is_match_keyword) {
return;
}
});
}
let $ticket_options = target_row.find("option");
if ($ticket_options.length) if ($ticket_options.length)
{ {
let is_ticket_number_assign = false; let is_ticket_number_assign = false;
if (ticket_number > 0) if (settings.ticket_number > 0)
{ {
$ticket_options.each(function () $ticket_options.each(function ()
{ {
if ($(this).val() == ticket_number) if ($(this).val() == settings.ticket_number)
{ {
$(this).prop('selected', true); $(this).prop('selected', true);
is_ticket_number_assign = true; is_ticket_number_assign = true;
return false; return false;
} }
} });
);
} }
if (!is_ticket_number_assign) if (!is_ticket_number_assign)
{ {
@ -68,19 +141,19 @@ function get_ocr_image()
chrome.runtime.onMessage.addListener((message) => { chrome.runtime.onMessage.addListener((message) => {
//console.log('sent from background', message); //console.log('sent from background', message);
set_ocr_answer(message.answer); tixcraft_set_ocr_answer(message.answer);
}); });
function set_ocr_answer(answer) function tixcraft_set_ocr_answer(answer)
{ {
console.log("answer:"+answer); //console.log("answer:"+answer);
if(answer.length > 0) { if(answer.length > 0) {
$('#TicketForm_verifyCode').val(answer); $('#TicketForm_verifyCode').val(answer);
$("button[type='submit']").click(); $("button[type='submit']").click();
} }
} }
async function get_ocr_answer(api_url, image_data) async function tixcraft_get_ocr_answer(api_url, image_data)
{ {
let bundle = { let bundle = {
action: 'ocr', action: 'ocr',
@ -98,27 +171,47 @@ async function get_ocr_answer(api_url, image_data)
//ocr(bundle.data.url, bundle.data.image_data, bundle.data.callback); //ocr(bundle.data.url, bundle.data.image_data, bundle.data.callback);
} }
function orc_image_ready(api_url) function tixcraft_orc_image_ready(api_url)
{ {
let ret=false; let ret=false;
let image_data = get_ocr_image(); let image_data = get_ocr_image();
if(image_data.length>0) { if(image_data.length>0) {
ret=true; ret=true;
if(myInterval) clearInterval(myInterval); if(myInterval) clearInterval(myInterval);
get_ocr_answer(api_url, image_data); tixcraft_get_ocr_answer(api_url, image_data);
} }
console.log("orc_image_ready:"+ret); //console.log("orc_image_ready:"+ret);
return ret; return ret;
} }
storage.get('settings', function (items) storage.get('settings', function (items)
{ {
if (items.settings) if (items.settings)
{ {
settings = items.settings; settings = items.settings;
} else {
console.log('no settings found');
}
});
storage.get('settings', function (items)
{
if (items.settings)
{
settings = items.settings;
}
});
storage.get('status', function (items)
{
if (items.status && items.status=='ON')
{
tixcraft_ticket_clean_exclude(settings);
//console.log("ticket_number:"+ settings.ticket_number); //console.log("ticket_number:"+ settings.ticket_number);
assign_ticket_number(settings.ticket_number); tixcraft_assign_ticket_number(settings);
// ocr
if(settings.ocr_captcha.enable) { if(settings.ocr_captcha.enable) {
let remote_url_string = ""; let remote_url_string = "";
let remote_url_array = []; let remote_url_array = [];
@ -128,13 +221,14 @@ storage.get('settings', function (items)
if(remote_url_array.length) { if(remote_url_array.length) {
remote_url_string = remote_url_array[0]; remote_url_string = remote_url_array[0];
} }
if(!orc_image_ready(remote_url_string)) { if(!tixcraft_orc_image_ready(remote_url_string)) {
myInterval = setInterval(() => { myInterval = setInterval(() => {
orc_image_ready(remote_url_string); tixcraft_orc_image_ready(remote_url_string);
}, 100); }, 100);
} }
} }
} else { } else {
console.log('no settings found'); console.log('no status found');
} }
}); });

View File

@ -91,7 +91,7 @@
"https://ticketmaster.sg/ticket/ticket/*" "https://ticketmaster.sg/ticket/ticket/*"
], ],
"run_at": "document_end", "run_at": "document_end",
"js" : [ "jquery.min.js", "js/tixcraft_ticket.js" ] "js" : [ "jquery.min.js", "js/common.js", "js/tixcraft_ticket.js" ]
}, },
{ {
"matches" : [ "https://ticket.com.tw/application/utk01/utk0101_.aspx" ], "matches" : [ "https://ticket.com.tw/application/utk01/utk0101_.aspx" ],
@ -141,7 +141,7 @@
}, },
{ {
"matches" : [ "https://ticket.ibon.com.tw/ActivityInfo/Details/*" ], "matches" : [ "https://ticket.ibon.com.tw/ActivityInfo/Details/*" ],
"run_at": "document_end", "run_at": "document_start",
"js" : [ "jquery.min.js", "js/ibon_detail.js" ] "js" : [ "jquery.min.js", "js/ibon_detail.js" ]
}, },
{ {
@ -157,6 +157,15 @@
"run_at": "document_end", "run_at": "document_end",
"js" : [ "jquery.min.js", "js/ibon_ticket.js" ] "js" : [ "jquery.min.js", "js/ibon_ticket.js" ]
}, },
{
"matches" : [
"https://orders.ibon.com.tw/application/UTK02/UTK0201_001.aspx?PERFORMANCE_ID=*PERFORMANCE_PRICE_AREA_ID=*",
"https://orders.ibon.com.tw/application/UTK02/UTK0202_.aspx?PERFORMANCE_ID=*PERFORMANCE_PRICE_AREA_ID=*"
],
"run_at": "document_end",
"world": "MAIN",
"js" : [ "jquery.min.js", "js/ibon_ticket_next.js" ]
},
{ {
"matches" : [ "matches" : [
"https://msg.cityline.com/*.html*" "https://msg.cityline.com/*.html*"
@ -224,5 +233,5 @@
"js" : [ "jquery.min.js", "js/common.js", "js/kktix_registrations_reload.js" ] "js" : [ "jquery.min.js", "js/common.js", "js/kktix_registrations_reload.js" ]
} }
], ],
"version": "1.0.3" "version": "1.0.4"
} }

View File

@ -12,90 +12,112 @@
<h2>MaxBot Settings</h2> <h2>MaxBot Settings</h2>
<div class="row g-3"> <div class="row g-3">
<div class="col-12">
<label for="ticket_number" class="form-label">Ticket Number</label>
<select id="ticket_number" class="form-select" aria-label="Default select">
<option selected>Ticket Number</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
</select>
</div>
<div class="col-12"> <ul class="nav nav-tabs" id="myTab" role="tablist">
<label for="date_select_mode" class="form-label">Date Select Order</label> <li class="nav-item" role="presentation">
<select id="date_select_mode" class="form-select" aria-label="Default select"> <button class="nav-link active" id="home-tab" data-bs-toggle="tab" data-bs-target="#home-tab-pane" type="button" role="tab" aria-controls="home-tab-pane" aria-selected="true">Perference</button>
<option value="from top to bottom">from top to bottom</option> </li>
<option value="from bottom to top">from bottom to top</option> <li class="nav-item" role="presentation">
<option value="center">center</option> <button class="nav-link" id="advanced-tab" data-bs-toggle="tab" data-bs-target="#advanced-tab-pane" type="button" role="tab" aria-controls="advanced-tab-pane" aria-selected="false">Advanced</button>
<option value="random">random</option> </li>
</select> </ul>
</div>
<div class="col-12">
<label for="date_keyword" class="form-label">Date Keywords</label>
<textarea class="form-control" id="date_keyword" rows="3"></textarea>
</div>
<div class="col-12"> <div class="tab-content" id="myTabContent">
<label for="area_select_mode" class="form-label">Area Select Order</label> <div class="tab-pane fade show active" id="home-tab-pane" role="tabpanel" aria-labelledby="home-tab" tabindex="0">
<select id="area_select_mode" class="form-select" aria-label="Default select">
<option value="from top to bottom">from top to bottom</option>
<option value="from bottom to top">from bottom to top</option>
<option value="center">center</option>
<option value="random">random</option>
</select>
</div>
<div class="col-12">
<label for="area_keyword" class="form-label">Area Keywords</label>
<textarea class="form-control" id="area_keyword" rows="3"></textarea>
</div>
<div class="col-12"> <div class="row g-3">
<label for="keyword_exclude" class="form-label">Exclude Keywords</label> <div class="col-12">
<textarea class="form-control" id="keyword_exclude" rows="3"></textarea> <label for="ticket_number" class="form-label">Ticket Number</label>
</div> <select id="ticket_number" class="form-select" aria-label="Default select">
<option selected>Ticket Number</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
</select>
</div>
<div class="col-12"> <div class="col-12">
<label for="auto_reload_page_interval" class="form-label">Reload page interval(sec.)</label> <label for="date_select_mode" class="form-label">Date Select Order</label>
<input class="form-control" id="auto_reload_page_interval" value="" /> <select id="date_select_mode" class="form-select" aria-label="Default select">
</div> <option value="from top to bottom">from top to bottom</option>
<option value="from bottom to top">from bottom to top</option>
<option value="center">center</option>
<option value="random">random</option>
</select>
</div>
<div class="col-12">
<label for="date_keyword" class="form-label">Date Keywords</label>
<textarea class="form-control" id="date_keyword" rows="3"></textarea>
</div>
<div class="col-12"> <div class="col-12">
<div class="form-check"> <label for="area_select_mode" class="form-label">Area Select Order</label>
<input class="form-check-input" type="checkbox" id="disable_adjacent_seat"> <select id="area_select_mode" class="form-select" aria-label="Default select">
<label class="form-check-label" for="disable_adjacent_seat"> <option value="from top to bottom">from top to bottom</option>
Disable Adjacent Seat <option value="from bottom to top">from bottom to top</option>
</label> <option value="center">center</option>
<option value="random">random</option>
</select>
</div>
<div class="col-12">
<label for="area_keyword" class="form-label">Area Keywords</label>
<textarea class="form-control" id="area_keyword" rows="3"></textarea>
</div>
<div class="col-12">
<label for="keyword_exclude" class="form-label">Exclude Keywords</label>
<textarea class="form-control" id="keyword_exclude" rows="3"></textarea>
</div>
</div> </div>
</div>
<div class="col-12"> </div>
<div class="form-check"> <div class="tab-pane fade" id="advanced-tab-pane" role="tabpanel" aria-labelledby="advanced-tab" tabindex="0">
<input class="form-check-input" type="checkbox" id="ocr_captcha_enable">
<label class="form-check-label" for="ocr_captcha_enable"> <div class="row g-3">
OCR <div class="col-12">
</label> <label for="auto_reload_page_interval" class="form-label">Reload page interval(sec.)</label>
<input class="form-control" id="auto_reload_page_interval" value="" />
</div>
<div class="col-12">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="disable_adjacent_seat">
<label class="form-check-label" for="disable_adjacent_seat">
Disable Adjacent Seat
</label>
</div>
</div>
<div class="col-12">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="ocr_captcha_enable">
<label class="form-check-label" for="ocr_captcha_enable">
OCR
</label>
</div>
</div>
<div class="col-12">
<label for="remote_url" class="form-label">Remote URL</label>
<input class="form-control" id="remote_url" value="" />
</div>
</div> </div>
</div> </div>
</div>
<div class="col-12">
<label for="remote_url" class="form-label">Remote URL</label>
<input class="form-control" id="remote_url" value="" />
</div>
<div class="col-12"> <div class="col-12">
<button class="btn btn-primary" id="save_btn">Save</button> <button class="btn btn-primary" id="save_btn">Save</button>
</div> </div>
</div> </div>
<script src="options.js"></script> <script src="options.js"></script>
</body> </body>
</html> </html>

View File

@ -29,10 +29,23 @@ async function saveChanges()
if(settings) { if(settings) {
settings.ticket_number = ticket_number_value; settings.ticket_number = ticket_number_value;
settings.date_auto_select.mode = date_select_mode.value; settings.date_auto_select.mode = date_select_mode.value;
settings.date_auto_select.date_keyword = date_keyword.value;
let date_keyword_string = date_keyword.value;
if(date_keyword_string.indexOf('"')==-1) {
date_keyword_string = '"' + date_keyword_string + '"';
}
settings.date_auto_select.date_keyword = date_keyword_string;
settings.area_auto_select.mode = area_select_mode.value; settings.area_auto_select.mode = area_select_mode.value;
settings.area_auto_select.area_keyword = area_keyword.value;
let area_keyword_string = area_keyword.value;
if(area_keyword_string.indexOf('"')==-1) {
area_keyword_string = '"' + area_keyword_string + '"';
}
settings.area_auto_select.area_keyword = area_keyword_string;
settings.keyword_exclude = keyword_exclude.value; settings.keyword_exclude = keyword_exclude.value;
settings.advanced.auto_reload_page_interval = auto_reload_page_interval.value; settings.advanced.auto_reload_page_interval = auto_reload_page_interval.value;
settings.advanced.disable_adjacent_seat = disable_adjacent_seat.checked; settings.advanced.disable_adjacent_seat = disable_adjacent_seat.checked;
settings.ocr_captcha.enable = ocr_captcha_enable.checked; settings.ocr_captcha.enable = ocr_captcha_enable.checked;
@ -67,8 +80,16 @@ function loadChanges()
ticket_number.value = settings.ticket_number; ticket_number.value = settings.ticket_number;
date_select_mode.value = settings.date_auto_select.mode; date_select_mode.value = settings.date_auto_select.mode;
date_keyword.value = settings.date_auto_select.date_keyword; date_keyword.value = settings.date_auto_select.date_keyword;
if(date_keyword.value=='""') {
date_keyword.value='';
}
area_select_mode.value = settings.area_auto_select.mode; area_select_mode.value = settings.area_auto_select.mode;
area_keyword.value = settings.area_auto_select.area_keyword; area_keyword.value = settings.area_auto_select.area_keyword;
if(area_keyword.value=='""') {
area_keyword.value='';
}
keyword_exclude.value = settings.keyword_exclude; keyword_exclude.value = settings.keyword_exclude;
auto_reload_page_interval.value = settings.advanced.auto_reload_page_interval; auto_reload_page_interval.value = settings.advanced.auto_reload_page_interval;
disable_adjacent_seat.checked = settings.advanced.disable_adjacent_seat; disable_adjacent_seat.checked = settings.advanced.disable_adjacent_seat;