Steamworks ドキュメンテーション
ICheatReportingService Interface
このサービスは、チート(不正行為)やチートに関わった人々をゲームからVACシステムに報告できるようにし、ゲーム禁止 システムのバックエンドにあるツールセットを提供します。 ゲーム内で、チートの検出と管理という二つの独立したワークフローを実現します。
  • チートについてのコミュニティレポートを収集し、この情報に基づいて禁止/停止を要求します。
  • VACシステムに、既知のチートソフトウェアに詳細情報を提出します。 処理されると、この情報が既知のチートを使用するプレイヤーを自動で検出して禁止するのに使用されます。

このインターフェイスのの使用にはまずVACサポートにオプトインする必要があります。 これはアプリ管理パネルのアンチチートページで設定できます。

注意: これはServiceインターフェースです。このインターフェイスのメソッドはinput_jsonパラメーターで呼び出す必要があります。

Steamworks Web APIの使用に関する詳細は、Web API 概要を参照してください。

ReportPlayerCheating

POST https://partner.steam-api.com/ICheatReportingService/ReportPlayerCheating/v1/
名前必須説明
keystringSteamworks Web APIパブリッシャー認証キー。
steamiduint64チートで報告されたユーザーのSteam ID。
appiduint32ゲームのApp ID。
steamidreporteruint64(任意) チートを報告されたユーザー或いはゲームサーバーのSteam ID。
appdatauint64(任意) 開発元が設定したチートのタイプについてのアプリ毎のデータ。 (例 1 = エイムボット、2 = ウォールハック、3 = グリーフィング)
heuristicbool(任意) チート元についてのその他の情報 - (アルゴリズムによらない)発見的?
detectionbool(任意) チート元についてのその他の情報 - 検出?
playerreportbool(任意) チート元についてのその他の情報 - プレイヤーレポート?
noreportidbool(任意) レポートIDを返さない。 これはこのレポートに基いて禁止を発行しない場合にのみ渡されるべきです。
gamemodeuint32(任意) ゲームの状況についてのその他の情報 - 特定タイプのゲームプレイやモード? (0 = 一般)
suspicionstarttimeuint32(任意) このユーザーにとって、ゲームがどの程度遡って面白いかを示す、その他の情報 Unixエポック時間 (1970年1月1日以降の時間)。
severityuint32(任意) 報告された行動の重大度レベル。 開発元がスケールを設定します。

ReportPlayerCheatingは、プレイヤーがゲーム内で他のプレイヤーについて報告できるコミュニティレポートを収集するように設計されています。

これはゲーム内のピアからの信頼できないデータ(半信頼ソース)を対象としています。 データを報告するバックエンドは、両当事者が認証済みであることを確認する必要がありますが、データ自体は伝聞として扱われます。 任意のパラメーターを使用して、疑わしい不正行為の種類や追加の証拠(更なるレビューのために一致/デモを示す識別子)をエンコードすることができます。

注: この呼び出しでは、このメソッドの使用にパブリッシャーAPIキーを必要とします。 このようなAPIの呼び出しは 必ずセキュリティ保護されたサーバー上から呼び出し、決して直接クライアントから使用しないでください!

RequestPlayerGameBan

POST https://partner.steam-api.com/ICheatReportingService/RequestPlayerGameBan/v1/
名前必須説明
keystringSteamworks Web APIパブリッシャー認証キー
steamiduint64チートで報告されたユーザーのSteam ID。
appiduint32ゲームのApp ID。
reportiduint64チートを報告した際に使用されたオリジナルのレポートID。
cheatdescriptionstring不正行為の違反を説明するテキスト。
durationuint32秒単位での、要求された禁止期間。 (期間が0は無制限 - 1年未満は停止であり、プロフィールには表示されません。)
delaybanboolデフォルトの禁止遅延ルールに基づく禁止への遅延。
flagsuint32禁止リクエストに関する追加情報。 (未使用)

指定のプレイヤーに対してゲーム禁止を要求します。

これは、ReportPlayerCheatingがレビューされ、不正が確認された後に使用されるように設計されています。

