使用主机时,我不能使用!giveaway命令。
当我使用cmd运行此命令时,它很好用,但是当我尝试使用Heroku主机运行此命令时,它不起作用并且 heroku日志命令不返回我有什么错误。我不知道该怎么办。 如何解决?请帮帮我。
这是命令代码:
@bot.command(aliases=["giveaway-start", "розыгрыш-начать"])
async def __giveaway_start(ctx, duration: int, sign: str, channel: discord.TextChannel, *, prize: str):
with open('C:\\bot1\\giveaways.json', 'r') as f:
givs = json.load(f)
async def new_id(givs,g_id):
if g_id in givs:
new_g_id += random.choice(giveaway_id)
giveaway_id = '1234567890'
for n in range(1):
g_id = ''
for i in range(16):
g_id += random.choice(giveaway_id)
if g_id in givs:
await ctx.send("Попробуйте позже")
if sign == "с":
wait = 1 * duration
elif sign == "м":
wait = 60 * duration
elif sign == "ч":
wait = 3600 * duration
elif sign == "д":
wait = 86400 * duration
emoji = "?"
if duration == 0:
return
embed = discord.Embed(title=prize, description=f"Автор - {ctx.author.mention}\n"f"**Нажмите на :tada: чтобы принять участие!**\n"f"Времени осталось: {wait} секунд",color=discord.Color.blue(),timestamp=datetime.utcnow())
message = await channel.send(embed=embed)
async def update_data(givs,g_away):
if not g_away in givs:
givs[g_away] = {}
givs[g_away]["msg_id"] = message.id
await ctx.send(f"Розыгрыш в канале {channel.mention} успешно создан! ID розыгрыша: `{g_id}`. Я напишу Вам в ЛС когда розыгрыш закончится.\nТак же можете присоединиться к нашему серверу тех. поддержки! https://discord.gg/YUzE6rB")
await message.add_reaction(emoji)
await update_data(givs,str(g_id))
with open('C:\\bot1\\giveaways.json', 'w') as f:
json.dump(givs,f)
while wait:
await asyncio.sleep(1)
if wait == 0:
await ctx.send("Giveaway is over!")
else:
wait -= 1
if wait > 86400:
cld = wait / 86400
time = "дней"
cooldown = round(cld, 1)
elif wait > 3600:
cld = wait / 3600
time = "часов"
cooldown = round(cld, 1)
elif wait > 60:
cld = wait / 60
time = "минут"
cooldown = round(cld, 1)
else:
cld = wait / 1
time = "секунд"
cooldown = round(cld, 1)
embed.description = f"Автор - {ctx.author.mention}\n"f"**Нажмите на :tada: чтобы принять участие!**\n"f"Времени осталось: {cooldown} {time}"
await message.edit(embed=embed)
await asyncio.sleep(duration)
message = await message.channel.fetch_message(message.id)
reaction = get(message.reactions, emoji=emoji)
users = [user async for user in reaction.users() if user.id != bot.user.id]
if len(users) == 0:
embed.description = f"Автор - {ctx.author.mention}\n"f"Нет победителей"
await message.edit(embed=embed)
return
else:
winner = random.choice(users)
embed.description = f"**Автор - {ctx.author.mention}**\n"f"**Победитель - {winner.mention}**"
await message.edit(embed=embed)
embed_end=discord.Embed(color=discord.Color.gold())
embed_end.add_field(name=f"Розыгрыш окончен!", value=f"[Ссылка на розыгрыш]({message.jump_url})", inline=False)
await ctx.author.send(embed=embed_end)
await channel.send(winner.mention, embed=embed)
win_embed=discord.Embed(title="Вы победили в розыгрыше!", color=discord.Color.gold())
win_embed.add_field(name=f"Вы выйграли: {prize}", value=f"[Ссылка на розыгрыш]({message.jump_url})",inline=False)
await winner.send(embed=win_embed)
答案 0 :(得分:0)
免费的Heroku不支持JSON编写,因此您的命令包含json.dump
,因此不会执行。