sonyakun-py
@sonyakun-py

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Discord.pyでリロードコマンドの実装をしたい

discord.pyでのリロードコマンドの実装をしたい

Pythonでdiscord botのリロードコマンドをつくっています。
調べても出てきません。リロードコマンドの実装は可能でしょうか。また、それを特定のユーザーのみ実行可能に出きるのでしょうか?

該当するソースコード

import discord
from discord.ext import commands

bot = commands.Bot(
    command_prefix="s=",
    help_command=None
)
RESPONSES = {
    "眠い": "zzz...",
    "おやすみなさい": "おやすみなさい!",
    "おはようございます": "おはようございます!"
}

@bot.event
async def on_ready():
    print("Botは正常に起動しました!")
    print(bot.user.name)  
    print(bot.user.id)  
    print(discord.__version__)  
    print('------')
    await bot.change_presence(activity=discord.Game(name=f"s=help|{len(bot.guilds)}鯖に導入されています|無料"))

@bot.command()
@commands.has_permissions(manage_channels=True)
async def delete(ctx: commands.Context, target: int):
    channel = ctx.message.channel
    deleted = await channel.purge(limit=target)
    await ctx.send(f"{len(deleted)}メッセージを削除しました")

@bot.command()
async def greet(ctx, name):
    await ctx.reply(f"`{name}`,やあ .")

@bot.command()
async def nyancat(ctx, name):
    await ctx.reply("https://c.tenor.com/2urDxuvLvKIAAAAM/peooo-dude.gif")

@bot.command()
async def help(ctx):
    embed = discord.Embed(title="NexusEliteヘルプ", description="NexusEliteのヘルプです:", color=0xeee657)

    embed.add_field(name="s=delete 削除するメッセージの数", value="指定した数のメッセージを削除します(必要な権限:チャンネル管理権限)", inline=False)
    embed.add_field(name="s=grate 好きな言葉", value="「好きな言葉,やあ」と発言します", inline=False)
    embed.add_field(name="s=info", value="このbotの情報を表示します。")
    embed.add_field(name="s=bl", value="ブラックリスト(荒らし)を表示します。(未実装)", inline=False)
    embed.add_field(name="s=nyancat", value="nyancatのgifを表示します", inline=False)
    embed.add_field(name="s=help", value="今表示してるやつだよ", inline=False)

    await ctx.send(embed=embed)

@bot.event
async def on_message(message):
    if message.author == bot.user:
        return

    for rk, rv in RESPONSES.items():
        if rk in message.content:
            await message.reply(rv)
    
    await bot.process_commands(message)

@bot.command()
async def info(ctx):
    embed = discord.Embed(title="nice bot", description="Nicest bot there is ever.", color=0xeee657)

    embed.add_field(name="Author", value="<YOUR-USERNAME>")

    embed.add_field(name="導入数", value=f"{len(bot.guilds)}")

    embed.add_field(name="このbotを招待", value="[Invite link](<insert your OAuth invitation link here>)")

    embed.add_field(name="サポートサーバー", value="[Invite link](https://discord.gg/F6SUCkcSyZ)")

    await ctx.send(embed=embed)

bot.run('token')

自分で試したこと

調べましたが出てきませんでした

0

1Answer

Discord.py や discord を使ったことが無いので、見当違いな連絡でしたら申し訳ありませんが.

実行されている環境は分からないのですが、
例えば Linux ですと、次の 1, 2 でリロード相当が実現できるような気もしました.

1. 作成した Discord.py を systemd へ respawn (落ちたら自動起動)として登録しておく.
2. 意図的に 1 のプロセスを kill する

また、systemd の代替として、python の supervisord でも、
上記 1, 2 相当が実現できるかと思います.

 

なお、上記の方法の問題点として、Discord.py 実行中に kill する恐れがある、ということです

0Like

Comments

  1. @sonyakun-py

    Questioner

    ありがとうございます。Linuxではないので難しいかと思いますが、試してみます

Your answer might help someone💌