Skip to content

Commit fdc0f0f

Browse files
committed
Added qjump - Jump straight to a specific position using /qjump [pos]
1 parent c858a27 commit fdc0f0f

1 file changed

Lines changed: 44 additions & 1 deletion

File tree

‎app.py‎

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,49 @@ def qswap(user_id, queue_id, swap_with):
107107
finally:
108108
return to_static_channel_response(message)
109109

110+
# -- JUMP --
111+
@app.route('/qjump', methods=['POST'])
112+
def qjump_endpoint():
113+
if len(request.form['text'].split(' ')) < 1:
114+
return to_static_channel_response("Invalid jump request. Usage: /qjump [pos] or /qjump [queue] [pos]")
115+
elif len(request.form['text'].split(' ')) == 1:
116+
queue_id, jump_to_pos = f"#{request.form['channel_id']}", request.form['text']
117+
elif len(request.form['text'].split(' ')) == 2:
118+
queue_id, jump_to_pos = request.form['text'].split(' ')
119+
else:
120+
return to_static_channel_response("Invalid jump request. Usage: /qjump [pos] or /qjump [queue] [pos]")
121+
122+
try:
123+
int_jump_to_pos = int(jump_to_pos)
124+
return qjump(request.form['user_id'], queue_id, int_jump_to_pos)
125+
except ValueError:
126+
return to_static_channel_response("Invalid position. Please provide a valid number.")
127+
128+
def qjump(user_id, queue_id, position):
129+
if queue_id not in queues:
130+
queues[queue_id] = []
131+
132+
current_pos = get_queue_position_by_id(queue_id, user_id)
133+
134+
max_position = len(queues[queue_id]) + 1 if current_pos is None else len(queues[queue_id])
135+
if position < 1 or position > max_position:
136+
return to_static_channel_response(f"Invalid position {position}. Please provide a position between 1 and {max_position}.")
137+
138+
if current_pos is not None and position == current_pos:
139+
return to_static_channel_response(f"{make_tag(user_id)} is already at position {position} in {get_queue_designation(queue_id)}.\n{pretty_queue(queue_id)}")
140+
141+
if current_pos is not None:
142+
queues[queue_id].pop(current_pos - 1)
143+
queues[queue_id].insert(position - 1, user_id)
144+
message = f"{make_tag(user_id)} jumped from position {current_pos} to position {position} in {get_queue_designation(queue_id)}.\n{pretty_queue(queue_id)}"
145+
else:
146+
# User is not in queue so just insert them at the requested position
147+
queues[queue_id].insert(position - 1, user_id)
148+
enqueued_users[user_id] = {'joined': datetime.datetime.now(), 'queue_id': queue_id}
149+
message = f"{make_tag(user_id)} has joined {get_queue_designation(queue_id)} at position {position}.\n{pretty_queue(queue_id)}"
150+
151+
return to_static_channel_response(message)
152+
110153
# -- KICK --
111154
@app.route('/qkick', methods=['POST'])
112155
def qkick_endpoint():
@@ -320,7 +363,7 @@ def fallback_if_blank(input, fallback):
320363
def to_static_channel_response(message: str):
321364
return jsonify({
322365
"response_type": "in_channel",
323-
"text": f"{message}\n_Commands:_ `/qshow`, `/qjoin`, `/qleave`, `/qswap [pos]` _and_ `/qkick [pos]`"
366+
"text": f"{message}\n_Commands:_ `/qshow`, `/qjoin`, `/qleave`, `/qswap [pos]`, `/qjump [pos]` _and_ `/qkick [pos]`"
324367
})
325368

326369
def get_backup_file_path():

0 commit comments

Comments
 (0)