InsaneLimitsでプレイヤーログをWebhook(Discord)に投稿
鯖管やってると何かとプレイヤーログを確認することがあるんですが、いちいちDBに接続して確認するのが面倒なんです。そう、面倒なんです。
別の方法がないかと考えDiscordなら大体起動してるし、そこに残せばええやんってなったので作ってみました。
こんな感じ↓
注意! 使用する場合は必ずプライベートなチャンネルで一般のプレイヤーが見れないようにして下さい!これでトラブルが発生しても当方は責任を負いません!
表示する内容は
- 鯖名
- プレイヤー数
- プレイヤー名(タグ付き)
- PersonaId
- PB GUID
- EA GUID
- IP
- Ping
- Role
- BF4DBリンク
- bf4cheatreportリンク
- IP-APIリンク
※IP、Ping、IP-APIはPingの偽装を確認するため
※Pingはプレイヤーの接続状況により正常に表示されない場合があります。
コード
webhookUrl
の””中に投稿するチャンネルのwebhookのURLを入れてください。
もしpersonaIdの取得が出来なかった(架空のプレイヤーだった)場合、キックする場合は
bool no_personaId_kicker = false;
をbool no_personaId_kicker = true;
にして下さい。
evalution: On Join
first_check: Code
limit_action: none
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
/* Player Log Post to Webhook */ // evalution: On Join // first_check: Code // limit_action: none bool no_personaId_kicker = false; string webhookUrl = "https://"; string webhookString = null; Thread t = new Thread(new ThreadStart(delegate { System.Threading.Thread.Sleep(60000); string pattern = @":(\d+)"; string ip = Regex.Replace(player.IPAddress, pattern, ""); string playerRole = ""; if (player.Role == 0) playerRole = "Player"; if (player.Role == 1) playerRole = "Spectator"; if (player.Role == 2) playerRole = "Commander"; if (player.Role == 3) playerRole = "Mobile Commander"; using(WebClient webClient = new WebClient()){ plugin.ConsoleWrite(player.Name + " joined the server"); string str = webClient.DownloadString("http://battlelog.battlefield.com/bf4/user/" + player.Name +"/"); MatchCollection pid = Regex.Matches(str, @"/soldier/" + player.Name + @"/stats/(\d+)(/\w*)?/", RegexOptions.IgnoreCase | RegexOptions.Singleline); string personaId = ""; foreach (Match m in pid) { if (m.Success && m.Groups[2].Value.Trim() != "/ps3" && m.Groups[2].Value.Trim() != "/xbox" && m.Groups[2].Value.Trim() != "/xbox360" && m.Groups[2].Value.Trim() != "/xboxone" && m.Groups[2].Value.Trim() != "/ps4") { personaId = m.Groups[1].Value.Trim(); } } if (personaId == null){ try { WebRequest request = WebRequest.Create(webhookUrl); request.Method = "POST"; request.ContentType = "application/json"; webhookString = "{\"username\": \"PRoCon\", \"avatar_url\": \"https:\\/\\/avatars1.githubusercontent.com\\/u\\/1633311\", \"content\": \"**```diff\\n- New report -```**\\n**Players:** " + server.PlayerCount + " / " + server.MaxPlayers + "**\\n**PlayerName:** " + player.Name + "\\n**Battlelog:** https://battlelog.battlefield.com/bf4/user/" + player.Name + "/" + "\\n**IP-API.com:** https://ip-api.com/#" + ip + "\"}"; byte[] byteArray = Encoding.UTF8.GetBytes(webhookString); request.ContentLength = byteArray.Length; Stream dataStream = request.GetRequestStream(); dataStream.Write(byteArray, 0, byteArray.Length); dataStream.Close(); } catch (Exception e) {} if (no_personaId_kicker == true) { plugin.KickPlayerWithMessage(player.Name, "Not found PersonaId"); } plugin.ConsoleWrite(player.Name + "Not found PersonaId. Battlelog: https://battlelog.battlefield.com/bf4/user/" + player.Name + "/"); } else { try { WebRequest request = WebRequest.Create(webhookUrl); request.Method = "POST"; request.ContentType = "application/json"; webhookString = "{\"username\": \"PRoCon\", \"avatar_url\": \"https:\\/\\/avatars1.githubusercontent.com\\/u\\/1633311\", \"content\": \"**```diff\\n- New Join Player -```**\\n**" + server.Name + "**\\n**Players:** " + server.PlayerCount + " / " + server.MaxPlayers + "\\n**PlayerName:** " + player.FullName + "\\n**PersonaId:** " + personaId + "\\n**PB GUID:** " + player.PBGuid + "\\n**EA GUID:** " + player.EAGuid + "\\n**IP:** " + player.IPAddress + "\\n**Ping:** " + player.Ping + "\\n**Role:** " + playerRole + "\\n**BF4DB:** https://bf4db.com/player/" + personaId + "\\n**bf4cheatreport:** http://bf4cheatreport.com/?pid=" + personaId + "&uid=&cnt=200&startdate=" + "\\n**IP-API.com:** https://ip-api.com/#" + ip + "\"}"; byte[] byteArray = Encoding.UTF8.GetBytes(webhookString); request.ContentLength = byteArray.Length; Stream dataStream = request.GetRequestStream(); dataStream.Write(byteArray, 0, byteArray.Length); dataStream.Close(); } catch (Exception e) {} //plugin.ConsoleWrite("join player PersonaId " + personaId + " BF4DB: https://bf4db.com/player/" + personaId); } } })); t.Start(); |
ちなみに私は第三者にプレイヤー情報を公開することはありませんので。