web-dev-qa-db-ja.com

Discord.pyのレイテンシコマンド

多くの場所を調べましたが、discord.pyを使用してping(レイテンシ)コマンドを作成する方法が見つかりませんでした。

@client.command(pass_context=True)
async def pong(ctx):
    # Somehow find 'pingtime'
    await client.say(pingtime)
5
Rufpi

実際には、この時点で、discord.pyの rewriteブランチを使用する必要があります

これはコマンド拡張を使用した私の解決策です。

@bot.command()
async def ping(ctx):
    await ctx.send('Pong! {0}'.format(round(bot.latency, 1)))
5
mental

このコードを使用

@bot.command(pass_context=True)
async def ping(ctx):
    """ Pong! """
    await delete_message(ctx.message)
    before = time.monotonic()
    message = await ctx.send("Pong!")
    ping = (time.monotonic() - before) * 1000
    await message.edit(content=f"Pong!  `{int(ping)}ms`")
    print(f'Ping {int(ping)}ms')
3
RedstonedLife

Discord.pyのrewriteブランチでは、以下を使用できます。

@bot.command()
def ping(ctx):
    await ctx.send(f'My ping is {bot.latency}!')

もちろん、別の変数名を使用している場合は、botを変更する必要があります。

2
Maximqs

このpingコマンドは、ボットと不和の間の所要時間から応答を返します

import discord 
import time
Client = commands.Bot(commands.when_mentioned_or('...'))


@Client.command(pass_context=True)
async def ping_ms(ctx):
    t = await Client.say('Pong!')
    ms = (t.timestamp-ctx.message.timestamp).total_seconds() * 1000
    await Client.edit_message(t, new_content='Pong! Took: {}ms'.format(int(ms)))
2
BlueHydra Demon
import datetime

@client.command(pass_context=True)
async def ping(ctx):
    now = datetime.datetime.utcnow()
    delta = now - ctx.message.timestamp
    await client.say('{}ms'.format(delta(microseconds=1)))

これは非常に効果的ではありません。正直に言いましょう。クライアントサイドでスクリプトを実行して時間を取得することができないため、実際にこれをテストする方法はありません。ただし、これにより、スクリプトが開始してからdiscordがメッセージを受け取ったと言うまでのシステムクロック間の時間がテストされます。実際にはpingではなく、どの定義でもありませんが、ボットの速度が低下した場合にヒントが得られます。

1
JayTurnr

Discord.py rewriteの更新された回答:

_    async def latency(ctx):
        time_1 = time.perf_counter()
        await ctx.trigger_typing()
        time_2 = time.perf_counter()
        ping = round((time_2-time_1)*1000)
        await ctx.send(f"ping = {ping}")
_

await ctx.trigger_typing()は、_"Blank" is typing..._テキストを表示します。これを行うことにより、送信待機時間ctx.trigger_typing()に基づいてボットのpingを半正確に取得できます。もちろん、_import Time_とボットコマンド全体を定義する必要があります。

0
Hexiro

わかりましたので、以前は簡単な方法を説明しました。今私は行ってそれを少し良くしましたそしてそれは次のようになります

Import discord
Import time


@Client.command(pass_context=True)
async def ms_ping(ctx):
channel = ctx.message.channel   
try:
    t1 = time.perf_counter()
    await Client.send_typing(channel)
    ta = t1
    t2 = time.perf_counter()
    await Client.send_typing(channel)
    tb = t2
    ra = round((tb - ta) * 1000)
finally:
    pass
try:
    t1a = time.perf_counter()
    await Client.send_typing(channel)
    ta1 = t1a
    t2a = time.perf_counter()
    await Client.send_typing(channel)
    tb1 = t2a
    ra1 = round((tb1 - ta1) * 1000)
finally:
    pass
try:
    t1b = time.perf_counter()
    await Client.send_typing(channel)
    ta2 = t1b
    t2b = time.perf_counter()
    await Client.send_typing(channel)
    tb2 = t2b
    ra2 = round((tb2 - ta2) * 1000)
finally:
    pass
try:
    t1c = time.perf_counter()
    await Client.send_typing(channel)
    ta3 = t1c

    t2c = time.perf_counter()
    await Client.send_typing(channel)
    tb3 = t2c

    ra3 = round((tb3 - ta3) * 1000)
finally:
    pass
try:
    t1d = time.perf_counter()
    await Client.send_typing(channel)
    ta4 = t1d

    t2d = time.perf_counter()
    await Client.send_typing(channel)
    tb4 = t2d

    ra4 = round((tb4 - ta4) * 1000)
finally:
    pass

e = discord.Embed(title="Connection", colour = 909999)
e.add_field(name='Ping 1', value=str(ra))
e.add_field(name='Ping 2', value=str(ra2))
e.add_field(name='Ping 3', value=str(ra3))
e.add_field(name='Ping 4', value=str(ra4))
await Client.say(embed=e)

これが新しいバージョンです。ボットで自分で使用しているので、100%機能しています。

0
BlueHydra Demon

Discord.py再書き込みではない非同期

EMBED

@bot.command(pass_context=True)
async def ping(ctx):
    embed = discord.Embed(title="Pong! :ping_pong:")
    await bot.say(embed=embed)

EMBEDなし

@bot.comand(pass_context=True)
async def ping(ctx):
    await bot.say(":ping_pong: Pong!")
0
ImKIJ

message.author.mentionを使用できます。例(これは、非同期を使用したコーディング方法とは異なる場合があります):

await client.send_message(message.channel, str(message.author.mention))

ほんの基本的な例:D

0
tristan360
@client.command(pass_context=True)
    async def ping(ctx):
        """Shows the Client Latency."""
        t = await client.say('Pong!')
        ms = (t.timestamp-ctx.message.timestamp).total_seconds() * 1000
        await client.edit_message(t, new_content='Pong! Client Latency: {}ms'.format(int(ms)))
0
Jacksxn