2017-03-08 30 views
0

私はPythonを使い始めていますが、現在はAPIを使ってDiscordボットを作成しています。これまでのところとてもうまくいって、すべてが機能します。今、私はコンソールを使わずにサーバー上でスクリプトをホストすることを考えています。つまり、出力をコンソールではなくファイルに入れたいのです。私は以下の現在作業中です:Discord API(on_error)のエラー処理

import discord 
import logging 

logging.basicConfig(filename='.\output.log', filemode='w', level=logging.INFO, format='%(asctime)s:%(levelname)s:%(message)s') 

xzbot = discord.Client() 

# logging when the bot starts 
@xzbot.event 
async def on_ready(): 
logging.info('Logged in as ' + xzbot.user.name + ' (' + xzbot.user.id + ')\n') 

このコードは、警告と情報をoutput.logに入れます。それは、ボットがパーミッションを持たずにメッセージを送信しようとしているときに、 "Permissions denied"のようなDiscord.pyによって発生した例外では機能しません。

それを処理するための確執APIの組み込み関数があります:

discord.on_error(event, *args, **kwargs) 

だから私はこのようにこの関数を呼び出すことができます。

async def xzbot.on_error(event, *args, **kwargs): 
pass 

は今、私はeventで何かをやってみました、*argsまたは**kwargsですが、ここで私はちょうどlogging.warning()を使用できる形式でそれを得るために何か助けが必要です。私が得ることができるのはprint(*args)の結果としてobjectであり、それを正しくフォーマットする方法はわかりません。

答えて

1

コードのスニペットが記録され、エラーが発生したチャネルにもメッセージが送信されます。

メッセージを送信したくない場合は、await xzbot.send_messageを削除できます。

import traceback 
@xzbot.event 
async def on_error(event, *args, **kwargs): 
    message = args[0] #Gets the message object 
    logging.warning(traceback.format_exc()) #logs the error 
    await xzbot.send_message(message.channel, "You caused an error!") #send the message to the channel 

traceback.format_exc()最後のエラーをフォーマットし、それをコンソールに出力され、通常のエラーのようになります。

Here's info on the traceback module.