1
Fork 0
mirror of https://github.com/RYGhub/royalnet.git synced 2024-11-24 03:54:20 +00:00

Immagino di aver fixato il bot veramente

This commit is contained in:
Steffo 2018-04-15 13:43:24 +02:00
parent baf9d2ad15
commit c28888c375
2 changed files with 68 additions and 42 deletions

View file

@ -133,7 +133,7 @@ async def on_error(event, *args, **kwargs):
print("ERRORE CRITICO:\n" + repr(ei[1]) + "\n\n" + repr(ei)) print("ERRORE CRITICO:\n" + repr(ei[1]) + "\n\n" + repr(ei))
try: try:
await client.send_message(client.get_channel(config["Discord"]["main_channel"]), await client.send_message(client.get_channel(config["Discord"]["main_channel"]),
f"☢️ ERRORE CRITICO NELL'EVENTO `{event}`\n" f"☢️ **ERRORE CRITICO NELL'EVENTO** `{event}`\n"
f"Il bot si è chiuso e si dovrebbe riavviare entro qualche minuto.\n" f"Il bot si è chiuso e si dovrebbe riavviare entro qualche minuto.\n"
f"Una segnalazione di errore è stata automaticamente mandata a Steffo.\n\n" f"Una segnalazione di errore è stata automaticamente mandata a Steffo.\n\n"
f"Dettagli dell'errore:\n" f"Dettagli dell'errore:\n"
@ -180,6 +180,7 @@ async def on_message(message: discord.Message):
name=message.author.name, name=message.author.name,
discriminator=message.author.discriminator, discriminator=message.author.discriminator,
avatar_hex=message.author.avatar) avatar_hex=message.author.avatar)
session.add(user)
await loop.run_in_executor(executor, session.commit) await loop.run_in_executor(executor, session.commit)
else: else:
sentry.user_context({ sentry.user_context({
@ -378,47 +379,68 @@ async def update_music_queue():
global voice_player global voice_player
global voice_queue global voice_queue
while True: while True:
if voice_client is None: try:
await asyncio.sleep(5) if voice_client is None:
continue await asyncio.sleep(5)
if voice_player is not None and not voice_player.is_done(): continue
await asyncio.sleep(1) if voice_player is not None and not voice_player.is_done():
continue await asyncio.sleep(1)
if len(voice_queue) == 0: continue
await client.change_presence() if len(voice_queue) == 0:
await asyncio.sleep(1) await client.change_presence()
continue await asyncio.sleep(1)
video = voice_queue.pop(0) continue
if video.ytdl_url: video = voice_queue.pop(0)
if video.ytdl_url:
await client.send_message(client.get_channel(config["Discord"]["main_channel"]),
f"⬇️ E' iniziato il download di `{video.ytdl_url}`.")
try:
async with async_timeout.timeout(30):
await video.download()
except asyncio.TimeoutError:
await client.send_message(client.get_channel(config["Discord"]["main_channel"]),
f"⚠️ Il download della canzone ha richiesto più di 30 secondi ed è stato "
f"annullato. ")
continue
except DurationError:
await client.send_message(client.get_channel(config["Discord"]["main_channel"]),
f"⚠️ Il file supera il limite di durata impostato in config.ini "
f"(`{config['YouTube']['max_duration']}` secondi).")
continue
except Exception as e:
await client.send_message(client.get_channel(config["Discord"]["main_channel"]),
f"⚠️ C'è stato un errore durante il download di `{video.ytdl_url}`:\n"
f"```\n"
f"{e}\n"
f"```")
continue
voice_player = voice_client.create_ffmpeg_player(f"opusfiles/{video.filename}.opus")
voice_player.start()
await client.send_message(client.get_channel(config["Discord"]["main_channel"]), await client.send_message(client.get_channel(config["Discord"]["main_channel"]),
f"⬇️ E' iniziato il download di `{video.ytdl_url}`.") f"▶ Ora in riproduzione in <#{voice_client.channel.id}>:\n"
f"`{video.filename}`")
await client.change_presence(game=discord.Game(name=video.filename, type=2))
await video.add_to_db()
except Exception:
ei = sys.exc_info()
try: try:
async with async_timeout.timeout(30):
await video.download()
except asyncio.TimeoutError:
await client.send_message(client.get_channel(config["Discord"]["main_channel"]), await client.send_message(client.get_channel(config["Discord"]["main_channel"]),
f"⚠️ Il download della canzone ha richiesto più di 30 secondi ed è stato " f"☢️ **ERRORE CRITICO NELL'AGGIORNAMENTO DELLA CODA DI VIDEO**\n"
f"annullato. ") f"Il bot si è disconnesso dalla chat vocale, e ha svuotato la coda.\n"
continue f"Una segnalazione di errore è stata automaticamente mandata a Steffo.\n\n"
except DurationError: f"Dettagli dell'errore:\n"
await client.send_message(client.get_channel(config["Discord"]["main_channel"]), f"```python\n"
f"⚠️ Il file supera il limite di durata impostato in config.ini " f"{repr(ei[1])}\n"
f"(`{config['YouTube']['max_duration']}` secondi).")
continue
except Exception as e:
await client.send_message(client.get_channel(config["Discord"]["main_channel"]),
f"⚠️ C'è stato un errore durante il download di `{video.ytdl_url}`:\n"
f"```\n"
f"{e}\n"
f"```") f"```")
continue if voice_player is not None:
voice_player = voice_client.create_ffmpeg_player(f"opusfiles/{video.filename}.opus") await voice_player.stop()
voice_player.start() voice_player = None
await client.send_message(client.get_channel(config["Discord"]["main_channel"]), await voice_client.disconnect()
f"▶ Ora in riproduzione in <#{voice_client.channel.id}>:\n" voice_client = None
f"`{video.filename}`") voice_queue = []
await client.change_presence(game=discord.Game(name=video.filename, type=2)) except Exception as e:
await video.add_to_db() print("ERRORE CRITICO PIU' CRITICO:\n" + repr(e) + "\n\n" + repr(sys.exc_info()))
sentry.captureException(exc_info=ei)
def process(users_connection=None): def process(users_connection=None):

View file

@ -47,7 +47,9 @@ def cmd_register(bot: Bot, update: Update):
royal_username=username, royal_username=username,
telegram_user=update.message.from_user) telegram_user=update.message.from_user)
except errors.AlreadyExistingError: except errors.AlreadyExistingError:
bot.send_message(update.message.chat.id, "⚠ Il tuo account Telegram è già collegato a un account RYG o l'account RYG che hai specificato è già collegato a un account Telegram.") bot.send_message(update.message.chat.id, "⚠ Il tuo account Telegram è già collegato a un account RYG o"
" l'account RYG che hai specificato è già collegato a un account"
" Telegram.")
session.close() session.close()
return return
session.add(t) session.add(t)
@ -290,7 +292,8 @@ def on_callback_query(bot: Bot, update: Update):
user = session.query(db.Telegram).filter_by(telegram_id=update.callback_query.from_user.id).one_or_none() user = session.query(db.Telegram).filter_by(telegram_id=update.callback_query.from_user.id).one_or_none()
if user is None: if user is None:
bot.answer_callback_query(update.callback_query.id, show_alert=True, bot.answer_callback_query(update.callback_query.id, show_alert=True,
text="⚠ Il tuo account Telegram non è registrato al RYGdb! Registrati con `/register@royalgamesbot <nomeutenteryg>`.") text="⚠ Il tuo account Telegram non è registrato al RYGdb!"
" Registrati con `/register@royalgamesbot <nomeutenteryg>`.")
return return
question = session.query(db.VoteQuestion).filter_by(message_id=update.callback_query.message.message_id).one() question = session.query(db.VoteQuestion).filter_by(message_id=update.callback_query.message.message_id).one()
answer = session.query(db.VoteAnswer).filter_by(question=question, user=user).one_or_none() answer = session.query(db.VoteAnswer).filter_by(question=question, user=user).one_or_none()
@ -307,7 +310,7 @@ def on_callback_query(bot: Bot, update: Update):
bot.edit_message_text(message_id=update.callback_query.message.message_id, chat_id=update.callback_query.message.chat.id, bot.edit_message_text(message_id=update.callback_query.message.message_id, chat_id=update.callback_query.message.chat.id,
text=question.generate_text(session), reply_markup=inline_keyboard, text=question.generate_text(session), reply_markup=inline_keyboard,
parse_mode="HTML") parse_mode="HTML")
except Exception as e: except Exception:
raise raise
finally: finally:
session.close() session.close()
@ -332,7 +335,8 @@ def cmd_ban(bot: Bot, update: Update):
target_user = session.query(db.Telegram).filter_by(username=arg).one_or_none() target_user = session.query(db.Telegram).filter_by(username=arg).one_or_none()
if target_user is None: if target_user is None:
bot.send_message(update.message.chat.id, "⚠ Il bersaglio specificato non esiste nel RYGdb.\n" bot.send_message(update.message.chat.id, "⚠ Il bersaglio specificato non esiste nel RYGdb.\n"
"Le possibilità sono due: non è un membro RYG, oppure non si è ancora registrato e va bannato manualmente.") "Le possibilità sono due: non è un membro RYG, "
"oppure non si è ancora registrato e va bannato manualmente.")
return return
if int(target_user.telegram_id) == 25167391: if int(target_user.telegram_id) == 25167391:
bot.send_message(update.message.chat.id, "⚠ Il creatore della chat non può essere espulso.") bot.send_message(update.message.chat.id, "⚠ Il creatore della chat non può essere espulso.")