注: この呼び出しでは、このメソッドの使用にパブリッシャーAPIキーを必要とします。 このようなAPIは 必ずセキュリティ保護されたサーバー上から呼び出し、決して直接クライアントから使用しないでください!

RemovePlayerGameBan

POST https://partner.steam-api.com/ICheatReportingService/RemovePlayerGameBan/v1/
名前必須説明
keystringSteamworks Web APIパブリッシャー認証キー
steamiduint64ゲーム禁止を取り除くユーザーのSteam ID。
appiduint32ゲームのApp ID。

プレイヤーからゲーム禁止を取り除きます。

これはゲーム禁止が誤検知であると判断された場合に使用されます。

注: この呼び出しでは、このメソッドの使用にパブリッシャーAPIキーを必要とします。 このようなAPIは 必ずセキュリティ保護されたサーバー上から呼び出し、決して直接クライアントから使用しないでください!

GetCheatingReports

GET https://partner.steam-api.com/ICheatReportingService/GetCheatingReports/v1/
名前必須説明
keystringSteamworks Web APIパブリッシャー認証キー
appiduint32ゲームのApp ID。
timeenduint32時間範囲の終了。 Unixエポック時間 (1970年1月1日以降の時間)でフォーマットされます。
timebeginuint32時間範囲の開始。 Unixエポック時間 (1970年1月1日以降の時間)でフォーマットされます。
reportidminuint64含まれる最小のreportID。 (0を渡せます - 以前の報告範囲の終了)
includereportsbool(任意) 報告を含みます。 falseの場合、includebansはtrueである必要があります。
includebansbool(任意) 禁止要求を含む? falseの場合、includereportsはtrueである必要があります。
steamiduint64(任意) このSteam IDのみを照会。

このアプリでのチート行為として提出された報告のリストを取得します。

チート行為の報告の収集に使用されます。内容は審査され、必要な決定が行われます。

注: この呼び出しでは、このメソッドの使用にパブリッシャーAPIキーを必要とします。 このようなAPIは 必ずセキュリティ保護されたサーバー上から呼び出し、決して直接クライアントから使用しないでください!

ReportCheatData

POST https://api.steampowered.com/ICheatReportingService/ReportCheatData/v1/
名前必須説明
keystringSteamworks Web APIユーザー認証キー
steamiduint64チートを実行、報告するユーザーのSteam ID。
appiduint32ゲームのApp ID。
pathandfilenamestring不正な実行可能ファイルのファイル名とパス。
webcheaturlstringチートが発見・ダウンロードされたWeb URL。
time_nowuint64現在のローカルシステム時刻。 64ビットWindowsシステム時間。
time_starteduint64チートプロセスが開始したローカルシステム時刻。 (まだ実行していない場合は0 ) 64ビットWindowsシステム時間。
time_stoppeduint64チートプロセスが終了したローカルシステム時刻。 (まだ実行中の場合は0 ) 64ビットWindowsシステム時間。
cheatnamestringチートの説明的な名前。
game_process_iduint32実行中のゲームのプロセスID。
cheat_process_iduint32実行されたチートプロセスのプロセスID。
cheat_param_1uint64その他チートデータ。
cheat_param_2uint64その他チートデータ。

チートデータを報告します。 ゲームを実行中のテストアカウントでのみ使用し、マルチプレイヤーセッションでは使用しないでください。

これは、特定のチートをVACシステムに報告するためのものです。 これを行うには、チートとゲームを実行して、このwebapiを呼び出します。
注: このため、ネットワーク外部の使い捨てマシンでのみテストアカウントを使用する必要があります。 また、パートナーWeb APIキーではなく、テストアカウントのためにhttp://steamcommunity.com/developeから取得した標準のWeb APIキーを使用する必要があります。 これを呼び出した後、VACがシステムを完全にスキャンできるように、システムを少なくとも30分間はアイドル状態にしておいてください。 テストアカウントにはフラグがつけられ、今後マルチプレイヤーゲームへの認証は許可されないため、チート報告専用のテストアカウントを常に使用するようにしてください。

