Discord ბოტი, რომელსაც შენს თამაშის სერვერზე ბრძანებების გაშვება შეუძლია, დისტანციური კონსოლია, რომლის პაროლიც არის "Discord-ში სწორი როლი აქვს". ეს შეიძლება სრულიად კარგი დიზაინი იყოს - სტაფი ისედაც Discord-ში ცხოვრობს, ხოლო გრიფერის ტელეფონიდან გაგდება მართლა სასარგებლოა - მაგრამ მხოლოდ იმ შემთხვევაში, თუ ბოტი უშვებს ბრძანებების მოკლე allow-list-ს და არა ყველაფერს, რასაც მას მისწერენ, ყოველ ბრძანებაზე როლებს ამოწმებს, Discord-ის ყველაზე მცირე უფლებებით მუშაობს, რითაც შეუძლია, ყოველ გამოყენებას ლოგავს და თავის ტოკენსა და RCON პაროლს მიუწვდომელ ადგილას ინახავს. ცალმხრივი ტრაფიკისთვის, როგორიცაა სტატუსი და გაფრთხილებები, webhook ნებისმიერ ბოტზე მარტივი და უსაფრთხოა.
ეს სტატია განიხილავს ინტეგრაციებს, რომლებსაც თამაშის სერვერები ხშირად იყენებენ, ადმინ-ბოტებისთვის სპეციფიკურ რისკებს, როგორ დააყენო უფლებები სწორად ორივე მხარეს, და პატარა, უსაფრთხო ადმინ-ბოტს, რომელსაც თავად გაუშვებ. ცალმხრივ სტატუსის შეტყობინებებს ხსნის Discord webhook-ები სერვერის სტატუსისთვის, ხოლო ნებისმიერი სახის ბოტის ჰოსტინგს - Discord ბოტის ჰოსტინგი 24/7.
Webhook, ინტეგრაცია თუ საკუთარი ბოტი#
აირჩიე ყველაზე ნაკლებად ძლიერი ინსტრუმენტი, რომელიც საქმეს გააკეთებს.
| საჭიროება | ინსტრუმენტი | შეუძლია სერვერის შეცვლა? |
|---|---|---|
| სტატუსი, გაფრთხილებები, შესვლის განცხადებები | Webhook | არა |
| ჩატის ხიდი თამაშსა და Discord-ს შორის | თამაშის მხარის ინტეგრაცია | მხოლოდ ჩატით შეზღუდული |
| კონსოლი Discord-ის არხში | თამაშის მხარის ინტეგრაცია | კი, ყველაფერი |
| whitelist-ის მოთხოვნები, გაგდებები, რამდენიმე ბრძანება | ადმინ-ბოტი allow-list-ით | მხოლოდ ის, რასაც დაუშვებ |
| თავად Discord-ის მოდერაცია | Discord AutoMod, მოდერაციის ბოტი | არა, მხოლოდ Discord |
Webhook-ს მხოლოდ გამოქვეყნება შეუძლია. მას შენი თამაშის სერვერის მონაცემები არ აქვს, ასე რომ ყველაზე ცუდი, რისი გაკეთებაც გაჟონილ webhook URL-ს შეუძლია, ერთ არხში სპამის გამოქვეყნებაა. ეს მას სწორ არჩევანად აქცევს ყველაფრისთვის, რაც ცალმხრივია: სტატუსის embed-ები, კრაშის გაფრთხილებები, რესტარტის შეტყობინებები, ბანების განცხადებები.
ბოტი ხანგრძლივად მომუშავე პროგრამაა, რომელიც Discord-ს ტოკენით უერთდება, და მას შეუძლია ყველაფერი, რასაც მისი კოდი და უფლებები უშვებს. იმ წამიდან, როცა თამაშის სერვერის კონსოლთან ლაპარაკი შეუძლია, მისი უსაფრთხოება ისევე მნიშვნელოვანია, როგორც შენი RCON პაროლისა.
ინტეგრაციები, რომლებსაც თამაშის სერვერები ხშირად იყენებენ#
პოპულარული თამაშების უმეტესობას კარგად გაკვალული ინტეგრაცია აქვს, და მისი გამოყენება ჩვეულებრივ საკუთარის დაწერას სჯობს.
- Minecraft - DiscordSRV. პლაგინი სერვერზე, რომელიც თამაშის ჩატს და Discord-ის არხს აკავშირებს, Discord-ისა და Minecraft-ის ანგარიშებს აბამს, როლებს ასინქრონებს და შეუძლია კონსოლი არხში ასახოს, სადაც შეტყობინებები ბრძანებებად სრულდება. ეს ბოლო ფუნქცია ის არის, რაზეც კარგად უნდა დაფიქრდე. DiscordSRV Minecraft-ისთვის მოწყობას ხსნის.
- FiveM - txAdmin. txAdmin შეიცავს Discord ბოტს, რომელსაც შეუძლია მუდმივი სერვერის სტატუსის embed-ის გამოქვეყნება და whitelist-ის მოთხოვნების დამუშავება, ასე რომ მოთამაშეებს წვდომის მოთხოვნა Discord-იდან შეუძლიათ, სტაფი კი მათ txAdmin-ში ამტკიცებს. FiveM სერვერი და txAdmin თავად txAdmin-ს ხსნის, ხოლო FiveM-ის Discord უფლებები და whitelist - როლებზე დაფუძნებულ წვდომას.
- Source თამაშები და CS2. SourceMod-ისა და CounterStrikeSharp-ის პლაგინები საჩივრებს, ბანებს და ჩატს ხშირად Discord-ში webhook-ებით აქვეყნებს; თავად ადმინის ქმედებები თამაშში რჩება.
- Rust, DayZ, Arma და სხვა RCON თამაშები. ადმინ-ინსტრუმენტები და RCON სერვისები სერვერს RCON-ით უერთდება და ხშირად საკუთარი Discord ფუნქციები აქვს: kill feed-ები, ბანების შეტყობინებები, მოთამაშეების სიები. მათ შენი RCON პაროლი აქვთ, ამიტომ იმავე შემოწმებას იმსახურებენ, რასაც შენ მიერ დაწერილი ბოტი.
- ზოგადი სტატუსის ბოტები. ბოტები, რომლებიც სერვერის საჯარო სტატუსის პორტს ეკითხება და ონლაინ მოთამაშეებს აჩვენებს. მათ საიდუმლო არაფერი სჭირდებათ, რადგან ინფორმაცია საჯაროა. Query პორტები და A2S ხსნის, რას კითხულობენ ისინი.
რატომ არის კონსოლის ბოტი RCON სხვა საკეტით#
წარმოიდგინე, რა სჭირდება თავდამსხმელს შენს სერვერზე ბრძანებების გასაშვებად თითოეული გზით.
პანელის კონსოლი შენი ანგარიშისა და მისი ორფაქტორიანი ავთენტიკაციის უკანაა. RCON ერთი პაროლის უკანაა. კონსოლის ბოტი Discord-ის როლის უკანაა - რაც ნიშნავს, რომ ის ყოველი Discord ანგარიშის უკანაა, რომელსაც ეს როლი აქვს, თითოეული ამ ანგარიშის უსაფრთხოების უკან და ყველას უკან, ვისაც შენს Discord-ში როლების მინიჭება შეუძლია. სტაფის გატეხილი Discord ანგარიში, მოდერატორი, რომელიც საკუთარ თავს ისეთ როლს აძლევს, რომელიც არ უნდა ჰქონდეს, ან ბოტი "Administrator" უფლებით, რომელსაც ვინმე სხვა იტაცებს - ყველა შენი სერვერის კონსოლამდე მიდის.
კონკრეტული რისკები:
- როლის ესკალაცია Discord-ის შიგნით. ნებისმიერს "Manage Roles"-ით შეუძლია საკუთარ თავს მისცეს ნებისმიერი როლი, რომელიც მის უმაღლეს როლზე დაბლაა. თუ კონსოლის როლი სიაში დაბლაა, მასთან უფრო მეტ ადამიანს შეუძლია მიწვდომა, ვიდრე გგონია.
- კონსოლის ასახვის არხები. არხი, სადაც ყოველი შეტყობინება კონსოლის ბრძანებად სრულდება და რომლის წაკითხვა და წერა როლს შეუძლია, ყველაზე სახიფათო ხელმისაწვდომი კონფიგურაციაა. ის კონსოლის გამოტანასაც აჩვენებს, რომელიც Minecraft-ზე ყოველ შესვლაზე მოთამაშეების IP მისამართებს შეიცავს.
- ბოტის ტოკენის მოპარვა. ტოკენი საჯარო რეპოზიტორიაში, ჩასმულ კონფიგ-ფაილში ან გატეხილ ჰოსტზე ქურდს ბოტს აძლევს, მისი ყველა უფლებით შენს Discord-ში და ყველაფრით, რისი გაკეთებაც მას შენს სერვერზე შეუძლია. Discord აღადგენს ტოკენებს, რომლებსაც საჯარო GitHub რეპოზიტორიებში აღმოაჩენს, რაც გეუბნება, რამდენად ხშირად ხდება ეს.
- შეუმოწმებელი შეყვანა. ბოტი, რომელიც კონსოლს გადასცემს ყველაფერს, რასაც მომხმარებელი კრეფს, ბრძანებების გადაბმასა და ნებისმიერ ბრძანებას უშვებს, თუნდაც მხოლოდ
kick-ის დაშვება გინდოდა.
უფლებები სწორად, ორივე მხარეს#
Discord-ის მხარეს:
- მიეცი ბოტს საკუთარი როლი მხოლოდ იმ უფლებებით, რომლებსაც იყენებს. სტატუსის ან ადმინ-ბოტს, როგორც წესი, სჭირდება რამდენიმე არხის ნახვა, შეტყობინებების გაგზავნა და ბმულების embed. გამოტოვე Administrator, Manage Server, Manage Roles და Manage Webhooks, თუ კონკრეტულ ფუნქციას რომელიმე არ სჭირდება.
- სტაფის როლი, რომელიც ბოტს აკონტროლებს, როლების სიაში მაღლა დააყენე და შეზღუდე, ვისაც Manage Roles აქვს, რომ მისი საკუთარი თავისთვის მინიჭება შეუძლებელი იყოს.
- გამოიყენე არხის უფლებების override-ები, რომ ბოტის ადმინ-ბრძანებები მხოლოდ სტაფის არხში იყოს გამოსაყენებელი.
- მოითხოვე ორფაქტორიანი ავთენტიკაცია მოდერაციისთვის Discord-ის სერვერის უსაფრთხოების პარამეტრებში, რაც Discord-ს აიძულებს 2FA მოითხოვოს ანგარიშებზე, რომლებიც მოდერაციის უფლებებს იყენებს.
- გამოიყენე slash ბრძანებები ნაგულისხმევი უფლებებით, რომ ბრძანება დამალული იყოს ადამიანებისგან სწორი Discord უფლების გარეშე, თუ ამას განზრახ არ შეცვლი.
თამაშის მხარეს:
- მიეცი ბოტს საკუთარი RCON პაროლი, თუ თამაში ამის საშუალებას იძლევა, ან მინიმუმ პაროლი, რომელიც სტაფის გამოყენებულისგან განსხვავდება, და შეცვალე, როცა ბოტი სხვის ხელში გადადის.
- ბოტში ბრძანებებისთვის allow-list გამოიყენე და არა block-list.
list,kick,whitelist addნორმალურია. ყველაფერს, რაც კონსოლში თავისუფალ ტექსტს იღებს - ჩვეულებრივი გამონაკლისიsay-ია - შეყვანის შემოწმება სჭირდება. - უფლებების სისტემის მქონე თამაშებზე ბოტი შეზღუდული იდენტობით გაუშვი. Minecraft-ის პლაგინებს, როგორიცაა DiscordSRV, შეუძლიათ Discord-იდან კონსოლის ბრძანებები თავიანთ კონფიგში allow-list-ით შეზღუდონ; გამოიყენე ეს და არა ღია კონსოლის წვდომა.
- დალოგე ყოველი ბრძანება, რომელსაც ბოტი უშვებს, Discord-ის მომხმარებლით, რომელმაც ის მოითხოვა, არხში, რომლის წაკითხვაც სტაფს შეუძლია, რედაქტირება კი არა.
RCON უსაფრთხოდ RCON-ის მხარეს უფრო სიღრმისეულად ხსნის, მათ შორის რომელი თამაშები გაძლევს მისი შეზღუდვის საშუალებას საერთოდ.
პატარა ადმინ-ბოტი, რომელსაც ენდობი#
თუ Discord-იდან რამდენიმე ადმინ-ბრძანება გჭირდება და შენს თამაშს სტანდარტული Source-ის სტილის RCON აქვს (Minecraft, Rust legacy რეჟიმში, Source თამაშები, ბევრი სხვა), ამ ზომის ბოტი საკმარისია და მისი აუდიტი მარტივია. ის იყენებს discord.py 2.x-ს და rcon პაკეტს PyPI-დან.
import osimport discordfrom discord import app_commandsfrom rcon.source import rconGUILD = discord.Object(id=int(os.environ["GUILD_ID"]))LOG_CHANNEL = int(os.environ["LOG_CHANNEL_ID"])STAFF_ROLE = "Server Staff"ALLOWED = {"list", "kick", "whitelist"}client = discord.Client(intents=discord.Intents.default())tree = app_commands.CommandTree(client)async def run(*args: str) -> str: return await rcon(*args, host=os.environ["RCON_HOST"], port=int(os.environ["RCON_PORT"]), passwd=os.environ["RCON_PASSWORD"])@tree.command(name="server", description="Run an allowed server command", guild=GUILD)@app_commands.default_permissions(kick_members=True)@app_commands.checks.has_role(STAFF_ROLE)async def server(interaction: discord.Interaction, command: str): parts = command.split() if not parts or parts[0] not in ALLOWED: await interaction.response.send_message("Not allowed.", ephemeral=True) return await interaction.response.defer(ephemeral=True) result = await run(*parts) await interaction.followup.send(f"```\n{result[:1800]}\n```", ephemeral=True) log = client.get_channel(LOG_CHANNEL) if log: await log.send(f"{interaction.user} ran `{command}`")@tree.errorasync def on_error(interaction: discord.Interaction, error): if isinstance(error, app_commands.MissingRole): await interaction.response.send_message("Staff only.", ephemeral=True)@client.eventasync def on_ready(): await tree.sync(guild=GUILD)client.run(os.environ["DISCORD_TOKEN"])რა ხდის მას საკმარისად უსაფრთხოს:
- მხოლოდ slash ბრძანებები. ის არასოდეს კითხულობს ჩვეულებრივ შეტყობინებებს, ასე რომ privileged message content intent არ სჭირდება, და ვერავინ ამოქმედებს მას არხში აკრეფით.
- ორი შემოწმება.
default_permissionsბრძანებას მალავს წევრებისგან Kick Members-ის გარეშე, ხოლოhas_roleუარს ეუბნება ყველას სტაფის როლის გარეშე, თუნდაც სერვერის ადმინმა ბრძანების ხილვადობა შეცვალოს. - allow-list პირველ სიტყვაზე. გაშვება შეუძლია მხოლოდ
list-ს,kick-სა დაwhitelist-ს. ბრძანებები თითო-თითოდ, შეგნებულად დაამატე. - არგუმენტები ცალკე გადაეცემა. ბრძანება სიტყვებად იყოფა და ცალკე არგუმენტებად იგზავნება, ნაცვლად იმისა, რომ კონსოლში ერთ სტრიქონად ჩაისვას.
- ყოველი გამოყენება ლოგირდება არხში, იმ ადამიანით, ვინც ის გაუშვა.
- კოდში საიდუმლოები არ არის. ტოკენი, RCON პაროლი და ID-ები environment variable-ებიდან მოდის.
როცა გაიგებ, რომელ ბრძანებებს იყენებს სტაფი რეალურად, გააფართოვე ის სპეციალური ბრძანებებით - /kick player reason ტიპიზირებული პარამეტრებით - და არა მზარდი თავისუფალი ტექსტის allow-list-ით.
ლოგების Discord-ში გაგზავნა მათი გაჟონვის გარეშე#
ლოგები Discord-ში მოსახერხებელია და ამავე დროს კონფიდენციალურობის პრობლემა, რადგან Discord-ის არხების წაკითხვა და სქრინშოტის გადაღება მარტივია.
- გააგზავნე მოვლენები და არა ნედლი კონსოლი. "Steve დაბლოკა Anna-მ: x-ray" სასარგებლოა. ნედლი კონსოლის ასახვა შეიცავს IP მისამართებს, პლაგინების შეცდომებს და ყველაფერ დანარჩენს, რასაც სერვერი ბეჭდავს.
- სტაფის ლოგები სტაფის არხებში შეინახე, შემოწმებული უფლებებით. ლოგების არხი, რომელიც შემთხვევით
@everyone-ს უჩანს, მოთამაშეების მისამართების საჯაროდ გამოჩენის გავრცელებული გზაა. - დაიცავი rate limit-ები. Discord ზღუდავს, რამდენად სწრაფად შეუძლია ბოტს ან webhook-ს გამოქვეყნება; ლოგის ხაზები რამდენიმე წამში ერთხელ ერთ შეტყობინებაში გააერთიანე, თითო ხაზზე თითო შეტყობინების ნაცვლად. webhook-ების სტატია 429-ის დამუშავებას ხსნის.
- ნუ მიიჩნევ Discord-ს შენი ლოგების არქივად. ნამდვილი ლოგები სერვერზე რჩება, შენახვის ვადით - სერვერის ლოგები, რომელთა შენახვაც ღირს ამას ხსნის, ხოლო თამაშის სერვერის კონფიდენციალურობა და მოთამაშეების მონაცემები - რატომ არის ეს მნიშვნელოვანი.
ბოტის ჰოსტინგი და მისი ტოკენი#
ბოტს მუდმივად მუშაობა სჭირდება, რაც ნიშნავს, რომ ის ვინმეს სათამაშო კომპიუტერზე არ უნდა მუშაობდეს. პატარა აპლიკაციის ჰოსტინგის გეგმა საკმარისია: ზემოთ მოცემულის მსგავსი ბოტი უმცირესი გეგმის მეხსიერებაზე გაცილებით ნაკლებს იყენებს. RE:NODE-ზე Python-ისა და Node.js-ის ხაზები 1 GB-დან იწყება, environment variable-ები ტოკენისა და პაროლებისთვის Startup ჩანართზე იწერება, ხოლო Git deploy-ს შეუძლია ბოტის კოდი გაშვებისას კერძო GitHub რეპოზიტორიიდან ჩამოიტანოს - Discord.py ბოტის ჰოსტინგის გზამკვლევი ნაბიჯ-ნაბიჯ ინსტრუქციას შეიცავს, ხოლო აპლიკაციების ჰოსტინგის გვერდზე გეგმებია.
მოეპყარი ტოკენს როგორც პაროლს:
- არასოდეს ჩაწერო commit-ში. შეინახე environment variable-ში და ნებისმიერი ლოკალური
.envფაილი.gitignore-ში დაამატე. Environment variable-ები და საიდუმლოები ამ შაბლონს ხსნის. - გაჟონვის შემთხვევაში მაშინვე აღადგინე Discord-ის დეველოპერის პორტალიდან. ძველი ტოკენი მაშინვე წყვეტს მუშაობას.
- შეზღუდე, ვინ ხედავს ბოტის ჰოსტინგს. ნებისმიერს, ვისაც ბოტის სერვერის ფაილებზე ან პარამეტრებზე წვდომა აქვს, მისი ტოკენის წაკითხვა შეუძლია. პანელის subuser-ებს შეიძლება მიეცეთ კონსოლზე წვდომა პარამეტრებსა და ფაილებზე წვდომის გარეშე.
- იცოდე, ვის ეკუთვნის აპლიკაცია. ბოტი, რომელიც სტაფის ერთი წევრის პირად Discord ანგარიშს ეკუთვნის, მასთან ერთად მიდის. Discord-ის დეველოპერების გუნდები რამდენიმე ადამიანს აპლიკაციის მართვის საშუალებას აძლევს ანგარიშის გაზიარების გარეშე.
როცა რამე ცუდად მიდის#
თუ ბოტი იწყებს ისეთი რამეების კეთებას, რაც არავის უთხოვია, ან გეეჭვება, რომ მისი ტოკენი ან RCON პაროლი გაჟონა:
- აღადგინე ბოტის ტოკენი დეველოპერის პორტალში.
- შეცვალე RCON პაროლი თამაშის სერვერზე და განაახლე ბოტის environment variable.
- შეამოწმე Discord-ის audit log როლებისა და უფლებების ცვლილებებზე, ხოლო ბოტის ლოგების არხი - ბრძანებებზე, რომლებსაც ვერ ცნობ.
- შეამოწმე თამაშის სერვერი ადმინ-ჩანაწერებზე, ბანებზე, whitelist-ის ცვლილებებზე ან ფაილებზე, რომლებიც შენ არ შეგიქმნია. რა ქნა, როცა შენი სერვერი გატეხეს სამუშაოს სრულ თანმიმდევრობას ხსნის.
FAQ#
DiscordSRV-ის კონსოლის არხის გამოყენება უსაფრთხოა?
ის იმდენად უსაფრთხოა, რამდენადაც არხის უფლებები და ანგარიშები, რომლებსაც მასში წერა შეუძლიათ. შეზღუდე ის რამდენიმე სანდო სტაფის წევრით, Discord-ში მოდერატორებისთვის ორფაქტორიანი ავთენტიკაცია მოითხოვე და მისი კონფიგურაციით შეზღუდე, რომელი ბრძანებების გაშვება შეიძლება Discord-იდან. საზოგადოებების უმეტესობისთვის სტაფს პანელის კონსოლი უკეთ ემსახურება.
ჩემმა ბოტმა RCON უნდა გამოიყენოს თუ თამაშის პლაგინი?
პლაგინს უფრო მჭიდრო ინტეგრაცია შეუძლია და ხშირად უფრო დეტალური უფლებები აქვს; RCON მუშაობს ნებისმიერ თამაშთან, რომელიც მას უჭერს მხარს, და ბოტს სერვერისგან გამიჯნულს ტოვებს. პატარა ადმინ-ბოტისთვის RCON allow-list-ით აუდიტისთვის უფრო მარტივია.
შეუძლია ბოტს თამაშის სერვერის იმავე გეგმაზე მუშაობა?
ცალკე გაუშვი. ბოტი საკუთარ პატარა აპლიკაციის გეგმაზე აგრძელებს მუშაობას, როცა თამაშის სერვერი გადაიტვირთება ან დაკრაშავს, რაც ზუსტად ის მომენტია, როცა სტატუსი და გაფრთხილებები გინდა, და ბოტის ტოკენს შორს ინახავს ადამიანებისგან, რომლებსაც თამაშის სერვერის ფაილებზე წვდომა აქვთ.
მჭირდება message content intent?
slash ბრძანებებისთვის არა. ეს privileged intent-ია, საჭირო ჩვეულებრივი შეტყობინებების ტექსტის წასაკითხად. ბოტს, რომელიც მხოლოდ slash ბრძანებებს იყენებს, ის არ სჭირდება, და მის გარეშე უფრო უსაფრთხოა.
რა უფლებები სჭირდება სტატუსის ბოტს?
არხის ნახვა, შეტყობინებების გაგზავნა და ბმულების embed, და შეტყობინებების ისტორიის წაკითხვა, თუ საკუთარ შეტყობინებას არედაქტირებს. მას არაფერი სჭირდება, რაც როლებს, წევრებს ან სერვერის პარამეტრებს ეხება.




კომენტარები
სრულიად ანონიმურად: ანგარიშის, ელფოსტის და cookie-ის გარეშე. ინახება მხოლოდ სახელი, ტექსტი და დრო - სხვა არაფერი. ბმულების რაოდენობა ლიმიტირებულია.