Discord Bot в Python перестает работатьPython

Программы на Python
Ответить
Anonymous
 Discord Bot в Python перестает работать

Сообщение Anonymous »

У меня есть этот бот, работающий на малиновом VPS (друга). Он запускается правильно, и я могу отправить команду для визуализации зеленой кнопки. В течение 5 минут все идеально, но по какой-то причине оно само останавливается, когда я нажимаю зеленую кнопку, в Discord появляется надпись «Ошибка взаимодействия». Когда я отправляю команду еще раз, она показывает другое сообщение, и она работает (он сохраняет идентификатор пользователя в входе в dict). через 5 минут то же самое. То есть бот на самом деле не останавливается, но что-то работает не так.
Почему так происходит? проблема с кодом или vps?
import discord
from discord.ui import Button, View, Modal, TextInput
from discord.ext import commands
from discord import Interaction
import re

intents = discord.Intents.default()
intents.message_content = True
intents.members = True

bot = commands.Bot(command_prefix="!", intents=intents)

iscrizioni = {} # Sign in Dict

report_channel_id = 1234567891011
rules_channel_id = 1234567891011

@bot.command()
async def comando_iscrizioni(ctx):

button = Button(label="Iscriviti", style=discord.ButtonStyle.green)

async def button_callback(interaction: discord.Interaction):
user_id = interaction.user.id

if user_id in iscrizioni:
await interaction.response.send_message("Sei già registrato", ephemeral=True)
return

modal = IscrizioneModal()
await interaction.response.send_modal(modal)

button.callback = button_callback
view = View()
view.add_item(button)

await ctx.send(f""" test message """, view=view)

# Sign Up Modal
class IscrizioneModal(Modal):
def __init__(self):
super().__init__(title="Modulo di Iscrizione")

self.nickname = TextInput(label='Nickname', placeholder='Inserisci il tuo nickname')
self.platform = TextInput(label='Piattaforma di gioco', placeholder='PC, PS, Xbox')
self.assists = TextInput(label='Aiuti Utilizzati', placeholder='ABS, Traiettoria')

self.add_item(self.nickname)
self.add_item(self.platform)
self.add_item(self.assists)

async def on_submit(self, interaction: Interaction):
nickname = self.nickname.value
platform = self.platform.value
assists = self.assists.value

iscrizioni[interaction.user.id] = {
"nickname": nickname,
"platform": platform,
"assists": assists
}

button = Button(label="Next", style=discord.ButtonStyle.primary)

async def button_callback(button_interaction: Interaction):
modale_tempi = SecondModal()
await button_interaction.response.send_modal(modale_tempi)

button.callback = button_callback
view = View()
view.add_item(button)
await interaction.response.send_message("Dati salvati! Premi il pulsante NEXT per continuare", view=view, ephemeral=True)

# Second modal
class SecondModal(Modal):
def __init__(self):
super().__init__(title="Inserimento Tempi")

self.bahrain = TextInput(label='Bahrain', placeholder='Inserisci il tempo in modalità Time Trial')
self.spa = TextInput(label='Belgio', placeholder='Inserisci il tempo in modalità Time Trial')
self.silverstone = TextInput(label='Silverstone', placeholder='Inserisci il tempo in modalità Time Trial')

self.add_item(self.bahrain)
self.add_item(self.spa)
self.add_item(self.silverstone)

# Format Check Function
def is_valid_time_format(self, time_str):
# Regex per il formato minuti.secondi,millesimi
pattern = r'^\d+\.\d{2},\d{3}$'
return re.match(pattern, time_str) is not None

async def on_submit(self, interaction: Interaction):
Bahrain = self.bahrain.value
Belgio = self.spa.value
Silverstone = self.silverstone.value

# Correct Format Check
if not all(self.is_valid_time_format(time) for time in [Bahrain, Belgio, Silverstone]):
await interaction.response.send_message("Errore: I tempi devono essere inseriti nel formato 'minuti.secondi,millesimi (Es: 1.26,388)", ephemeral=True)
return

iscrizioni[interaction.user.id].update({
"Bahrain": Bahrain,
"Belgio": Belgio,
"Silverstone": Silverstone
})

await interaction.response.send_message("Iscrizione completata con successo!", ephemeral=True)

# Send report
report_channel = bot.get_channel(report_channel_id)
await report_channel.send(f"""Nuova iscrizione:
Nickname: {iscrizioni[interaction.user.id]['nickname']}
Piattaforma: {iscrizioni[interaction.user.id]['platform']}
Aiuti: {iscrizioni[interaction.user.id]['assists']}
Bahrain: {iscrizioni[interaction.user.id]['Bahrain']}
Belgio: {iscrizioni[interaction.user.id]['Belgio']}
Silverstone: {iscrizioni[interaction.user.id]['Silverstone']}""")

# Avvia il bot
bot.run("ABCDEFGHIKLMNOPQRSTUVXYZ1234567890")```


Подробнее здесь: https://stackoverflow.com/questions/793 ... op-running
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»