呼び出しが成功を報告しない場合、報告は無視されています。

呼び出しの例:
# requires python 2.7 import sys, os, time if sys.version_info >= ( 2, 7 ): # import argparse print "Found python 2.7 or greater" else: print "Must use python 2.7 or greater" exit() import urllib import urllib2 import json g_mapUniverseToWebapiServer = { 'public' : { 'host' : 'api.steampowered.com', 'port_http' : 80, 'port_https' : 443, }, } g_bReadied = False # get ready to issue webapi requests def readyAPIRequest( universe ): global g_bReadied # if proxy is needed enable here # WARNING: it is not recommended to use this from inside your LAN # because that would mean you are running cheats inside your LAN proxyneeded = 0 if proxyneeded == 1: urllib2.install_opener( urllib2.build_opener( urllib2.ProxyHandler( {"http":"http://proxy.valvesoftware.com:80"} ) ) ) else: urllib2.install_opener( urllib2.build_opener( urllib2.ProxyHandler({}) ) ) g_bReadied = True # perform a webapi request - currently assumes response is JSON # # you must pass # universe - string # interface - which interface are you calling # request - the name of the method # # optional parameters # method - GET or PUT # protocol - http or https # version - defaults to 0001 # timeout - defaults to 120 # # other keyword arguments supplied are used as parameters to the webapi; e.g. to use # a webapi key, 'key=0123456' def issueWebAPIRequest( universe=None, interface=None, request=None, method='GET', protocol='http', version='0001', timeout=120, **kwargs ): if not universe or not request or not interface: raise NameError( 'Need universe, interface, and request' ) if not g_bReadied: raise RuntimeError( 'call readyAPIRequest first to ensure the proxy is set' ) entry = g_mapUniverseToWebapiServer[] server = entry[] port = entry[] url = '%s://%s:%s/%s/%s/v%s/' % ( protocol, server, port, interface, request, version ) if method == 'GET': sep = '?' for kw in kwargs: url = url + sep + kw + '=' + str( kwargs[] ) sep = '&' rf = urllib2.urlopen( url, timeout=timeout ) else: rf = urllib2.urlopen( url, urllib.urlencode( kwargs ), timeout=timeout ) return json.load( rf ) def sendcheatreport(): readyAPIRequest( 'public' ) print "Current time is ",int(time.time()) # fill in defaults # steamid should look like 7XXXXXXXXXXXXXXX steamid = 0 # key should be a hex string key = '' # fill in your appid gameappid = 0 # init vars cheatprocid = 0 timecheatran = 0 cheatterminated = 0 timecheatstopped = 0 if steamid == 0: steamid = raw_input( 'Input steam ID: ' ) if not key: key = raw_input( 'Input web api key: ' ) if gameappid == 0: gameappid = raw_input( 'Input game appid: ' ) cheatnamestring = raw_input( 'Input cheat descriptive name: ' ) cheatpathstring = raw_input( 'Input full path to cheat file: ' ) webcheaturlstring = raw_input( 'Input full URL to cheat download page (optional): ' ) cheatfiletype = int(raw_input( 'Input 1 if .exe or input 2 if other file type: ' )) if cheatfiletype == 1: cheatprocid = raw_input( 'Input cheat process id (Input 0 if stopped or unsure): ' ) timecheatran = int(time.time()) cheatterminated = int(raw_input( 'Input 1 if cheat is still running or input 0 if it has stopped: ' )) timecheatstopped = int(time.time()) if cheatterminated == 1: timecheatstopped = 0 gameprocid = raw_input( 'Input game process id: ' ) print "sending webapi data now " print "steamid: ", steamid print "key: ", key print "gameappid: ", gameappid print "cheatnamestring: ", cheatnamestring print "cheatpathstring: ", cheatpathstring print "webcheaturlstring: ", webcheaturlstring print "cheatprocid: ", cheatprocid print "timecheatran: ", timecheatran print "timecheatstopped: ", timecheatstopped print "gameprocid: ", gameprocid # ready to go! results = issueWebAPIRequest( universe='public', interface='icheatreportingservice', request='reportcheatdata', key=key, protocol='https', method='POST', cheatname=cheatnamestring, appid=gameappid, game_process_id=gameprocid, cheat_process_id=cheatprocid, pathandfilename=cheatpathstring, webcheaturl=webcheaturlstring, time_now=int(time.time()), time_started=timecheatran, time_stopped=timecheatstopped, steamid=steamid ) print "webapi results:", results # clean up def main(): sendcheatreport() if __name__ == '__main__': main()

