5 changed files with 130 additions and 0 deletions
@ -0,0 +1 @@ |
|||||
|
__pycache__/ |
||||
@ -0,0 +1,88 @@ |
|||||
|
""""""""""""""""""""""" |
||||
|
Zammad <-> Telegram bot |
||||
|
""""""""""""""""""""""" |
||||
|
|
||||
|
from telegram_interface import * |
||||
|
from zammad_interface import * |
||||
|
|
||||
|
import threading |
||||
|
import json |
||||
|
|
||||
|
""" |
||||
|
Constant definition |
||||
|
""" |
||||
|
|
||||
|
# Refresh frequency in second |
||||
|
refresh_delay = 2 |
||||
|
|
||||
|
""" |
||||
|
Funciton definition |
||||
|
""" |
||||
|
|
||||
|
# Save the tickets in used to a file |
||||
|
def save_json(dict): |
||||
|
fs = open("../tickets.txt", "w") |
||||
|
fs.write(json.dumps(dict)) |
||||
|
fs.close() |
||||
|
|
||||
|
# Fetch from the same file the tickets |
||||
|
def load_json(): |
||||
|
fs = open("../tickets.txt", "r") |
||||
|
stringify = fs.read() |
||||
|
fs.close() |
||||
|
parsed = json.loads(stringify) |
||||
|
return parsed |
||||
|
|
||||
|
# Close btn event handler |
||||
|
def close_btn_handler(telegram_id): |
||||
|
ticket_id = [ticket_id for ticket_id in tickets if tickets[ticket_id]["telegram_id"] == telegram_id][0] |
||||
|
switch_to_close(ticket_id) |
||||
|
tickets.pop(ticket_id) |
||||
|
save_json() |
||||
|
|
||||
|
# looper |
||||
|
def set_interval(func,time): |
||||
|
e = threading.Event() |
||||
|
while not e.wait(time): |
||||
|
func() |
||||
|
|
||||
|
# main loop |
||||
|
def main(): |
||||
|
# Fetch tickets from zammad |
||||
|
current_tickets = fetch_tickets() |
||||
|
# Refresh tickets on telegram if any are new |
||||
|
for ticket in current_tickets: |
||||
|
if ticket["id"] not in tickets: |
||||
|
# Add the new ticket and push a message to telegram |
||||
|
tickets[ticket["id"]] = { |
||||
|
"telegram_id": None, |
||||
|
"zammad_ticket": ticket, |
||||
|
} |
||||
|
telegram_id = push_new_ticket(ticket) |
||||
|
tickets[ticket["id"]]["telegram_id"] = telegram_id |
||||
|
save_json() |
||||
|
else: |
||||
|
# Check for any update |
||||
|
if json.dumps(tickets[ticket["id"]]["zammad_ticket"]) != json.dumps(ticket): |
||||
|
update_ticket(tickets[ticket["id"]]["telegram_id"], ticket) |
||||
|
# Switch telegram msg of a ticket to close if it no longer appears among the open tickets on zammad |
||||
|
for ticket_id in tickets: |
||||
|
if ticket_id not in [ticket["id"] for ticket in current_tickets]: |
||||
|
switch_to_close(tickets[ticket_id]["telegram_id"]) |
||||
|
tickets.pop(ticket_id) |
||||
|
save_json() |
||||
|
|
||||
|
|
||||
|
""" |
||||
|
The damn thing |
||||
|
""" |
||||
|
|
||||
|
# Fetch previously in used tickets |
||||
|
tickets = load_json() |
||||
|
|
||||
|
# Wait for both side to be ready |
||||
|
init_zammad() |
||||
|
init_telegram() |
||||
|
|
||||
|
# Run the damn thing |
||||
|
set_interval(main, refresh_delay) |
||||
@ -0,0 +1,28 @@ |
|||||
|
""""""""""""""""""""" |
||||
|
Telegram interface |
||||
|
""""""""""""""""""""" |
||||
|
|
||||
|
# Anything that need to be run before the main loop is started |
||||
|
def init_telegram(): |
||||
|
pass |
||||
|
|
||||
|
# Push a new message to the telegram channel with the relevant information extracted from ticket |
||||
|
# Return the id of the telegram freshly created message |
||||
|
def push_new_ticket(ticket): |
||||
|
pass |
||||
|
|
||||
|
# Update a ticket from the associated message id with the new updated ticket |
||||
|
def update_ticket(msg_id, updated_ticket): |
||||
|
pass |
||||
|
|
||||
|
# Switch a message to the closed state from its id |
||||
|
def switch_to_close(msg_id): |
||||
|
pass |
||||
|
|
||||
|
# Event subscribers declaration |
||||
|
# on close btn press event <- replace that with what it describes |
||||
|
def close_btn_callback(something): |
||||
|
msg_id = "the mesage id fetch from something" |
||||
|
close_btn_handler(msg_id) |
||||
|
# I need to find a way to make a jump to this function in the main file |
||||
|
# Can't just import the file unfortunately |
||||
@ -0,0 +1,12 @@ |
|||||
|
""""""""""""""""""""" |
||||
|
Zammad interface |
||||
|
""""""""""""""""""""" |
||||
|
|
||||
|
# Anything that need to be run before the main loop is started |
||||
|
def init_zammad(): |
||||
|
pass |
||||
|
|
||||
|
# Fetch all tickets with the open state |
||||
|
# And return the following: [{all the ticket thing return by the api},...] |
||||
|
def fetch_tickets(): |
||||
|
pass |
||||
@ -0,0 +1 @@ |
|||||
|
{} |
||||
Loading…
Reference in new issue