|  |  | @@ -0,0 +1,98 @@ | 
		
	
		
			
			|  |  |  | from telegram.ext import Updater, MessageHandler, Filters, CallbackContext, CommandHandler | 
		
	
		
			
			|  |  |  | from telegram import Update, InputMediaPhoto | 
		
	
		
			
			|  |  |  | import json | 
		
	
		
			
			|  |  |  | import sys | 
		
	
		
			
			|  |  |  | import io | 
		
	
		
			
			|  |  |  | import logging | 
		
	
		
			
			|  |  |  | from PIL import Image | 
		
	
		
			
			|  |  |  | import random | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | submissions = {} | 
		
	
		
			
			|  |  |  | names = {} | 
		
	
		
			
			|  |  |  | status = {} | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | def ensure_chat(func): | 
		
	
		
			
			|  |  |  | def wrapper(update, *args, **kwargs): | 
		
	
		
			
			|  |  |  | chat_id = update.effective_chat.id | 
		
	
		
			
			|  |  |  | if chat_id not in submissions: | 
		
	
		
			
			|  |  |  | submissions[chat_id] = {} | 
		
	
		
			
			|  |  |  | names[chat_id] = {} | 
		
	
		
			
			|  |  |  | status[chat_id] = {} | 
		
	
		
			
			|  |  |  | print("Added chat: ", chat_id) | 
		
	
		
			
			|  |  |  | return func(update, *args, **kwargs) | 
		
	
		
			
			|  |  |  | return wrapper | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | def ensure_user(func): | 
		
	
		
			
			|  |  |  | def wrapper(update, *args, **kwargs): | 
		
	
		
			
			|  |  |  | chat_id = update.effective_chat.id | 
		
	
		
			
			|  |  |  | user_id = update.effective_user.id | 
		
	
		
			
			|  |  |  | if user_id not in submissions[chat_id]: | 
		
	
		
			
			|  |  |  | names[chat_id][user_id] = update.effective_user.first_name | 
		
	
		
			
			|  |  |  | print("Added user: ", user_id, " - ", update.effective_user.first_name) | 
		
	
		
			
			|  |  |  | return func(update, *args, **kwargs) | 
		
	
		
			
			|  |  |  | return wrapper | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | def update_name(func): | 
		
	
		
			
			|  |  |  | def wrapper(update, *args, **kwargs): | 
		
	
		
			
			|  |  |  | chat_id = update.effective_chat.id | 
		
	
		
			
			|  |  |  | user_id = update.effective_user.id | 
		
	
		
			
			|  |  |  | if user_id not in submissions[update.effective_chat.id]: | 
		
	
		
			
			|  |  |  | names[chat_id][user_id] = update.effective_user.first_name | 
		
	
		
			
			|  |  |  | print("Got name for ", user_id, ": ", update.effective_user.first_name) | 
		
	
		
			
			|  |  |  | return func(update, *args, **kwargs) | 
		
	
		
			
			|  |  |  | return wrapper | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | def ensure_open(func): | 
		
	
		
			
			|  |  |  | def wrapper(update, *args, **kwargs): | 
		
	
		
			
			|  |  |  | chat_id = update.effective_chat.id | 
		
	
		
			
			|  |  |  | if status[chat_id] == "open": | 
		
	
		
			
			|  |  |  | return func(update, *args, **kwargs) | 
		
	
		
			
			|  |  |  | return wrapper | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @ensure_chat | 
		
	
		
			
			|  |  |  | @ensure_user | 
		
	
		
			
			|  |  |  | @update_name | 
		
	
		
			
			|  |  |  | @ensure_open | 
		
	
		
			
			|  |  |  | def accept_photo(update: Update, context: CallbackContext): | 
		
	
		
			
			|  |  |  | chat_id = update.effective_chat.id | 
		
	
		
			
			|  |  |  | user_id = update.effective_user.id | 
		
	
		
			
			|  |  |  | file_id = update.message.photo[-1].file_id | 
		
	
		
			
			|  |  |  | submissions[chat_id][user_id] = file_id | 
		
	
		
			
			|  |  |  | print(file_id) | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @ensure_chat | 
		
	
		
			
			|  |  |  | @ensure_user | 
		
	
		
			
			|  |  |  | def echo(update: Update, context: CallbackContext): | 
		
	
		
			
			|  |  |  | context.bot.send_message(chat_id=update.effective_chat.id, text="Hi.") | 
		
	
		
			
			|  |  |  | updater.stop() | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @ensure_chat | 
		
	
		
			
			|  |  |  | def open_submissions(update: Update, context: CallbackContext): | 
		
	
		
			
			|  |  |  | chat_id = update.effective_chat.id | 
		
	
		
			
			|  |  |  | context.bot.send_message(chat_id=update.effective_chat.id, text="Send me your images pls.") | 
		
	
		
			
			|  |  |  | status[chat_id] = "open" | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @ensure_chat | 
		
	
		
			
			|  |  |  | def show_submissions(update: Update, context: CallbackContext): | 
		
	
		
			
			|  |  |  | chat_id = update.effective_chat.id | 
		
	
		
			
			|  |  |  | options = list(map(lambda file_id: InputMediaPhoto(file_id), submissions[chat_id].values())) | 
		
	
		
			
			|  |  |  | chosen = random.choices(options, k=min(len(options), 10)) | 
		
	
		
			
			|  |  |  | context.bot.send_media_group(chat_id=chat_id, media=[chosen[0]]) | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if __name__ == "__main__": | 
		
	
		
			
			|  |  |  | try: | 
		
	
		
			
			|  |  |  | config = json.load(open("config.json", "r", encoding="utf-8")) | 
		
	
		
			
			|  |  |  | except: | 
		
	
		
			
			|  |  |  | logging.error("Couldn't read the config!") | 
		
	
		
			
			|  |  |  | sys.exit(1) | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | updater = Updater(token=config["token"], use_context=True) | 
		
	
		
			
			|  |  |  | dispatcher = updater.dispatcher | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | dispatcher.add_handler(MessageHandler(Filters.photo, accept_photo)) | 
		
	
		
			
			|  |  |  | dispatcher.add_handler(CommandHandler("open", open_submissions)) | 
		
	
		
			
			|  |  |  | dispatcher.add_handler(CommandHandler("show", show_submissions)) | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | updater.start_polling() | 
		
	
		
			
			|  |  |  | updater.idle() |