RequestVacStatusForUser

POST https://partner.steam-api.com/ICheatReportingService/RequestVacStatusForUser/v1/
名前必須説明
keystringSteamworks Web APIパブリッシャー認証キー
steamiduint64ユーザーのSteam ID。
appiduint32ユーザーがプレイしているゲームのApp ID。
session_iduint64StartSecureMultiplayerSessionへの呼び出しで取得したSteam ID。

ユーザーのVAC禁止状況をチェックし、ユーザーのVACセッション状況を検証します。 検証に失敗した場合は、ユーザーを安全なゲームにマッチさせないでください。

これはユーザーがマッチメイキングに入る前、またはゲームに参加する前に使用されます。 ユーザーが何らかの方法でVACをブロックしており、VACがチートをスキャンできない場合、success = trueおよびsession_verified = falseを報告します。 このwebapiをチェックすると、ユーザーのマッチメイキングやサーバーへの参加を防ぎ、(認証コールバックからのk_EAuthSessionResponseVACCheckTimedOut結果と共に )すぐにVACによって追放するようになります。 VACシステムは、クライアントシステムが協調しているかを常に完全に判断する時間が無い場合があり、その場合はsuccess = falseを報告します。 プレイヤーのシステムが初期チェックに合格しても、後で応答しなくなる場合があります。その場合、検証は成功しますが、k_EAuthSessionResponseVACCheckTimedOut が後に続くことがあります。


注: この呼び出しでは、このメソッドの使用にパブリッシャーAPIキーを必要とします。 このようなAPIは 必ずセキュリティ保護されたサーバー上から呼び出し、決して直接クライアントから使用しないでください!

Web API Sessions

注: Steam認証を統合したゲームでは、次のAPIコールは私用しないでください。 代わりに、このようなゲームはISteamUser インターフェイス P2Pまたはゲームサーバーセットアップを使用する必要があります。 次の一連の呼び出しへのアクセスは、Valveによって手動で有効にする必要があり、Steamから完全に独立したユーザー認証を処理するゲームでのみ使用されるべきです。

StartSecureMultiplayerSession

POST https://partner.steam-api.com/ICheatReportingService/StartSecureMultiplayerSession/v1/
名前必須説明
keystringSteamworks Web APIパブリッシャー認証キー
steamiduint64ユーザーのSteam ID。
appiduint32ゲームのApp ID。

VACサーバーに、安全なマルチプレイヤーセッションが開始したことを伝えます。

注: この呼び出しでは、このメソッドの使用にパブリッシャーAPIキーを必要とします。 このようなAPIは 必ずセキュリティ保護されたサーバー上から呼び出し、決して直接クライアントから使用しないでください!

EndSecureMultiplayerSession

POST https://partner.steam-api.com/ICheatReportingService/EndSecureMultiplayerSession/v1/
名前必須説明
keystringSteamworks Web APIパブリッシャー認証キー
steamiduint64ユーザーのSteam ID。
appiduint32ゲームのApp ID。
session_iduint64StartSecureMultiplayerSessionへの呼び出しで取得したSteam ID。

VACサーバーに、安全なマルチプレイヤーセッションが終了したことを伝えます。

注: この呼び出しでは、このメソッドの使用にパブリッシャーAPIキーを必要とします。 このようなAPIは 必ずセキュリティ保護されたサーバー上から呼び出し、決して直接クライアントから使用しないでください!

応答:
[
{
"name": "success",
"type": "bool",
"description": ""
}
]