Skip to content

Configuration zh TW

ArchiBot edited this page Mar 20, 2024 · 189 revisions

組態設定

本頁面專門用於說明ASF的設定。 這是一份關於​config​資料夾的完整文件,使您能夠依照您的需求調整ASF。


簡介

ASF的設定分為兩個主要部分⸺全域(程序)設定與每個Bot的設定。 每個Bot都有自己一個名為​BotName.json​的Bot設定檔(​BotName​為Bot的名稱),而全域ASF(程序)設定是一個名為​ASF.json​的檔案。

每個Bot都是一個在ASF程序中執行的獨立Steam帳號。 為了能夠正常運作,ASF需要定義​至少一個​Bot實例。 程序不會強制限制Bot實例的數量,所以您可以依據您的需求使用任意數量的Bot(Steam帳號)。

ASF使用​JSON​格式來儲存自身的設定檔。 這是個人性化、可讀性高且非常通用的格式,您可以在裡面設定程式。 不過不用擔心,您不需要為了設定ASF去專門了解JSON。 我提到它只是考慮到您可能會想要使用一些Bash腳本批次建立大量的ASF設定檔。

您可以經由幾種方式來完成設定。 您可以使用我們的​設定檔生成器網頁工具​,這是一個獨立於ASF的本機應用程式。 您也可以使用我們的IPC前端​ASF-ui​來直接設定ASF。 最後,您也隨時能夠依照下文指定的固定JSON結構,手動生成設定檔。 我們將簡明地解釋這些可用方式。


設定檔生成器網頁工具

我們的​設定檔生成器網頁工具​的目標是提供您一個用於生成ASF設定檔的友善前端。 設定檔生成器也是基於用戶端的網頁工具,也就是說,您輸入的任何資訊都不會被上傳,而只會在本機中進行處理。 這保證了安全性與可靠性,因為如果您願意下載所有相關檔案,然後在您偏好的瀏覽器中打開​index.html​,它甚至可以​離線​執行。

設定檔生成器網頁工具在Chrome與Firefox上經過驗證能夠正常執行,且它應該也能在所有支援JavaScript的主流瀏覽器中正常執行。

它的用法非常簡單:切換到適當的分頁來選擇要生成​ASF​設定檔還是​Bot​設定檔,確保所選設定檔的版本與您的ASF版本相符,然後輸入所有詳細資訊,並點擊「下載」按鈕。 最後將這個檔案移動到ASF的​config​資料夾中,如果需要的話,覆蓋掉已經存在的檔案。 若要繼續設定,則重複以上操作,並參考本章節的其他部分來了解所有可設定的選項。


ASF-ui 設定

我們的​ASF-ui​ IPC介面也允許您設定ASF,且這是在生成初始設定檔後修改設定的最佳方式,因為與設定檔生成器網頁工具總是生成新的檔案不同,這可以在原地直接編輯設定檔。

為了使用ASF-ui,您必須先啟用​IPC​介面自身。 IPC​預設為啟用,因此只要您沒有把它停用,就可以直接存取它。

在啟動程式後,直接前往ASF的​IPC位址​。 若一切運作正常,您可以在這裡修改ASF設定。


手動設定

在一般情形下,我們強烈建議使用我們的設定檔生成器或ASF-ui,因為這樣更簡單,且能確保您不會不小心造成JSON結構錯誤。但如果您出於某些原因不想使用它們,那麼您也可以自行建立正確的設定檔。 參考以下的JSON範例,有個好的開始來了解正確的結構。您可以將內容複製到檔案中,並把它當作設定檔的基礎內容。 由於您沒有使用任何我們的前端,請確保您的設定檔​是有效的​,因為如果無法剖析,ASF會拒絕載入。 即使它屬於有效的JSON,您也必須確保所有屬性都有正確的型別,就像ASF所要求的。 關於所有可使用欄位正確的JSON結構,請參閱​JSON映射​及我們下方的文件。


全域設定檔

全域設定位於​ASF.json​檔案中,具有下列結構:

{
    "AutoRestart": true,
    "Blacklist": [],
    "CommandPrefix": "!",
    "ConfirmationsLimiterDelay": 10,
    "ConnectionTimeout": 90,
    "CurrentCulture": null,
    "Debug": false,
    "DefaultBot": null,
    "FarmingDelay": 15,
    "FilterBadBots": true,
    "GiftsLimiterDelay": 1,
    "Headless": false,
    "IdleFarmingPeriod": 8,
    "InventoryLimiterDelay": 4,
    "IPC": true,
    "IPCPassword": null,
    "IPCPasswordFormat": 0,
    "LicenseID": null,
    "LoginLimiterDelay": 10,
    "MaxFarmingTime": 10,
    "MaxTradeHoldDuration": 15,
    "MinFarmingDelayAfterBlock": 60,
    "OptimizationMode": 0,
    "PluginsUpdateList": [],
    "PluginsUpdateMode": 0,
    "SteamMessagePrefix": "/me ",
    "SteamOwnerID": 0,
    "SteamProtocols": 7,
    "UpdateChannel": 1,
    "UpdatePeriod": 24,
    "WebLimiterDelay": 300,
    "WebProxy": null,
    "WebProxyPassword": null,
    "WebProxyUsername": null
}

所有選項的解釋如下:

AutoRestart(自動重新啟動)

bool​型別,預設值為​true​。 本屬性定義了是否允許ASF在需要時自行重新啟動。 有些事件會要求ASF自行重新啟動,例如ASF更新(經由​UpdatePeriod​或​update​指令來達成),編輯​ASF.json​設定檔、​restart​指令或類似事件。 通常重新啟動包含兩個部分⸺建立新的程序及結束當前程序。 大多數使用者對此應該沒有問題,且應維持本屬性為預設值​true​,但是⸺若您正在透過自己的腳本並/或經由​dotnet​執行ASF,您可能會想完全控制程序並避免某些情形,例如有新(重新啟動)的ASF程序在背景沉靜執行,而不是在腳本前景與舊的ASF程序一起退出。 考慮到新的程序將不再是您原有程序的直接子程序,這一點特別重要,因為這可能會使您無法為其使用標準控制台輸入。

如果有這樣的情形,那麼本屬性就是為您所準備的,您可以把它設定成​false​。 但是,請注意,在這種情形下​​需要負責自行重新啟動程序。 這在某種程度上很重要,因為ASF將只會退出,而不會生成新程序(例如在更新後)。因此,若您沒有加入任何邏輯,它將會停止運作直到您再次啟動它。 ASF總是會以正確的錯誤碼退出,指示出成功(零)或不成功(非零)。這樣您就能在腳本中加入正確的邏輯,以避免在故障時自動重新啟動,或至少製作一份本機副本​log.txt​來提供進一步分析。 也請注意,不論如何設定本屬性,​restart​指令總是會重新啟動ASF,因為此屬性只用於定義預設行為,而​restart​指令總能重新啟動程序。 除非您有停用此功能的理由,否則您應維持啟用它。


Blacklist(黑名單)

ImmutableHashSet<uint>​型別,預設值為空。 顧名思義,本全域設定屬性定義了ASF自動掛卡程序要完全忽略的AppID(遊戲)。 但不幸的是,Steam喜歡將夏季/冬季特賣徽章標記成「可掉落的交換卡片」,這誤導了ASF程序,相信這是一個能掛卡的有效遊戲。 若沒有任何形式的黑名單,ASF最終會「掛」在掛卡一個實際上並非遊戲的遊戲上,並無限等待不存在的卡片掉落。 ASF黑名單的目的是將這些徽章標記成無法掛卡,因此我們可以在掛卡時直接忽略它們,而不是落入Bug陷阱。

ASF包含兩個預設的黑名單:​SalesBlacklist​硬編碼於ASF的程式碼中,且無法編輯;一般的​Blacklist​則是在本處定義。 SalesBlacklist​與ASF版本一同更新,且通常會包含在發布時已知的所有「不良」AppID,因此如果您使用最新版的ASF,就不需要自行管理這裡定義的​Blacklist​。 本屬性的主要目的是允許您將ASF發布時未知的新AppID加入黑名單,它們不應被掛卡。 硬編碼的​SalesBlacklist​都會在第一時間更新,因此如果您使用最新版的ASF,就不需要自行更新您的​Blacklist​;但如果沒有​Blacklist​,您就被迫強制更新ASF以在Valve釋出新的特賣徽章時能「正常執行」⸺我並不想強制您使用最新版的ASF程式碼,因此假如您因為某些原因,或無法在新的ASF中更新硬編碼的​SalesBlacklist​,但您又想要讓舊的ASF維持運作,本屬性允許您自行「修復」ASF。 除非您有​充分的​理由編輯此屬性,否則您應維持它為預設值。

若您正尋找基於Bot的黑名單,請查看​fb​、​fbadd​及​fbrm指令​。


CommandPrefix(指令前綴)

string​型別,預設值為​!​。 本屬性指定用於ASF​指令區分大小寫​的前綴。 也就是說,這是您要在每個ASF指令前加上這個,ASF才會聽從您的指令。 您也可以將此值設定成​null​或留空,來讓ASF不使用前綴,在這種情形下,您可以直接輸入帶有一般識別碼的指令。 但是,這樣做會降低ASF的效能,因為ASF經過最佳化,如果訊息不是以​CommandPrefix​開頭,就不會進一步剖析它⸺若您決定不使用前綴,ASF將會被迫讀取並回應所有訊息,即使它們並不是ASF指令。 因此,若您不喜歡預設值​!​,仍建議繼續使用​CommandPrefix​,如​/​。 為了保持一致,​CommandPrefix​會影響整個ASF程序。 除非您有理由編輯此屬性,否則您應維持它為預設值。


ConfirmationsLimiterDelay(確認請求延時)

byte​型別,預設值為​10​。 ASF會確保在兩次連續的雙重驗證確認提取請求間至少間隔​ConfirmationsLimiterDelay​秒,以避免觸發速率限制⸺這被使用在​ASF雙重驗證​上,例如​2faok​指令,以及在一些與交易相關的操作上面。 預設值是依據我們的測試結果所訂定,如果您不想遇到問題,請勿減少此值。 除非您有​充分的​理由編輯此屬性,否則您應維持它為預設值。


ConnectionTimeout(連線逾時時間)

byte​型別,預設值為​90​。 本屬性定義了ASF執行各種網路操作的逾時時間,以秒為單位。 特別是,​ConnectionTimeout​定義了HTTP及IPC請求的逾時秒數,​ConnectionTimeout / 10​定義了心跳機制的最大失敗次數,而​ConnectionTimeout / 30​定義了我們允許初始Steam網路連線請求的分鐘數。 對於大多數人來說,預設值​90​應該是適合的,但是如果您的網路連線或PC速度較慢,您可能會希望增加此值(像是​120​)。 請注意,即使是更大的值也無法神奇地修復緩慢或甚至是無法存取的Steam伺服器,所以我們不應該無限等待不會發生的事情,而是稍後再試。 將此值設定過高會導致在抓取網路問題時出現過多延遲,並降低整體效能。 將此值設定過低會降低整體的穩定性及效能,因為ASF會在尚在剖析時中止有效的請求。 因此,在一般情形下,將此值設定成比預設還要低並沒有任何優點,因為Steam伺服器常常會變得異常緩慢,且可能會需要更多時間來剖析ASF請求。 預設值是相信我們的網路連線穩定,及懷疑Steam網路能在逾時前處理我們的請求之間的平衡。 若您想盡快發現問題,並使ASF更快重新連線/做出回應,預設值就足夠(或稍微低於,像是​60​,使ASF不用等那麼久)。 與之相反,若您發現ASF遇到了網路問題,例如請求失敗、遺失心跳包或與Steam連線中斷,如果您確定這​並非​由您的網路所引起的,而是Steam自身,則增加此值就具意義,因為增加逾時時間可以讓ASF有更多「耐心」,來不會決定要立刻重新連線。

可能需要增加此屬性的一個範例情形是讓ASF處理極大量的交易提案,Steam可能需要2分鐘以上才能完全接受並處理這些提案。 透過增加預設的逾時時間,ASF會更有耐心並等待更長時間,然後才會決定不完成交易並放棄初始請求。

另一種情形可能是設備或網路連線非常緩慢,需要更多的時間來處理正在傳輸的資料。 這是個非常罕見的情形,因為CPU/網路頻寬基本上不會是個瓶頸,但仍是個值得一提的可能性。

簡而言之,在大多數情形下預設值是適合的,但如果需要,您可能會想要增加它。 不過遠高於預設值也沒有任何意義,因為更多的逾時時間也無法神奇地修復無法存取的Steam伺服器。 除非您有理由編輯此屬性,否則您應維持它為預設值。


CurrentCulture(所在語言地區)

string​型別,預設值為​null​。 預設情形下,ASF會嘗試使用您的作業系統語言,且如果可以,會優先使用該語言的翻譯字串。 這要感謝我們的社群,他們致力於將ASF​在地化​成各類主流語言。 若出於某種原因,您不想使用您的作業系統原生語言,您可以使用此設定屬性來選擇任意一種您想使用的有效語言。 如需所有可以使用的語言,請造訪​MSDN​來查詢​語言編碼​。 值得一提的是,ASF接受包含特定國家或地區的編碼,例如​"en-GB"​,也接受通用編碼,例如​"en"​。 指定當前語系還可能會影響與地區相關的行為,例如貨幣/日期格式等。 請注意,若您選擇非本機原生語言,您可能會需要額外的字型/語言套件才能正確顯示特定語言的字元。 通常在您偏好以英文而非您的母語使用ASF時,會需要使用這個設定屬性。


Debug(除錯模式)

bool​型別,預設值為​false​。 本屬性定義了程序是否以除錯模式執行。 在除錯模式中,ASF會在​config​旁建立一個特殊的​debug​資料夾,用於追蹤ASF與Steam伺服器間的所有通訊。 除錯資訊有助於發現與網路及一般ASF工作流程相關的棘手問題。 除此之外,某些程式常式會更加詳細,例如​WebBrowser​會說明某些請求失敗的確切原因⸺這些條目會被寫入至一般的ASF紀錄日誌中。 除非開發人員要求,否則您不應在除錯模式下執行ASF​。 以除錯模式執行ASF會​降低效能​、​減少穩定性​,且會​生成過量除錯訊息​,因此​只應​在需要時短暫使用,用於除錯特定問題、重現錯誤或獲得關於失敗請求的更多資訊,但​不應​用於日常的程式執行階段。 您將會看到​非常大量的​新錯誤、問題及異常狀況⸺若您決定自行分析這些資訊,請確保您對ASF、Steam及其特點有著充分的了解,因為並不是所有資訊皆與問題相關。

警告:​啟用本模式會在紀錄日誌中記錄​可能敏感​的資訊,例如您登入至Steam的帳號及密碼(因網路日誌所記錄)。 這些資料會同時寫入至​debug​資料夾及標準的​log.txt​(現在是故意詳細記錄本資訊)中。 您不應在任何公開位置張貼ASF生成的除錯內容,且ASF開發人員總是會提醒您應經由電子郵件或其他安全位置傳送它。 我們不會儲存或利用這些敏感資訊,它們只是做為除錯常式的一部份而寫入,因為它們或許會與您遇到的問題有關。 我們希望您不以任何方式修改ASF紀錄日誌,但如果您擔心,您還是依然能適當編輯這些敏感資訊。

您可以使用取代的方式替換掉敏感資訊,例如使用星號。 但您需要避免完全刪除包含敏感資訊的資訊行,因為它們可能與問題有關,應予以保留。


DefaultBot(預設 Bot)

string​型別,預設值為​null​。 在某些情境下,ASF會需要有「預設Bot」的使用,來處理事件⸺舉例來說,在您未指定目標Bot時的IPC指令或互動式控制台。 本屬性使您能夠選擇預設Bot來處理這些情境下,請將​BotName​填入這裡。 若設定的Bot不存在,或您使用了預設值​null​,ASF將會依字母順序選擇第一個登錄的Bot。 若您想要在IPC或互動式控制台指令中省略​[Bots]​引數,且總是預設選擇同一個Bot,您就需要設定本設定屬性。


FarmingDelay(掛卡延時)

byte​型別,預設值為​15​。 ASF會在正常運作時每隔​FarmingDelay​分鐘檢查一次當前掛卡的遊戲是否已掉落所有卡片。 將此屬性設定過低可能會傳送過多的Steam請求,而設定過高可能會使ASF在掛卡完成後仍「掛著」指定遊戲,直到最多滿​FarmingDelay​分鐘。 預設值應該對於大多數使用者來說是適合的,但如果您有很多個Bot在執行,則可以考慮增加至例如​30​分鐘,以限制傳送的Steam請求。 值得一提的是,ASF使用基於事件的機制,並在每個Steam物品掉落時檢查遊戲的徽章頁面,所以在一般情形下,​我們甚至能不必每隔固定時間去檢查​,但由於我們並不完全信任Steam網路⸺如果我們無法在​FarmingDelay​分鐘內未能檢查卡片是否掉落,我們仍會去檢查遊戲的徽章頁面。 假設Steam網路運作正常,降低此值​不會以任何方式提高掛卡效率​,而且​還會顯著增加網路負擔​⸺建議維持預設值​15​分鐘,並只在需要時才增加它。 除非您有​充分的​理由編輯此屬性,否則您應維持它為預設值。


FilterBadBots(過濾惡意 Bot)

bool​型別,預設值為​true​。 本屬性定義了ASF是否會自動拒絕已知被標示成惡劣行為者的交易提案。 為此,ASF會依據需要與我們的伺服器通訊,以提取Steam ID黑名單清單。 列出的那些Bot,是我們歸類為對ASF有害的人所操作的,例如那些違反我們的​行為準則​、使用我們提供的功能及資源例如​PublicListing​來濫用或利用他人,或是從事直接犯罪行為例如對伺服器發動DDoS攻擊的人。 因為ASF對於使用者之間的整體公平、誠信及合作方面有堅定的立場,以使得整體社群蓬勃發展,因此預設情形下此屬性為啟用,ASF會篩選掉歸類為對我們提供的服務有害的Bot。 除非您有​充分的​理由編輯此屬性,例如不同意我們的聲明,並故意允許這些Bot進行操作(包含利用您的帳號),否則您應維持它為預設值。


GiftsLimiterDelay(請求限制延時)

byte​型別,預設值為​1​。 在兩個連續的贈禮/序號/授權處理(兌換)請求間,ASF會確保至少間隔​GiftsLimiterDelay​秒,以避免觸發速率限制。 除此之外,這也用於遊戲清單請求的全域限制器,例如由​owns指令​所發出的請求。 除非您有​充分的​理由編輯此屬性,否則您應維持它為預設值。


Headless(無頭模式)

bool​型別,預設值為​false​。 本屬性定義了程序是否以無頭模式執行。 在無頭模式中,ASF會假定它在伺服器或其他非互動式環境下執行,因此它不會嘗試在控制台輸入中讀取任何資訊。 這包含了隨選詳細資料(帳號憑證,例如雙重驗證代碼、Steam Guard代碼、密碼,或ASF操作所需的其他任何變數),及其他所有控制台輸入(例如互動式指令控制台)。 也就是說,​Headless​模式等同於將ASF控制台變成唯讀。 本設定主要給在伺服器上執行ASF的使用者使用,在需要使用者輸入(例如雙重驗證代碼)時,ASF將會直接停止使用該帳號以中止輸入操作。 除非您在伺服器上執行ASF,且您先前已確認ASF能夠在非無頭模式中執行,否則您應維持停用它。 在無頭模式下,任何使用者互動行為皆會被拒絕,如果您的帳號在啟動過程中需要​任何​控制台輸入,則帳號不會啟動。 這對伺服器來說非常有用,因為ASF可以在要求提供憑證時嘗試中止帳號登入,而不是(無限)等待使用者提供這些憑證。 啟用此模式也會允許您能夠使用​input指令​,來作為標準控制台輸入的替代方式。 若您不確定如何設定本屬性,請保留預設值​false​。

若您在伺服器上執行ASF,您可能會需要將本選項與​--process-required命令列引數​一起配合使用。


IdleFarmingPeriod(掛卡檢查週期)

byte​型別,預設值為​8​。 當ASF沒有東西掛卡時,它會每隔​IdleFarmingPeriod​小時檢查帳號內是否擁有新遊戲可供掛卡。 在我們獲得新遊戲時,並不需要此功能,因為ASF足夠智慧,可以在這種情形中自動檢查徽章頁面。 IdleFarmingPeriod​主要是針對我們在帳號中已有的遊戲新加入了交換卡片功能的情形。 在這種情形下不會產生事件,因此如果我們要知道這件事,ASF就必須定期檢查徽章頁面。 將值設定成​0​時會停用本功能。 並請查看:​FarmingPreferences​中的​ShutdownOnFarmingFinished​偏好設定。


InventoryLimiterDelay(物品庫限制延時)

byte​型別,預設值為​4​。 ASF會確保在兩次連續的物品庫請求間至少間隔​InventoryLimiterDelay​秒,以避免觸發速率限制⸺這被使用在提取Steam物品庫時,特別是在您自己的指令中,例如​loot​或​transfer​。 預設值​4​是依據連續提取超過100個Bot實例的物品庫所設定的,應該能滿足大部分(可能不是全部)的使用者需求。 但是,如果您的Bot數量很少,您可能會想要減少它,或甚至把它更改成​0​,使ASF忽略延時並加快獲得Steam物品庫。 但請注意,設定過低的值​將會​導致Steam暫時封鎖您的IP,並完全阻止您提取您的物品庫。 若您執行了很多需要大量物品庫請求的Bot,您可能還會需要增加此值,但在這種情形下,您可能更應該去限制這些請求的數量。 除非您有​充分的​理由編輯此屬性,否則您應維持它為預設值。


IPC(行程間通訊)

bool​型別,預設值為​true​。 本屬性定義了ASF的​IPC​伺服器是否與主程序一同啟動。 IPC允許行程間通訊,包含透過啟動本機HTTP伺服器使用​ASF-ui​。 若您不打算使用任何ASF的第三方IPC整合工具,包含我們的ASF-ui的話,您就可以安全地停用這個選項。 否則,最好保持啟用狀態(預設狀態)。


IPCPassword(IPC 密碼)

string​型別,預設值為​null​。 本屬性定義了每個經由IPC執行的API呼叫的強制性密碼,作為一項額外的安全措施。 當設定成非空值時,所有的IPC請求都會需要額外的​password​屬性,為此處指定的密碼。 預設值​null​將會跳過要求密碼,並使ASF接受所有請求。 除此之外,啟用此選項也會啟用內建的IPC反暴力破解機制,一個​IPAddress​在非常短的時間內傳送過多未授權的請求時,將會被暫時封鎖。 除非您有理由編輯此屬性,否則您應維持它為預設值。


IPCPasswordFormat(IPC 密碼格式)

byte​型別,預設值為​0​。 本屬性定義了​IPCPassword​屬性的格式,使用​EHashingMethod​作為基本類型。 若需了解更多資訊,請參閱​安全性​章節,因為您需要確保​IPCPassword​屬性確實包含符合IPCPasswordFormat​的密碼。 也就是說,在您更改​IPCPasswordFormat​的時候,您的​IPCPassword​就必須​已經​是您所選的格式了,而不是在更改完成後才是。 除非您知道您在做什麼,否則請保留預設值​0​。


LicenseID(授權 ID)

Guid?​型別,預設值為​null​。 本屬性允許我們的​贊助者​使用付費的選擇性功能來增強ASF的運作能力。 在目前,這允許您使用​ItemsMatcher​外掛程式中的​MatchActively​功能。

雖然我們建議您使用GitHub,因為它提供了每月續訂及一次性的階級,並能完全自動化使您享有立即解鎖權限的功能,我們​​支援所有其他可供使用的​贊助管道​。 閱讀​這則貼文​來了解如何透過其他方式贊助,並手動獲得相應時長的授權。

不論使用何種方式,只要您是ASF贊助者,您就能在​這裡​獲得您的授權碼。 您會需要以GitHub登入來確認您的身分,我們只會請求您的公開唯讀資訊,也就是您的使用者名稱。 LicenseID​由32個十六進制字元組成,例如​f6a0529813f74d119982eb4fe43a9a24​。

請確保您沒有與其他人共用您的​LicenseID​。 因為它是給個人使用的,如果洩漏出去就有可能被撤銷。 如果不幸您意外洩漏了授權碼,您可以在相同地方生成一個新的。

除非您想要啟用ASF的額外功能,否則您沒有必要在此提供授權碼。


LoginLimiterDelay(登入限制延時)

byte​型別,預設值為​10​。 在兩個連續的連線嘗試間,ASF會確保至少間隔​LoginLimiterDelay​秒,以避免觸發速率限制。 預設值​10​是依據超過100個Bot實例的連線所設定的,應該能滿足大部分(可能不是全部)的使用者需求。 但是,如果您的Bot數量很少,您可能會想要增加/減少它,或甚至把更改成​0​,使ASF忽略延時並加快連線至Steam。 但請注意,在有很多Bot的情形下​將會​導致Steam暫時封鎖您的IP,觸發​InvalidPassword/RateLimitExceeded​錯誤,並​完全​阻止您登入⸺不只是在ASF,也包含您的Steam用戶端那邊。 同理,如果您執行大量Bot,特別是在同一IP位址內一起使用其他Steam用戶端/工具,您可能還會需要增加此值,以將登入請求分散至更長的時間段。

另外說明一下,此值還會用於所有ASF計畫任務的附載平衡緩衝,例如在​SendTradePeriod​中的交易。 除非您有​充分的​理由編輯此屬性,否則您應維持它為預設值。


MaxFarmingTime(掛卡最大時數)

byte​型別,預設值為​10​。 如您所知,Steam並不總是能正常運作,有時候會發生奇怪的狀況,例如雖然我們正在遊玩,但沒有到紀錄我們的遊玩時數上。 ASF允許一個遊戲在單一遊戲模式下最多掛卡​MaxFarmingTime​小時,並在此之後認為該遊戲已完成掛卡。 這是為了在發生怪異情形時不會使掛卡程序卡住所必需的,也可能Steam因為某種原因釋出了一個新的徽章,而使ASF卡住掛卡進度(參見:​Blacklist​)。 預設值​10​小時應該足以使一個遊戲掉落全部的交換卡片。 將此屬性設定過低可能會使ASF跳過有效的遊戲(是的,有些遊戲甚至需要長達9小時卡片才能全部掉完),設定過高則可能會導致掛卡程序卡住過久。 請注意,本屬性只會影響單次掛卡期間的單一遊戲(在完成整個佇列後,ASF將會重新計時),此外,此屬性並非依據遊玩時數,而是ASF內部的掛卡時數,因此ASF也會在重新啟動後重新計時。 除非您有​充分的​理由編輯此屬性,否則您應維持它為預設值。


MaxTradeHoldDuration(交易託管最大期間)

MaxTradeHoldDuration(交易託管最大期間) 本屬性定義了我們願意接受的交易託管最大天數⸺ASF會拒絕保留超過​MaxTradeHoldDuration​天的交易,如​交易​章節所述。 此選項只會作用於在​TradingPreferences​中啟用了​SteamTradeMatcher​的Bot,而不會影響來自​Master​/​SteamOwnerID​的交易,也不影響贈禮。 對每個人來說,交易託管是非常惱人的,沒有人想被它打擾。 ASF應在自由的原則下幫助每個人使用,不論是否有交易託管⸺這就是為什麼本選項的預設值為​15​。 但是,如果您想要拒絕所有具交易託管的交易,您可以在此處設定成​0​。 請注意以下說明:有時間限制的交換卡片不受此選項影響,且ASF會自動拒絕具有交易託管的交易,如​交易​章節所述,所以沒有必要只因為這個原因而拒絕所有人。 除非您有理由編輯此屬性,否則您應維持它為預設值。


MinFarmingDelayAfterBlock(停止後重新掛卡最小延時)

byte​型別,預設值為​60​。 本屬性定義了以秒為單位的最小時間,如果ASF先前因為​LoggedInElsewhere​而失去連線,則在等待這段時間後才會再次恢復掛卡:如果您決定以執行遊戲來強制使當前掛卡的ASF斷線,就會產生這種情形。 這種延遲存在的原因主要是為了方便並節省負擔,例如它使您能夠重新啟動遊戲,不必因為那一兩秒鐘的空檔,去跟ASF爭奪帳號的使用權。 由於重新獲得連線階段會使​LoggedInElsewhere​失去連線,ASF就必須執行整個重新連線的流程,這會使設備及Steam網路增加額外的壓力,因此能夠的話,避免掉所有不必要的斷線。 預設情形下,本屬性設定成​60​秒,這應該足以讓您輕鬆重新啟動遊戲了。 但是,在某些情境中您可能會希望增加此值,例如您的網路經常失去連線,且ASF會太快接管,這會導致您被迫自行重新連線。 此屬性的最大允許值為​255​,這應該足以應付所有常見情境。 除了上述情形外,您也可以減少甚至設定成​0​來完全取消本延遲,但因上述原因,我們通常不建議這樣做。 除非您有理由編輯此屬性,否則您應維持它為預設值。


OptimizationMode(最佳化模式)

byte​型別,預設值為​0​。 本屬性定義了ASF在執行期間偏好的最佳化模式。 目前,ASF支援兩種模式:​0​為​MaxPerformance​;​1​為​MinMemoryUsage​。 預設情形下,ASF會盡可能地平行(並行)執行越多的工作,以跨CPU核心、多個CPU執行緒、多個網路插座及多個執行緒集區工作來增強效能。 舉例來說,ASF會在檢查需要掛卡的時查詢您的第一頁徽章頁面,在請求完成後,ASF會從中讀取您實際的徽章頁數,然後同時向所有剩餘頁面傳送請求。 這​基本上​就是您所想要的,因為在大多數情形下負擔是最小的,即使在單個CPU核心和非常有限功率的老舊硬體上,也能看到ASF異步程式碼的好處。 但是,由於許多工作是平行處理的,因此ASF需要在執行期間負責維護它們,例如維持網路插座開啟、執行緒處於活動狀態及工作有被處理,這可能會導致記憶體使用量不時增加。若您的可用記憶體嚴重受限,您可能會想要切換本屬性為​1​(​MinMemoryUsage​)來強制ASF處理盡可能少的工作,並盡量以同步方式執行可平行處理的異步程式碼。 只有在您已詳閱​低記憶體設定​後,且決定想要犧牲大量效能以獲得節省極少量的記憶體負擔時,才應考慮開啟此屬性。 通常本選項比您能夠使用的其他方式達成的成效還來得​差得多​,例如經由限制您的ASF使用,或調整執行環境的垃圾收集器,如​低記憶體設定​所述。 因此,如果您無法經由其他(更好的)方式獲得滿意的結果,則應將​MinMemoryUsage​作為重新編譯執行環境前的​最後手段​。 除非您有​充分的​理由編輯此屬性,否則您應維持它為預設值。


PluginsUpdateList(外掛程式更新清單)

ImmutableHashSet<string>​型別,預設值為空。 本屬性定義了外掛程式組件名稱的清單,作為自動更新的黑名單或白名單,由下文所述的​PluginsUpdateMode​定義。

除非您有理由編輯此屬性,否則您應維持它為預設值。


PluginsUpdateMode(外掛程式更新模式)

byte​型別,預設值為​0​。 本屬性定義了上文​PluginsUpdateList​的外掛程式更新模式。 經由指定本屬性,您能夠簡單地啟用/停用所有未被您指定的外掛程式的自動更新。

  • 值為​0​時為​Whitelist​(白名單),會​停用​未在​PluginsUpdateList​中定義的所有外掛程式。
  • 值為​1​時為​Blacklist​(白名單),會​啟用​未在​PluginsUpdateList​中定義的所有外掛程式。

ASF團隊提醒您,為了您的安全,您應僅為受信任的內容啟用自動更新​。 請注意,​不論​如何設定本選項,惡意的外掛程式都能自行更新或遠端執行指令。因此,本設定只適用於ASF自帶的外掛程式更新功能,且您仍應在使用前,驗證每個外掛程式的安全性。

除非您有理由編輯此屬性,否則您應維持它為預設值。


SteamMessagePrefix(Steam 訊息前綴)

string​型別,預設值為​"/me "​。 本屬性定義了加入至ASF送出的所有Steam訊息最開頭的前綴。 預設情形下,ASF使用​"/me "​為前綴,使Steam聊天以不同顏色顯示Bot訊息,以便更容易區分它們。 另一個值得提及的前綴是​"/pre "​,它有相似的結果,但有著不同的格式。 您也可以將本屬性設定成空值或​null​來完全停用前綴,並以傳統的方式輸出所有ASF訊息。 值得一提的是,本屬性只會影響Steam訊息⸺以其他通道(例如IPC)回傳的回應不會受到影響。 除非您想要自訂標準的ASF行為,否則最好保留預設值。


SteamOwnerID(擁有者的 Steam ID)

ulong​型別,預設值為​0​。 本屬性定義了ASF程序擁有者的64位元Steam ID,與指定Bot實例的​Master​權限非常相似(但作用於全域)。 基本上您會想要將本屬性設定成您自己的Steam主帳號的ID。 Master​權限包含對該Bot實例的完全控制,但是全域指令例如​exit​、​restart​或​update​則只能由​SteamOwnerID​使用。 這很方便,因為您可能想要為您的朋友執行Bot,但同時不允許他們控制ASF程序,例如使用​exit​指令退出程序。 預設值​0​代表ASF程序沒有擁有者,這代表沒有人能使用全域ASF指令。 請注意,本屬性只適用於Steam聊天。 即使未設定本屬性,您仍可在​IPC​及互動式控制台中執行​Owner​權限的指令。


SteamProtocols(Steam 網際網路協定)

byte flags​型別,預設值為​7​。 本屬性定義了ASF在連線Steam伺服器時使用的Steam網際網路協定,其定義如下:

名稱 描述
0 無協定
1 TCP 傳輸控制協定
2 UDP 使用者資料報協定
4 WebSocket WebSocket

請注意,本屬性為​flags​欄位,因此可以使用所有可用值任意組合。 若您想深入了解更多資訊,請參閱​JSON映射​。 不啟用任何旗標即為​None​選項,且該選項本身無效。

預設情形下,ASF會使用所有可以使用的Steam協定,作為應對當機期間及其他相似的Steam問題的措施。 若您想要限制ASF只使用一兩種指定的協定,您需要修改本屬性。 例如若您在防火牆中啟用只啟用了TCP的流量,且您不希望ASF嘗試透過UDP連線,就可能會需要這樣的措施。 但是,除非您在除錯特定問題,否則您基本上會希望確保ASF能夠自由使用當前支援的所有協定,而不是只有一兩個。 除非您有​充分的​理由編輯此屬性,否則您應維持它為預設值。


UpdateChannel(更新通道)

byte​型別,預設值為​1​。 本屬性定義了ASF使用的更新通道,用於自動更新(如果​UpdatePeriod​大於​0​時),或更新通知(​UpdatePeriod​為​0​時)。 目前ASF支援三個更新通道:​0​為​None​;​1​為​Stable​;而​2​為​Experimental​。 Stable​通道是預設的發布通道,這適合大多數的使用者。 Experimental​除了​Stable​版本以外,也包含了專門提供進階使用者及其他開發人員測試新功能、確認錯誤修復或提供相關增強計畫回饋的​預覽版本​。 實驗性版本通常包含了尚未修補的錯誤、未完成或重寫的功能​。 若您並非進階使用者,請保留預設值​1​(​Stable​)更新通道。 Experimental​通道是專門提供給知道如何回報錯誤、處理問題並給予回饋的使用者所使用⸺我們不會提供任何技術支援。 若您想深入了解更多資訊,請參閱​發布週期​。 若您想完全停用所有版本檢查,您也可以將​UpdateChannel​設定成​0​(​None​)。 將​UpdateChannel​設定成​0​會完全停用與更新相關的功能,包含​update​指令。 強烈反對​您使用​None​通道,因為這會使您自己面臨各種問題(在下文​UpdatePeriod​的說明中有提到)。

除非您知道您在做什麼,否則我們​強烈​建議維持它為預設值。


UpdatePeriod(更新週期)

ushort​型別,預設值為​300​。 本屬性定義了ASF每隔多久會檢查一次自動更新。 更新是非常重要的,不僅能獲得新功能及重要安全補丁,也能修復錯誤、獲得效能增加及提高穩定性等。 當設定的值大於​0​時,ASF會在有新版本可供使用的時候自動下載、取代並重新啟動自身(如果​AutoRestart​允許)。 為了達到上述功能,ASF會每​UpdatePeriod​小時檢查一次我們的GitHub儲存庫上是否有新版本可供使用。 值為​0​會停用自動更新,但您仍能夠手動執行​update​指令。 您可能還會對​UpdatePeriod​需要設定的正確的​UpdateChannel​感興趣。

ASF的更新過程涉及到更新整個ASF所使用的資料夾結構,但不會動到位於​config​資料夾中您自己的設定檔或資料庫⸺這代表在ASF資料夾中的所有無關檔案都會在更新過程中遺失。 預設值​24​能在不必要的檢查與維持ASF足夠新之間取得不錯的平衡。

除非您有​充分的​理由停用此屬性,否則您應維持使用合理的​UpdatePeriod​來啟用自動更新,​這是為了你好​。 這不只是因為我們只支援最新的穩定版ASF,也因為​我們只對最新版本提供安全保證​。 若您使用過時的ASF版本,您就是故意讓您自己暴露於各種問題下,從小型錯誤、損壞的功能,到​Steam帳號永久停權​,所以我們​強烈建議​,為了你好,請始終確保您的ASF版本是最新的。 自動更新使我們能夠對任何問題快速反應,在造成後果之前能停用或修補有問題的程式碼⸺若您選擇停用,您會失去我們所有的安全保證,並需承擔執行可能的有害程式碼的風險後果,不只是對Steam網路,也包含您自己的Steam帳號。


WebLimiterDelay(網路限制延時)

ushort​型別,預設值為​300​。 本屬性定義了向同一個Steam Web服務傳送兩個連續請求間的最小延遲,以毫秒為單位。 這種延遲是必需的,因為Steam內部使用的​AkamaiGhost​服務包含了依據指定時間段內傳送請求總數的速率限制。 在正常情形下很難處發Akamai的限制,但如果我們在極短的時間內持續傳送過多的請求,導致異常繁重的工作負載及大量的持續佇列請求,就有可能觸發它。

預設值是依據假設ASF是存取Steam Web服務的唯一工具所設定的,特別是​steamcommunity.com​、​api.steampowered.com​及​store.steampowered.com​。 若您使用了其他工具向同一Web服務傳送請求,那麼您應確保您的工具也包含類似​WebLimiterDelay​的功能,並將兩者都設為預設值的兩倍,也就是​600​。 這能保證在任何情形下,您都不會在每個​300​毫秒中傳送超過1個請求。

在一般情形下,將​WebLimiterDelay​減少至預設值以下是​強烈反對這麼做的​,因為它可能會導致各種IP相關的封鎖,有可能會是永久的。 預設值足以在伺服器上執行單一ASF實例,或在普通情境下與原版的Steam用戶端一起使用ASF。 該值在大多數情形下皆為正確值,您應只增加它(而不能減少)。 簡而言之,由單一IP傳送至單個Steam網域的請求總量每​300​毫秒不應大於1個請求。

除非您有理由編輯此屬性,否則您應維持它為預設值。


WebProxy(網頁代理)

string​型別,預設值為​null​。 本屬性定義了網頁代理位址,用於ASF的​HttpClient​傳送的所有HTTP及HTTPS請求,特別是例如​github.com​、​steamcommunity.com​及​store.steampowered.com​服務。 在一般情形下,代理ASF請求並沒有好處,但它對於繞過各式各樣的防火牆來說特別有用,特別是中國的長城防火牆。

本屬性定義為URI本文:

URI字串由協定名稱(支援:http/https/socks4/socks4a/socks5)、主機名稱及選擇性的連接埠所組成。 一個完整URI字串的範例是​"http://contoso.com:8080"​。

若您的代理需要使用者身分驗證,您還需要設定​WebProxyUsername​與/或​WebProxyPassword​。 若不需要,則僅設定本屬性即可。

目前ASF只對​HTTP​及​HTTPS​請求使用網際網路代理,​不包含​在ASF內部Steam用戶端完成的內部Steam網路通訊。 目前並無支援該功能的計畫,其主要原因是缺少了​SK2​功能。 若您需要/希望支援此功能,我建議可以先從此處了解。

除非您有理由編輯此屬性,否則您應維持它為預設值。


WebProxyPassword(網頁代理密碼)

string​型別,預設值為​null​。 本屬性定義了要提供代理功能的目標​WebProxy​設備支援的Basic、Digest、NTLM或Kerberos身分驗證所使用的密碼欄位。 若您的代理不需要使用者憑證,您就不需要再此處輸入任何內容。 本選項只有在使用了​WebProxy​的情形下才有用處,否則它沒有任何效果。

除非您有理由編輯此屬性,否則您應維持它為預設值。


WebProxyUsername(網頁代理使用者名稱)

string​型別,預設值為​null​。 本屬性定義了要提供代理功能的目標​WebProxy​設備支援的Basic、Digest、NTLM或Kerberos身分驗證所使用的使用者名稱欄位。 若您的代理不需要使用者憑證,您就不需要再此處輸入任何內容。 本選項只有在使用了​WebProxy​的情形下才有用處,否則它沒有任何效果。

除非您有理由編輯此屬性,否則您應維持它為預設值。


Bot 設定檔

如您所已知的,每個Bot都有自己的設定檔,使用基於下列範例的JSON結構: 首先您需要決定您的Bot的名稱(例如​1.json​、​main.json​、​primary.json​或​AnythingElse.json​),然後再開始設定。

注意:​Bot無法被命名為​ASF​(因為該關鍵字保留為全域設定),ASF也會忽略所有以點為開頭的設定檔。

Bot設定檔具有以下結構:

{
    "AcceptGifts": false,
    "BotBehaviour": 0,
    "CompleteTypesToSend": [],
    "CustomGamePlayedWhileFarming": null,
    "CustomGamePlayedWhileIdle": null,
    "Enabled": false,
    "FarmingOrders": [],
    "FarmingPreferences": 0,
    "GamesPlayedWhileIdle": [],
    "HoursUntilCardDrops": 3,
    "LootableTypes": [1, 3, 5],
    "MatchableTypes": [5],
    "OnlineFlags": 0,
    "OnlineStatus": 1,
    "PasswordFormat": 0,
    "RedeemingPreferences": 0,
    "RemoteCommunication": 3,
    "SendTradePeriod": 0,
    "SteamLogin": null,
    "SteamMasterClanID": 0,
    "SteamParentalCode": null,
    "SteamPassword": null,
    "SteamTradeToken": null,
    "SteamUserPermissions": {},
    "TradeCheckPeriod": 60,
    "TradingPreferences": 0,
    "TransferableTypes": [1, 3, 5],
    "UseLoginKeys": true,
    "UserInterfaceMode": 0
}

所有選項的解釋如下:

AcceptGifts(接受贈禮)

bool​型別,預設值為​false​。 啟用時,ASF會自動接受並兌換所有發送給Bot的Steam禮物(包含錢包禮物卡)。 這也包含了不在​SteamUserPermissions​中定義的使用者所發送的禮物。 請注意,發送到電子郵件的禮物不會直接轉發給用戶端,所以ASF無法在沒有您幫助的情形下接受這些禮物。

本選項建議只在小號上使用,因為您很有可能不希望在主要帳號上自動兌換所有發送過來的禮物。 若您不確定您是否想要啟用本功能,請保留預設值​false​。


BotBehaviour(Bot 行為)

byte flags​型別,預設值為​0​。 本屬性定義了在各種事件中ASF的自動化行為,定義如下:

名稱 描述
0 無特殊Bot行為,帳號控制最少,預設值
1 RejectInvalidFriendInvites(拒絕無效好友邀請) 使ASF拒絕(而非忽略)無效的好友邀請
2 RejectInvalidTrades(拒絕無效交易提案) 使ASF拒絕(而非忽略)無效的交易提案
4 RejectInvalidGroupInvites(拒絕無效群組邀請) 使ASF拒絕(而非忽略)無效的群組邀請
8 DismissInventoryNotifications(取消物品庫通知) 使ASF自動取消所有物品庫通知
16 MarkReceivedMessagesAsRead(將收到的訊息已讀) 使ASF自動將所有收到的訊息標示成已讀
32 MarkBotMessagesAsRead(將Bot訊息已讀) 使ASF自動將所有從其他(執行於同一實例中的)ASF Bot的訊息標示成已讀

請注意,本屬性為​flags​欄位,因此可以使用所有可用值任意組合。 若您想深入了解更多資訊,請參閱​JSON映射​。 不啟用任何旗標即為​None​選項。

在一般情形下,若您想要ASF有一定的自動化行為,像使用Bot帳號,而不是ASF主要帳號的那樣,就需要更改本屬性。 因此,本屬性主要用於小號,但您仍可在主要帳號上使用所選選項。

一般(​None​)模式的ASF行為只是將使用者所想要的自動化(例如自動掛卡或進行​SteamTradeMatcher​交易,如果在​TradingPreferences​中有設定)。 這是對帳號控制最少的模式,並對大多數使用者來說都不錯,因為您可以完全控制您的帳號,且能自行決定是否允許某些超出範圍的交互行為。

無效的好友邀請是指由不具​FamilySharing​或更高權限(定義於​SteamUserPermissions​)的使用者所發出的好友邀請。 如您所預期的那樣,一般模式下的ASF會忽略這些邀請,給予您自由選擇是否接受邀請的空間。 RejectInvalidFriendInvites​會使這些邀請被自動拒絕,實際上這會阻止其他人將您加入至他們的好友清單中(因為ASF會拒絕所有這類請求,除非他們在​SteamUserPermissions​中有被定義)。 除非您想要徹底拒絕所有好友邀請,否則您不應啟用本選項。

無效的交易提案是指不被ASF內建模組接受的交易。 關於本問題的更多資訊,可以在​交易​章節中找到,其中明確定義了ASF願意自動接受哪些類型的交易。 有效的交易還會被其他設定所定義,特別是​TradingPreferences​。 RejectInvalidTrades​會使所有無效的交易提案被拒絕,而不是被忽略。 除非您想要直接拒絕所有ASF未自動接受的交易提案,否則您不應啟用本選項。

無效的群組邀請是指來自​SteamMasterClanID​群組以外的邀請。 如您所預期的那樣,一般模式下的ASF會忽略這些邀請,使您能夠自行決定是否要加入特定的群組。 RejectInvalidGroupInvites​會使這些群組邀請被拒絕,使您無法加入​SteamMasterClanID​以外的其他任何群組。 除非您想要徹底拒絕所有群組邀請,否則您不應啟用本選項。

若您開始對收到新物品的通知感到厭煩時,​DismissInventoryNotifications​會是一個相當有用的功能。 ASF無法去除通知本身,因為它是您Steam用戶端內建的功能,但它能在收到通知後自動清除通知,這樣就不會留有「新物品在您的物品庫」的通知了。 若您希望自行評估所收到的物品(特別是ASF掛到的卡片),那麼很明顯您不應該啟用本選項。 但如果您快要開始被煩到抓狂了,切記這裡有個選項可以使用。

MarkReceivedMessagesAsRead​會自動將ASF執行的帳號所收到的​所有​訊息標示成已讀,包含私人及群組聊天。 這通常只應由小號所使用,以清除例如在執行ASF指令期間來自您的「新訊息」通知。 我們不建議在主要帳號上使用本選項,除非您希望能隔絕所有種類的訊息通知,​包含​在您離線時的通知,ASF仍會清除它們。

MarkBotMessagesAsRead​以類似的方式運作,但只會將Bot的訊息標示成已讀。 但請注意,在使用本選項時,若您的Bot與其他人都在群組聊天中,已知Steam在將聊天訊息標示成已讀時,​​會將​該訊息前的​訊息標示成已讀,所以如果您不想要錯過在這期間的其他訊息,就應該避免使用本功能。 很顯然,當您在同一個ASF實例上執行多個主要帳號(例如其他使用者的帳號)時也是有風險的,因為您可能會錯過正常的無關ASF的訊息。

若您不確定如何設定本選項,最好保留預設值。


CompleteTypesToSend(傳送的完成種類)

ImmutableHashSet<byte>​型別,預設值為空。 在ASF完成收集一套此處設定的物品類型時,它可以透過Steam交易傳送所有收集完成的物品套組自動傳送給具有​Master​權限的使用者,如果您想將指定的Bot帳號用於例如STM比對等需求,同時將收集完成的套組移動至另一個帳號上,這將會非常方便。 本選項與​loot​指令作用相同,因此請注意,首先它需要您有帳號的交易合法權限,且使用者具有​Master​權限,而您可能也要有有效的​SteamTradeToken​。

目前,在本設定中支援下列物品類型:

名稱 描述
3 FoilTradingCard(閃亮交換卡片) 閃亮版本的​TradingCard
5 TradingCard(交換卡片) Steam交換卡片,用於合成徽章(非閃亮卡片)

請注意,不論上述如何設定,ASF都只會處理​Steam社群物品​(​appID​為753,​contextID​為6),因此依據定義所有遊戲物品、禮物等物品都會被排除在交易提案之外。

由於使用本選項會造成額外負擔,我們建議您只在有機會收集完成物品的Bot帳號上使用⸺舉例來說,若您平常已在使用​FarmingPreferences​中的​SendOnFarmingFinished​偏好設定、​SendTradePeriod​或​loot​指令,就沒有必要使用本選項。

若您不確定如何設定本選項,最好保留預設值。


CustomGamePlayedWhileFarming(掛卡時顯示自訂遊戲名稱)

string​型別,預設值為​null​。 在ASF掛卡時,可以顯示「非Steam遊戲中:​CustomGamePlayedWhileFarming​」而非正在掛卡的遊戲名稱。 若您想讓您的朋友知道您正在掛卡,卻又不想使用​Offline​的​OnlineStatus​時,這就非常有用。 請注意,ASF無法保證Steam網路的實際顯示順序,因此這只能為一個建議值,可能會正確顯示,也可能不會。 特別是,如果ASF需要使用很長一段時間來完成已滿的​32​個遊戲欄位,自訂名稱就無法顯示在​Complex​的掛卡演算法中。 預設值​null​會停用本功能。

ASF提供了數種您能在本文中使用的特殊變數。 {0}​會被取代成ASF正在掛卡的遊戲的​AppID​;而​{1}​會被取代成ASF正在掛卡的遊戲的​GameName​。


CustomGamePlayedWhileIdle(閒置時顯示自訂遊戲名稱)

string​型別,預設值為​null​。 與​CustomGamePlayedWhileFarming​類似,但是是用於ASF閒置的時候(因為帳號已掛卡完成)。 請注意,ASF無法保證Steam網路的實際顯示順序,因此這只能為一個建議值,可能會正確顯示,也可能不會。 若您與本選項同時使用​GamesPlayedWhileIdle​,那麼請注意,​GamesPlayedWhileIdle​的優先級更高,因此您不可以宣告超過​31​個遊戲,否則​CustomGamePlayedWhileIdle​會無法占用遊戲欄位來顯示自訂名稱。 預設值​null​會停用本功能。


Enabled(自動啟用 Bot)

bool​型別,預設值為​false​。 本屬性定義了是否啟用Bot。 啟用Bot實例(​true​)會自動在ASF執行後開啟,而停用Bot實例(​false​)就需要您手動開啟。 預設情形下,每個Bot都是停用的,因此您可能希望將需要自動啟動的Bot切換本屬性至​true​。


FarmingOrders(掛卡順序)

ImmutableList<byte>​型別,預設值為空。 本屬性定義了指定Bot帳號的​首選​掛卡順序。 目前有以下可供使用的掛卡順序:

名稱 描述
0 Unordered(無序) 無序,略微提升CPU效能
1 AppIDsAscending(AppID升序) 嘗試由最小的遊戲​appIDs​開始掛卡
2 AppIDsDescending(AppID降序) 嘗試由最大的遊戲​appIDs​開始掛卡
3 CardDropsAscending(交換卡片掉落升序) 嘗試由最少剩餘卡片的遊戲開始掛卡
4 CardDropsDescending(交換卡片掉落降序) 嘗試由最多剩餘卡片的遊戲開始掛卡
5 HoursAscending(遊玩時數升序) 嘗試由最少遊玩時數的遊戲開始掛卡
6 HoursDescending(遊玩時數降序) 嘗試由最高遊玩時數的遊戲開始掛卡
7 NamesAscending(遊戲名稱升序) 嘗試以字母順序掛卡,從A開始
8 NamesDescending(遊戲名稱降序) 嘗試以逆字母順序掛卡,從Z開始
9 Random(隨機) 嘗試以完全隨機順序掛卡(每次執行程式都不同)
10 BadgeLevelsAscending(徽章等級升序) 嘗試由最低的遊戲徽章等級開始掛卡
11 BadgeLevelsDescending(徽章等級降序) 嘗試由最高的遊戲徽章等級開始掛卡
12 RedeemDateTimesAscending(遊戲啟用日期升序) 嘗試由帳號內最舊的遊戲開始掛卡
13 RedeemDateTimesDescending(遊戲啟用日期降序) 嘗試由帳號內最新的遊戲開始掛卡
14 MarketableAscending(可交易升序) 嘗試由掉落不可交易交換卡片的遊戲開始掛卡
15 MarketableDescending(可交易降序) 嘗試由掉落可交易交換卡片的遊戲開始掛卡

由於本屬性為一個陣列,因此它允許您以多個設定值來設定您的掛卡順序。 舉例來說,您可以依序設定數值​15​、​11​及​7​,來先以掉落可交易卡片的遊戲排序,然後再以最高徽章等級排序,最後才以字母順序排序。 正如您所猜測的,實際上順序非常重要,因為反向的排序(​7​、​11​及​15​)會造成截然不同的結果(首先由字母順序排序,但由於遊戲名稱是唯一的,其他兩個排序實際上是無作用的)。 大多數的人可能只會使用其中一個順序,但如果您想要,您也可以透過額外的參數來進一步排序。

另請注意,在上述所有描述中都有字詞「嘗試」⸺ASF實際的排序受​交換卡片掛卡演算法​的嚴重影響,且排序只能影響ASF認為效能相同的結果。 舉例來說,在​Simple​演算法中,選擇​FarmingOrders​能影響全部的當前掛卡階段(因為每個遊戲都具有相同的效能值),但在​Complex​演算法中,實際的掛卡順序會先受遊玩時數所影響,然後才依所選的​FarmingOrders​排序。 這將產生不同的結果,因為具有遊玩時數的遊戲會優先於其他的,因此ASF會優先選擇已滿足​HoursUntilCardDrops​要求的遊戲,然後才會依您選擇的​FarmingOrders​進一步排序那些遊戲。 同樣,一旦ASF完成高優先遊戲的掛卡,它將會先依遊玩時數對佇列進行排列(因為這能減少將任何遊戲掛至​HoursUntilCardDrops​所需的時間)。 因此,本設定屬性只是給ASF參考的一個​建議​,只要它不會對效能產生負面影響(若有負面影響,ASF則總是會在掛卡時優先考慮效能,其次才是​FarmingOrders​)。

另外,您還可透過​fq指令​來存取掛卡優先佇列。 若使用優先佇列,則實際的掛卡順序首先由效能排序,然後是掛卡佇列,最後才是您的​FarmingOrders​。


FarmingPreferences(掛卡偏好)

byte flags​型別,預設值為​0​。 本屬性定義了ASF的掛卡相關行為,定義如下:

名稱
0
1 FarmingPausedByDefault(使用預設行為暫停)
2 ShutdownOnFarmingFinished(在掛卡完成時關閉)
4 SendOnFarmingFinished(在掛卡完成時自動發送)
8 FarmPriorityQueueOnly(只掛卡優先佇列)
16 SkipRefundableGames(跳過可退款遊戲)
32 SkipUnplayedGames(跳過未遊玩過的遊戲)
64 EnableRiskyCardsDiscovery(啟用具風險的卡片檢測方式)
128 AutoSteamSaleEvent(自動完成 Steam 特賣活動)

請注意,本屬性為​flags​欄位,因此可以使用所有可用值任意組合。 若您想深入了解更多資訊,請參閱​JSON映射​。 不啟用任何旗標即為​None​選項。

所有選項的解說如下:

FarmingPausedByDefault​定義了​CardsFarmer​模組的初始狀態。 通常Bot會在經由​Enabled​或使用​start​指令啟動時,自動開始掛卡。 若您希望手動​resume​自動掛卡程序,可以使用​FarmingPausedByDefault​。例如您只想使用​play​,且永遠不會使用自動​CardsFarmer​模組⸺這將與​pause指令​的作用完全相同。

ShutdownOnFarmingFinished​使您能夠在掛卡完成時關閉Bot。 通常ASF會在程序執行過程中持續「占用」帳號。 在指定帳號完成掛卡後,ASF會(每隔​IdleFarmingPeriod​小時)定期檢查,若在該段時間帳號新增了一些帶有Steam交換卡片的遊戲,那麼ASF能夠繼續掛該帳號的卡,而不用重啟整個程序。 這對於大多數人來說應該很有幫助,因為ASF能夠在需要時自動恢復掛卡。 但是,您也可能會希望在指定帳號掛卡完成後停止程序,這就需要設定本屬性。 啟用後,ASF將會在掛卡全數完成後登出帳號,這代表該帳號將不再被定期檢查或佔用。 您應該自行決定,會更希望ASF始終對Bot實例運作,或希望ASF在掛卡程序完成後停止它。 在所有帳號都終止運作,且程序未以​--process-required​的​模式​執行時,ASF也會自行關閉,讓您的設備休息,使您能夠安排其他操作,例如在最後一張交換卡片掉落後睡眠或關機。

SendOnFarmingFinished​使您能夠自動將到目前為止所掛出的卡,使用交易提案發送給具有​Master​權限的使用者,若您不想自行發送交易提案,這個功能會對您有所幫助。 本選項與​loot​指令作用相同,因此請注意,首先它需要您有帳號的交易合法權限,且使用者具有​Master​權限,而您可能也要有有效的​SteamTradeToken​。 在本選項啟用時,ASF除了會在掛卡完成後執行​loot​外,也會在(未掛卡時)每次收到新物品通知後,及在完成產生新物品的交易後執行​loot​。 這在您把來自其他人的物品「轉發」到自己的帳號中時特別有用。 通常您會需要同時使用​ASF雙重驗證​,但若您傾向於手動確認雙重驗證,則這並不是必需的。

FarmPriorityQueueOnly​定義了ASF是否只自動掛卡您使用​fq指令​加入至優先掛卡佇列中的應用程式。 在啟用本選項時,ASF將會跳過所有不在清單中的​appIDs​,使您能夠挑選您想要ASF自動掛卡的遊戲。 請注意,若您沒有在佇列中加入任何遊戲,ASF會表現得像您帳號中沒有任何遊戲可以掛卡一樣。

SkipRefundableGames​定義了ASF在自動掛卡時,是否應跳過那些仍可退款的遊戲。 所謂可退款的遊戲,是您在過去2週內透過Steam商店購買、且遊玩時數不超過2小時的遊戲,如​Steam退款​頁面所述。 預設情形下,ASF會完全忽略Steam退款政策,掛所有能掛的遊戲,而這也是大多數人所想要的。 但是,如果您想確保ASF不會過快掛您的可退款遊戲,可以啟用這項旗標,使您能夠自行體驗遊戲,並在需要時退款,避免ASF影響您的遊玩時數。 請注意,如果您啟用本選項,會從您在Steam商店購買遊戲的14日內,ASF將不會掛該遊戲,若在此期間您的帳號沒有其他可掛的遊戲,ASF將會顯示為閒置。

SkipUnplayedGames​定義了ASF是否應跳過您尚未執行過的遊戲。 尚未執行過的遊戲,指的是在您Steam上完全沒有任何遊玩時數的遊戲。 若您啟用這項旗標,那麼這類遊戲將始終被跳過,直到Steam紀錄下任何遊玩時數。 這使您能夠更便於控制ASF能掛哪些遊戲,跳過那些您還未有機會嘗試的遊戲,並讓一些Steam的功能更加實用⸺例如推薦尚未遊玩過的遊戲。

EnableRiskyCardsDiscovery​啟用了額外的後援機制,在ASF因無法載入一個或多個徽章頁面,無法找到能掛卡的遊戲時觸發。 特別是那些因掉卡數量極大的帳號,可能會有無法再載入徽章頁面的情形(因伺服器負擔過重),而這些帳號也無法專用於掛卡,因為我們無法載入啟動掛卡流程所需的資訊。 對於這些個例,本選項允許使用替代演算法,也就是利用帳號可合成的擴充包及當前所擁有的擴充包,來找出可能的遊戲來掛卡,並花費大量的資源來驗證並擷取所需資訊,嘗試在資料及資訊有限的情形下開始掛卡,藉此來使徽章頁面能夠恢復正常載入,並回歸使用一般的演算法。 請注意,在使用本後援方式時,ASF只能依有限資料來操作,因此ASF找到比實際數量還少得多的可掉卡片,是完全正常的⸺未被發現的可掉卡片將會依掛卡過程在稍後被逐漸找出。

本選項被稱作「具風險的」是有原因的⸺這個方式非常緩慢,並需要消耗大量資源(包含網路請求)來完成,因此​不建議​啟用,特別是長期開啟著。 您只應在因認為當前帳號無法載入徽章頁面,而導致ASF失去作用,無法獲得啟動掛卡過程所需資訊時,才使用本選項。 即使我們盡力去最佳化這個過程,本選項仍有可能造成適得其反的結果,例如因為傳送過多請求,對Steam伺服器造成過大的負擔,而被暫時甚至是永久封鎖。 因此,我們在此提前警告您,本選項不提供任何保證,您需自行承擔使用它的風險。

AutoSteamSaleEvent​使您能夠在Steam夏季/冬季特賣期間,透過每天瀏覽探索佇列來獲得額外的交換卡片。 啟用本選項時,ASF會每隔​8​小時自動檢查Steam探索佇列(從程式啟動一小時內開始),並在需要時完成它。 若您想自己執行該行為,則不建議使用本選項,因為在一般情形下本選項只對Bot帳號有意義。 請注意,由於Valve經常產生問題或改動,​我們無法保證本功能是否能運作正常​,因此本選項是很有可能​完全無效​的。 我們不接受​任何​相關的錯誤報告,也不支援關於本選項的請求。 這是在沒有任何保證的情形下所提供的,您需要自行承擔風險。


GamesPlayedWhileIdle(閒置時掛卡的遊戲)

<ImmutableHashSet<uint>​型別,預設值為空。 若ASF沒有遊戲可供掛卡,它可以遊玩您所指定的Steam遊戲(​appIDs​)。 以這種方式遊玩遊戲會增加您的「遊玩時數」,除此之外,別無他用。 若要使此功能正常運作,您的Steam帳號​必須​擁有您指定的所有​AppIDs​的有效授權,包含免費遊戲。 本功能可以與​CustomGamePlayedWhileIdle​同時啟用,能在遊玩您所指定的遊戲的同時在Steam網路中顯示自訂狀態。但在這種情形下,如同​CustomGamePlayedWhileFarming​一樣,我們無法保證實際的顯示順序。 請注意,Steam只允許ASF最多同時遊玩​32​個​appIDs​,因此您也只能在本屬性中設定最多這個數量的遊戲。


HoursUntilCardDrops(小時數直到卡片開始掉落)

byte​型別,預設值為​3​。 本屬性定義了帳號是否受到掉卡限制,若有,則定義初始小時數。 掉卡受限制代表該帳號在遊戲的遊玩時數在到達​HoursUntilCardDrops​小時後才會開始掉卡。 但ASF沒有自動偵測它的魔法,所以只能靠您手動設定。 本屬性會影響您所使用的​掛卡演算法​。 正確設定本屬性會最大化您的效益,並將掛卡所需的時間減至最少。 記住,您應該選擇何值並沒有確切的答案,因為這完全取決於您的帳號。 似乎從未要求退款的老帳號​掉卡不受限制​,而曾經要求退款的新帳號則會​受限制​。 但是,這只是理論,不應將它視為規則。 本屬性的預設值是依據「兩害相權取其輕」及大多數使用情形所設定的。


LootableTypes(獲得物品的種類)

ImmutableHashSet<byte>​型別,預設值為​1, 3, 5​的Steam物品類型。 本屬性定義了ASF在獲得物品時的行為⸺這可以是手動使用​指令​,也可以透過一個或多個設定屬性來自動獲得。 請注意,不論上述如何設定,ASF都只會處理Steam分類(​appID​為753)中的社群物品(​contextID​為6),因此依據定義所有遊戲物品、禮物等物品都會被排除在交易提案之外。

名稱 描述
0 Unknown(未知) 不符合下列任一項類型的物品
1 BoosterPack(擴充包) 包含三張來自同一遊戲交換卡片的擴充包
2 Emoticon(表情符號) 在Steam聊天中使用的表情符號
3 FoilTradingCard(閃亮交換卡片) 閃亮版本的​TradingCard
4 ProfileBackground(個人檔案背景) 在您Steam個人檔案中使用的個人檔案背景
5 TradingCard(交換卡片) Steam交換卡片,用於合成徽章(非閃亮卡片)
6 SteamGems(寶石) 用於合成擴充包的Steam寶石,包含一袋寶石
7 SaleItem(特賣物品) Steam特賣期間獲得的特殊物品
8 Consumable(消耗品) 在使用後會消失的特殊消耗品
9 ProfileModifier(個人檔案修改器) 可以修改Steam個人檔案外觀的特殊物品
10 Sticker(貼紙) 在Steam聊天中使用的特殊物品
11 ChatEffect(聊天效果) 在Steam聊天中使用的特殊物品
12 MiniProfileBackground(迷你個人檔案背景) Steam個人檔案的特殊背景
13 AvatarProfileFrame(個人檔案圖示邊框) Steam個人檔案的特殊圖示邊框
14 AnimatedAvatar(動畫個人圖示) Steam個人檔案的特殊動畫個人圖示
15 KeyboardSkin(鍵盤外觀) Steam Deck的特殊鍵盤外觀
16 StartupVideo(啟動動畫) Steam Deck的特殊啟動動畫

請注意,不論上述如何設定,ASF都只會處理​Steam社群物品​(​appID​為753,​contextID​為6),因此依據定義所有遊戲物品、禮物等物品都會被排除在交易提案之外。

ASF的預設設定是依據最常見的Bot用法,即只獲得擴充包及交換卡片(包含閃亮卡片)。 本處定義的屬性使您能夠依自己所需自訂該行為。 請注意,上述所有未定義的類型都會顯示成​Unknown​類型,特別是在Valve發布一些新的Steam物品時,ASF也會將它們標示成​Unknown​,直到它們(在未來的版本中)被加入於本表格中。 這也是在一般情形下不建議在​LootableTypes​中選擇​Unknown​類型的原因,除非您知道自己正在做什麼,且您也了解萬一Steam網路再次損毀時,會將您的所有物品標示成​Unknown​,並在交易提案中發送出您物品庫中的所有物品。 我強烈建議即使您希望獲得所有(其他的)物品,也不要在​LootableTypes​中選擇​Unknown​類型。


MatchableTypes(可比對的種類)

ImmutableHashSet<byte>​型別,預設值為​5​的Steam物品類型。 本屬性定義了在您啟用​TradingPreferences​中的​SteamTradeMatcher​選項時,允許用於比對的Steam物品類型。 類型定義如下:

名稱 描述
0 Unknown(未知) 不符合下列任一項類型的物品
1 BoosterPack(擴充包) 包含三張來自同一遊戲交換卡片的擴充包
2 Emoticon(表情符號) 在Steam聊天中使用的表情符號
3 FoilTradingCard(閃亮交換卡片) 閃亮版本的​TradingCard
4 ProfileBackground(個人檔案背景) 在您Steam個人檔案中使用的個人檔案背景
5 TradingCard(交換卡片) Steam交換卡片,用於合成徽章(非閃亮卡片)
6 SteamGems(寶石) 用於合成擴充包的Steam寶石,包含一袋寶石
7 SaleItem(特賣物品) Steam特賣期間獲得的特殊物品
8 Consumable(消耗品) 在使用後會消失的特殊消耗品
9 ProfileModifier(個人檔案修改器) 可以修改Steam個人檔案外觀的特殊物品
10 Sticker(貼紙) 在Steam聊天中使用的特殊物品
11 ChatEffect(聊天效果) 在Steam聊天中使用的特殊物品
12 MiniProfileBackground(迷你個人檔案背景) Steam個人檔案的特殊背景
13 AvatarProfileFrame(個人檔案圖示邊框) Steam個人檔案的特殊圖示邊框
14 AnimatedAvatar(動畫個人圖示) Steam個人檔案的特殊動畫個人圖示
15 KeyboardSkin(鍵盤外觀) Steam Deck的特殊鍵盤外觀
16 StartupVideo(啟動動畫) Steam Deck的特殊啟動動畫

當然,您通常在本屬性只應選擇​2​、​3​、​4​及​5​,因為STM只支援這些類型。 ASF擁有能夠判斷物品稀有度的正確邏輯,因此比對表情符號或背景也會是安全的,因為ASF只會將來自同一個遊戲、相同類型及稀有度的物品視為相等的。

請注意,​ASF並非交易機器人​,且​不會考慮物品的市場價格​。 若您不認為在同一組中稀有度相同的物品是等價的,那麼這個選項並不適合您使用。 如果您決定更改本設定,請先理解並同意此聲明,並再次評估風險。

除非您知道您在做什麼,否則請保留預設值​5​。


OnlineFlags(在線旗標)

ushort flags​型別,預設值為​0​。 本屬性可以當作​OnlineStatus​的補充功能,指定向Steam網路發布額外的在線狀態。 需要​OnlineStatus​不為​Offline​,定義如下:

名稱 描述
0 無特殊在線狀態旗標,預設值
256 ClientTypeWeb(用戶端網頁類型) 用戶端使用Web介面
512 ClientTypeMobile(行動裝置用戶端類型) 用戶端使用行動裝置應用程式
1024 ClientTypeTenfoot(Big Picture用戶端類型) 用戶端使用Big Picture模式
2048 ClientTypeVR(SteamVR用戶端類型) 用戶端使用SteamVR頭戴式裝置

請注意,本屬性為​flags​欄位,因此可以使用所有可用值任意組合。 若您想深入了解更多資訊,請參閱​JSON映射​。 不啟用任何旗標即為​None​選項。

本屬性依據的基本​EPersonaStateFlag​型別包含了更多可供使用的旗標,但據我們所知,直到目前它們還仍無任何效果,因此為了可見性將它們刪除了。

若您不確定如何設定本屬性,請保留預設值​0​。


OnlineStatus(在線狀態)

byte​型別,預設值為​1​。 本屬性指定了Bot在登入Steam網路後,要顯示的Steam社群狀態。 目前您可以選擇下列狀態之一:

名稱
0 Offline(離線)
1 Online(線上)
2 Busy(請勿打擾)
3 Away(離開)
4 Snooze(打盹)
5 LookingToTrade(尋找交易對象)
6 LookingToPlay(尋找遊戲對象)
7 Invisible(隱藏)

Offline​狀態對於主要帳號來說非常有用。 如您所知,遊戲掛卡時會顯示您的Steam狀態為「正在遊玩:XXX」,這可能會誤導您的朋友,讓他們以為您真的正在玩遊戲,但實際上您只是在掛卡而已。 使用​Offline​的狀態能夠解決此問題:在您使用ASF掛卡時,您的帳號不會再被顯示成「遊戲中」。 能這樣做是因為ASF不必登入至Steam社群就能正常運作,所以即使實際上我們正在玩這些遊戲,且連線至Steam網路中,但仍能不顯示我們的在線狀態。 請注意,使用離線狀態遊玩的遊戲仍會增加您的遊玩時數,並在您個人檔案中顯示成「最近遊玩過的」遊戲。

除此之外,若您希望在ASF執行時能夠接收到通知及未讀訊息,且不用打開Steam用戶端,那麼本功能就很重要。 這是因為ASF把自身當作一個Steam用戶端,不論ASF是否願意,Steam都會向它廣播所有的訊息及事件。 若您同時執行ASF及您自己的Steam用戶端,這就不會是個問題,因為全部的用戶端都會收到完全相同的事件廣播。 但是,如果只有ASF在執行,Steam網路就會將部分事件及訊息標示成「已送達」,但您原版的Steam用戶端將會因為不在線上而接收不到這些訊息。 離線的狀態能夠解決此問題,因為在這種情形下,ASF不再會接收任何社群事件,因此所有未讀訊息與其餘事件都會在您回來後仍維持著未讀狀態。

特別注意,在​Offline​模式下執行的ASF將​不能​以一般的Steam聊天方式接收指令,因為此時聊天系統與整個社群都是離線狀態。 解決此問題的方式是使用​Invisible​模式,它以相似的方式運作(但不會暴露您的狀態),且能夠保有接收及回應訊息的能力(因此如上所述,仍能清除通知及未讀訊息)。 Invisible​主要適用於您不想暴露狀態,但仍需要傳送指令的小號上。

但是,​Invisible​模式具有一個問題:它並不是很適合用在主要帳號上。 這是因為​任何​的Steam連線階段都會將在線狀態​公開​,即使ASF並無此意。 這是由目前的Steam網路的限制/錯誤所導致的,無法由ASF這端修復。所以若您想要使用​Invisible​模式,您也需要確保其他​所有​登入階段都有著相同的​Invisible​模式。 對於小號來說,ASF通常會是它唯一的登入階段;但對於主要帳號而言,通常您會想要向朋友們顯示您為​Online​,並隱藏ASF的活動,在這種情形下,​Invisible​對您來說一點用處也沒有(我們建議您改用​Offline​模式)。 希望Valve將來能夠解決掉這個限制/錯誤,但我不認為這會在短期之內發生…

若您不確定如何設定這個屬性,建議您為主要帳號設定​0​(​Offline​),而其他帳號使用預設值​1​(​Online​)。


PasswordFormat(密碼格式)

byte​型別,預設值為​0​(​PlainText​)。 本屬性定義了​SteamPassword​屬性的格式,目前的支援值請見​安全性​章節。 您應該遵循該章節的步驟,因為您需要確保​SteamPassword​屬性確實含有符合​PasswordFormat​的密碼。 也就是說,在您更改​PasswordFormat​的時候,您的​Password​就必須​已經​是您所選的格式了,而不是在更改完成後才是。 除非您知道您在做什麼,否則請保留預設值​0​。

若您至少更改了一次已登入Bot的​PasswordFormat​,您有可能在下次Bot啟動時收到一次性的解密錯誤⸺這是因為​PasswordFormat​也被用於自動加密/解密​Bot.db​資料庫檔案中的敏感屬性。 您可以安全的無視這項錯誤,因為ASF能夠自動從這個情形中恢復。 但如果持續發生,例如在每次重新啟動時,就應該進行更進一步的調查。


RedeemingPreferences(兌換偏好)

byte flags​型別,預設值為​0​。 本屬性定義了ASF在兌換產品序號時的行為,定義如下:

名稱 描述
0 預設值,無特殊兌換偏好
1 Forwarding(轉發) 將無法兌換的產品序號轉發給其他Bot
2 Distributing(分配) 將所有產品序號分配給自身及其他Bot
4 KeepMissingGames(保留缺失遊戲) 在轉發時保留(可能)缺少遊戲的產品序號,讓它們維持未使用狀態
8 AssumeWalletKeyOnBadActivationCode(假定無法啟用的序號為禮物卡序號) 將​BadActivationCode​產品序號假定成與​CannotRedeemCodeFromClient​相同,並因此嘗試將它們作為禮物卡序號兌換

請注意,本屬性為​flags​欄位,因此可以使用所有可用值任意組合。 若您想深入了解更多資訊,請參閱​JSON映射​。 不啟用任何旗標即為​None​選項。

Forwarding​會使Bot在(檢查到)另一個已連線並登入的Bot未擁有這個遊戲時,將這個無法兌換的產品序號轉發給它。 最常見的情形是將​AlreadyPurchased​遊戲轉發給另一個尚未擁有該遊戲的Bot,但本選項亦也會轉發其他情形下的產品序號,例如:​DoesNotOwnRequiredApp​、​RateLimited​或​RestrictedCountry​。

Distributing​會使Bot將所有收到的產品序號分配給自身以及其他Bot。 這代表每個Bot會在每批分配中獲得一個產品序號。 通常這個功能只會用於您為同一個遊戲兌換大量序號時,且您希望將它們平均分配至所有的Bot中,而非使用於兌換不同種類遊戲時。 若您只有在​redeem​操作中兌換單一個產品序號,則此功能沒有任何作用(因為沒有任何可分配的序號)。

KeepMissingGames​會使Bot在無法確定產品序號所啟用的遊戲是否為自身所擁有時,跳過​Forwarding​。 這基本上代表了​Forwarding​將​​對​AlreadyPurchased​序號有效,而不再會轉發其他情形的序號,例如​DoesNotOwnRequiredApp​、​RateLimited​或​RestrictedCountry​。 通常您會想要在主要帳號上使用這個選項,來確保當您的Bot暫時觸發​RateLimited​時,不會將本應在該Bot上兌換的產品序號被轉發。 正如您從描述中所猜測的那樣,若​Forwarding​沒有被啟用,則本欄位將沒有任何作用。

AssumeWalletKeyOnBadActivationCode​會使​BadActivationCode​的產品序號被當作​CannotRedeemCodeFromClient​,並使ASF嘗試將它們作為禮物卡序號兌換。 需要本選項是因為Steam可能將禮物卡序號當作​BadActivationCode​(而非正確的​CannotRedeemCodeFromClient​),導致ASF永遠不會去嘗試兌換它們。 但是,我們建議​避免​使用本設定,因為這會使ASF嘗試將每個無效序號作為禮物卡序號兌換,因而Steam服務傳送大量的(無效)請求,造成所有可能的後果。 作為代替,我們建議您於明確知道在兌換禮物卡序號時,使用​ForceAssumeWalletKey​的​redeem^​模式,這是只在需要時啟用本模式的解決方案。

同時啟用​Forwarding​與​Distributing​會在轉發的功能上增加分配的功能,使ASF會先嘗試在所有Bot上兌換一個產品序號(轉發),然後才會使用下一個序號(分配)。 通常您這樣設定是希望使用​Forwarding​,並改變Bot在使用完序號時的切換行為,不再總依順序使用每一個序號(單獨設定​Forwarding​的行為)。 在您已知大多數甚至所有產品序號都被綁定到同一款遊戲上時,這項行為會非常有用,因為在這種情形下只使用​Forwarding​會先在一個Bot上嘗試兌換所有序號(適用於您的序號屬於不同的遊戲時),而同時使用​Forwarding​ + ​Distributing​將會在兌換下一個序號時切換Bot,將兌換新序號的工作「分配」至另一個Bot上,而不是由初始的Bot繼續(適用於序號為相同遊戲時,能跳過每個序號無意義的兌換嘗試)。

在兌換時Bot的實際順序是依字母排序,不包含無法使用的Bot(未連線、已停止或其他情形)。 請注意,每個IP及帳號都有每小時兌換嘗試次數的限制,且每個不以​OK​結束的兌換都代表兌換失敗。 ASF會盡力減少​AlreadyPurchased​的失敗次數,例如:嘗試避免向已擁有該遊戲的Bot轉發產品序號,但由於Steam處理遊戲授權的方式,我們無法保證這總是有效運作。 使用​Forwarding​或​Distributing​等兌換旗標,一定會增加您觸發​RateLimited​的可能性。

也請注意,您無法轉發或分配序號給沒有權限的Bot。 這應該很容易理解,且您需要確保在兌換過程中,至少擁有所有Bot的​Operator​權限,例如使用​status ASF指令​來檢查。


RemoteCommunication(遠端通訊)

byte flags​型別,預設值為​3​。 本屬性定義了每個Bot在與遠端通訊時的行為,定義如下:

名稱 描述
0 不允許與第三方通訊,使所選的ASF功能無法使用
1 SteamGroup(Steam群組) 允許與​ASF的Steam群組​通訊
2 PublicListing(公開名單) 允許與​ASF的STM名單​通訊以顯示於名單上,需同時啟用​TradingPreferences​中的​SteamTradeMatcher

請注意,本屬性為​flags​欄位,因此可以使用所有可用值任意組合。 若您想深入了解更多資訊,請參閱​JSON映射​。 不啟用任何旗標即為​None​選項。

本選項並未包含ASF所提供的所有第三方通訊,只包含了那些在其他設定中未包含的選項。 舉例來說,如果您已啟用ASF的自動更新,ASF就會依照您的設定,與GitHub(用於下載)及我們的伺服器(用於核對和驗證)通訊。 同理,在​TradingPreferences​中啟用​MatchActively​就代表了與我們的伺服器通訊,以獲得名單中的Bot,這是該功能所必需的。

有關本項目的詳細說明,請參閱​遠端通訊​章節。 除非您有理由編輯此屬性,否則您應維持它為預設值。


SendTradePeriod(交易發送週期)

byte​型別,預設值為​0​。 本屬性的運作方式與​FarmingPreferences​中的​SendOnFarmingFinished​偏好設定極為相似,只有一處不同⸺不是在掛卡完成時發送交易提案,而是不論我們掛了多少,每隔​SendTradePeriod​小時就發送一次。 如果您想要固定時間​loot​您的小號,而不是等到掛卡完成,則這會對您很有幫助。 預設值​0​會停用本功能,若您想要讓您的Bot向您發送交易提案,例如每天一次,那麼您應該將此處設定成​24​。

通常您會需要同時使用​ASF雙重驗證​,但若您傾向於手動確認雙重驗證,則這並不是必需的。 若您不確定如何設定本屬性,請保留預設值​0​。


SteamLogin(Steam 使用者名稱)

string​型別,預設值為​null​。 本屬性定義了您的Steam使用者名稱⸺在登入Steam時使用。 除了在此處定義Steam使用者名稱外,若您想要在每次啟動ASF時手動輸入您的使用者名稱,而不是將它儲存於設定檔中,您也可以保留預設值​null​。 如果您不想要在設定檔中儲存敏感性資料,這或許是更好的方法。


SteamMasterClanID(Steam 主要群組 ID)

ulong​型別,預設值為​0​。 本屬性定義了Bot應自動加入的Steam群組ID及其聊天室。 您可以透過前往群組​首頁​,然後在連結的末端加上​/memberslistxml?xml=1​來查詢群組ID,整個連接將會看起來​像這樣​。 然後您就可以在結果頁面的​<groupID64>​標籤下獲得您的群組ID。 在上述範例中,即為​103582791440160998​。 除了在啟動時嘗試加入指定的群組,Bot還會自動接受來自該群組的邀請,使您能夠在您的群組為私人群組時,手動邀請您的Bot加入。 若您沒有專屬於Bot的群組,則應該維持預設值​0​。


SteamParentalCode(家庭監護 PIN 碼)

string​型別,預設值為​null​。 本屬性定義了您的家庭監護PIN碼。 ASF需要存取由家庭監護系統所保護的資源,因此若您使用了這項功能,您應該提供ASF家庭監護的解鎖PIN碼,使它能夠正常運作。 預設值​null​代表不需要任何的家庭監護PIN碼來解鎖此帳號,如果您沒有使用Steam的家庭監護功能,就不需要更改。

在有限的情況下,ASF也能夠生成有效的Steam家庭監護PIN碼,但這會需要大量的系統資源及時間來完成,且無法保證能成功,因此我們建議不要依賴這項功能,而是在設定檔中設定有效的​SteamParentalCode​。 若ASF認為需要PIN碼,且無法自行產生,就會要求您輸入。


SteamPassword(Steam 密碼)

string​型別,預設值為​null​。 本屬性定義了您的Steam密碼⸺在登入Steam時使用。 除了在此處定義Steam密碼外,若您想要在每次啟動ASF時手動輸入您的密碼,而不是將它儲存於設定檔中,您也可以保留預設值​null​。 如果您不想要在設定檔中儲存敏感性資料,這或許是更好的方法。


SteamTradeToken(Steam 交易權杖)

string​型別,預設值為​null​。 當您的Bot在您的好友名單中,Bot就能不需交易權杖直接向您發送交易提案,因此您可以保留本屬性的預設值為​null​。 但若您決定讓Bot不在您的好友名單中,您就需要為想要向其發送交易提案的Bot生成一個交易權杖,並填寫至此處。 也就是說,本屬性應填寫​​Bot實例在​SteamUserPermissions​中設定的​Master​權限帳號的交易權杖。

要找到您的權杖,須以​Master​權限的使用者登入,並前往​這裡​,然後查看您的交易URL。 要找到您的權杖,須以​Master​權限的使用者登入,並前往​這裡​,然後查看您的交易URL。 您應該複製這8個字元並於此處貼上,作為​SteamTradeToken​。 請不要包含整個交易URL,也不需​&token=​部分,只需要權杖就好(8個字元)。


SteamUserPermissions(Steam 使用者權限)

ImmutableDictionary<ulong, byte>​型別,預設值為空。 本屬性為字典屬性,將由64位元的Steam ID所識別的Steam使用者,映射到由​byte​編號所定義在ASF實例中的權限。 目前在ASF中可用的Bot權限定義如下:

名稱 描述
0 無特殊權限,這主要是指派給不在本字典內的Steam ID的參考值⸺您不需要定義具有本項權限的任何人
1 FamilySharing(親友同享) 為親友同享使用者提供的最低權限。 同樣,這也是個參考值,因為ASF能夠自動發現有權使用我們收藏庫的親友同享帳號的Steam ID
2 Operator(管理者) 提供指定Bot實例的基本權限,主要包含加入遊戲授權及兌換產品序號
3 Master(擁有者) 提供指定Bot實例的完整權限

簡而言之,本屬性使您能夠自訂指定使用者的權限。 權限設定很重要,主要用於存取ASF​指令​,而且也用於啟用許多ASF功能,例如接受交易提案。 舉例來說,您可能會想將自己的帳號設定成​Master​,並為您的兩到三位朋友提供​Operator​權限,使他們能夠使用ASF為您的Bot兌換產品序號,但卻​無法​終止它。 因此,您可以輕鬆將權限指派給指定的使用者,並讓他們在您規定的範圍內使用您的Bot。

我們建議您只設定一個​Master​,而​Operators​及更低階的權限則不限量。 雖然以技術層面而言,ASF能設定多個​Masters​且能正常運作,例如接受發送給那些Bot的所有交易提案;但對於要求為單一目標的每個操作,ASF將只會使用其中一個Bot(擁有最小Steam ID者),例如​loot​請求,​FarmingPreferences​中的​SendOnFarmingFinished​偏好設定或​SendTradePeriod​屬性等。 若您完全了解這些限制,特別是​loot​請求將總是會把物品發送給擁有最小Steam ID的​Master​,而不會管實際執行該指令的​Master​是誰,那麼,您可以在這裡定義多個​Master​權限使用者,但我們仍建議您選擇單一Master的方案。

值得一提的是,還有一個​Owner​權限,是於​SteamOwnerID​全域設定屬性中宣告。 您無法為這裡的任何人指派​Owner​權限,因為​SteamUserPermissions​屬性只定義了與Bot實例的權限,而非整個ASF程序。 對於與Bot相關的工作,​SteamOwnerID​被視為與​Master​相同,因此也沒有必要在這裡定義您的​SteamOwnerID​。


TradeCheckPeriod(交易檢查週期)

byte​型別,預設值為​60​。 通常ASF會在收到通知後處理收到的交易提案,但有時候也會因Steam故障而未能做到,此時交易提案將會持續被忽略,直到下一個交易通知或Bot重新啟動,這或許會導致交易被取消,或物品在稍後變為無法使用。 若本參數設定成非零值,ASF還將會每隔​TradeCheckPeriod​分鐘檢查這類未完成的交易。 我們選擇預設值時,已考慮到對Steam伺服器的額外請求及遺失收到的交易提案間的平衡。 但是,如果您的ASF只用來掛卡,且不打算自動處理任何收到的交易,那麼您可以設定成​0​來完全停用本功能。 除此之外,若您的Bot參與了公開的​ASF STM名單​,或作為交易機器人來提供其他的自動化服務,您可能會想要將本參數降低到​15​分鐘左右,以便及時處理交易。


TradingPreferences(交易偏好)

byte flags​型別,預設值為​0​。 本屬性定義了ASF在交易時的行為,定義如下:

名稱 描述
0 預設值,無特殊交易偏好
1 AcceptDonations(接受禮物) 接受我們不提供任何東西的交易
2 SteamTradeMatcher(Steam交易比對器) 被動參與​STM​交易。 造訪​交易​以深入了解更多資訊
4 MatchEverything(比對所有物品) 需要設定​SteamTradeMatcher​,並與其同時使用⸺除了有利及均衡的交易外,亦接受不利交易
8 DontAcceptBotTrades(不接受Bot交易) 不自動接受來自其他Bot實例的​loot​交易
16 MatchActively(積極比對) 主動參與​STM​交易。 造訪​ItemsMatcherPlugin​以深入了解更多資訊

請注意,本屬性為​flags​欄位,因此可以使用所有可用值任意組合。 若您想深入了解更多資訊,請參閱​JSON映射​。 不啟用任何旗標即為​None​選項。

若要進一步了解ASF的交易邏輯,與所有可供使用的旗標的說明,請造訪​交易​章節。


TransferableTypes(可交易物品類型)

ImmutableHashSet<byte>​型別,預設值為​1, 3, 5​的Steam物品類型。 本屬性定義了在使用​transfer指令​時,可在Bot間轉移的物品類型。 ASF會確保只有在​TransferableTypes​中的物品才會包含在交易提案中,因此本屬性使您能夠選擇您想要Bot在交易提案中收到的物品種類。

名稱 描述
0 Unknown(未知) 不符合下列任一項類型的物品
1 BoosterPack(擴充包) 包含三張來自同一遊戲交換卡片的擴充包
2 Emoticon(表情符號) 在Steam聊天中使用的表情符號
3 FoilTradingCard(閃亮交換卡片) 閃亮版本的​TradingCard
4 ProfileBackground(個人檔案背景) 在您Steam個人檔案中使用的個人檔案背景
5 TradingCard(交換卡片) Steam交換卡片,用於合成徽章(非閃亮卡片)
6 SteamGems(寶石) 用於合成擴充包的Steam寶石,包含一袋寶石
7 SaleItem(特賣物品) Steam特賣期間獲得的特殊物品
8 Consumable(消耗品) 在使用後會消失的特殊消耗品
9 ProfileModifier(個人檔案修改器) 可以修改Steam個人檔案外觀的特殊物品
10 Sticker(貼紙) 在Steam聊天中使用的特殊物品
11 ChatEffect(聊天效果) 在Steam聊天中使用的特殊物品
12 MiniProfileBackground(迷你個人檔案背景) Steam個人檔案的特殊背景
13 AvatarProfileFrame(個人檔案圖示邊框) Steam個人檔案的特殊圖示邊框
14 AnimatedAvatar(動畫個人圖示) Steam個人檔案的特殊動畫個人圖示
15 KeyboardSkinKeyboardSkin(鍵盤外觀) Steam Deck的特殊鍵盤外觀
16 StartupVideo(啟動動畫) Steam Deck的特殊啟動動畫

請注意,不論上述如何設定,ASF都只會處理​Steam社群物品​(​appID​為753,​contextID​為6),因此依據定義所有遊戲物品、禮物等物品都會被排除在交易提案之外。

ASF的預設設定是依據最常見的Bot用法,即只交易擴充包及交換卡片(包含閃亮卡片)。 本處定義的屬性使您能夠依自己所需自訂該行為。 請注意,上述所有未定義的類型都會顯示成​Unknown​類型,特別是在Valve發布一些新的Steam物品時,ASF也會將它們標示成​Unknown​,直到它們(在未來的版本中)被加入於本表格中。 這也是在一般情形下不建議在​TransferableTypes​中選擇​Unknown​類型的原因,除非您知道自己正在做什麼,且您也了解萬一Steam網路再次損毀時,會將您的所有物品標示成​Unknown​,並在交易提案中發送出您物品庫中的所有物品。 我強烈建議即使您希望交易所有物品,也不要在​TransferableTypes​中選擇​Unknown​類型。


UseLoginKeys(使用登入金鑰)

bool​型別,預設值為​true​。 本屬性定義了ASF是否應該為此Steam帳號使用登入金鑰機制。 登入金鑰的機制運作方式與官方的「記住我」選項非常相似,使得ASF可以儲存並使用一次性登入金鑰來進行下一次的登入嘗試,只要我們的登入金鑰一直有效,就可以跳過提供密碼、Steam Guard或雙重驗證代碼的要求。 登入金鑰儲存於​BotName.db​檔案中,且會自動更新。 這就是為什麼您在成功登入一次以後,不用再輸入密碼/Steam Guard/雙重驗證代碼的原因。

為了使您方便,預設情形下會使用登入金鑰,使您不用在每次登入時都需要輸入​SteamPassword​、Steam Guard或雙重驗證代碼(在未使用​ASF雙重驗證​時)。 這也是種更佳的代替方式,因為登入金鑰是一次性的,且這不會以任何方式洩漏您的原始密碼。 您的Steam用戶端就是使用完全相同的方式,來儲存您的帳號名稱及登入金鑰,以用於下次登入嘗試,這實際上與在ASF中使用​SteamLogin​及​UseLoginKeys​,並留空​SteamPassword​時完全相同。

但是,仍會有某些人擔心這個微不足道的細節,因此如果您想確保ASF不會儲存任何類型的權杖,以在關閉後回復上一個連線階段,可以啟用本選項。這會導致在每次登入嘗試時,都必須經過完整的驗證流程。 停用本選項與在官方Steam用戶端中取消勾選「記住我」的作用是完全相同的。 除非您知道您在做什麼,否則請保留預設值​true​。


UserInterfaceMode(使用者介面模式)

byte​型別,預設值為​0​。 本屬性指定了Bot在登入Steam網路後使用的使用者介面模式。 目前您可以選擇下列模式之一:

名稱
0 Default(預設模式)
1 BigPicture(Big Picture模式)
2 Mobile(行動裝置)

若您不確定如何設定本屬性,請保留預設值​0​。


檔案結構

ASF使用簡單的檔案結構。

├── config
│     ├── ASF.json
│     ├── ASF.db
│     ├── Bot1.json
│     ├── Bot1.db
│     ├── Bot2.json
│     ├── Bot2.db
│     └── ...
├── ArchiSteamFarm.dll
├── log.txt
└── ...

若您需要將ASF移動至新的位置,例如其他PC,則只需移動/複製​config​資料夾就可以了,且這也是「備份ASF」的建議方式,因為您隨時可以從GitHub下載剩餘的(程式)部分,同時也不會有毀壞ASF內部檔案的風險,例如因錯誤備份的方式。

log.txt​檔案儲存著您上一次執行ASF時所產生的紀錄日誌。 本檔案並未包含任何敏感性資訊,在與問題、崩潰相關,或提供上次執行ASF時的資訊時非常有用。 若您遇到的問題或錯誤,我們經常會需要這份檔案。 ASF會自動為您管理這份檔案,但如果您是進階使用者,您也可以進一步調整ASF的​紀錄日誌​模組。

config​資料夾是儲存ASF及其他所有Bot的設定檔的地方。

ASF.json​是ASF的全域設定檔。 本設定檔是用來定義ASF程序的行為,這會影響所有Bot及程式自身。 您可以在那裡找到全域屬性,例如ASF程序的擁有者、自動更新或除錯設定。

BotName.json​是特定Bot實例的設定檔。 本設定檔用於定義特定Bot實例的行為,因此這些設定只會對該Bot有效,而不會共用於其他Bot上。 這使您可以透過設定不同的設定,來使它們不必以完全相同的方式來運作。 每個Bot都使用由您選擇的​BotName​唯一識別碼命名。

除了設定檔外,ASF還使用​config​資料夾來儲存資料庫。

ASF.db​是ASF的全域資料庫檔案。 它是一個全域的持久儲存器,用來儲存各種與ASF程序相關的資訊,例如當地的Steam伺服器IP位址。 您不應該編輯這個檔案​。

BotName.db​是特定Bot實例的資料庫。 本檔案用於在持久儲存器中儲存特定Bot實例的關鍵資料,例如登入金鑰或ASF雙重驗證代碼。 您不應該編輯這個檔案​。

BotName.keys​是一個特殊檔案,用於向​背景序號啟動器​匯入產品序號。 它並非必須存在,也並不是由ASF所產生,但ASF會辨識此檔案。 這個檔案會在所有序號都成功匯入後被自動刪除。

BotName.maFile​是一個特殊檔案,用於匯入​ASF雙重驗證​。 它並非必須存在,也並不是由ASF所產生,但如果您的​BotName​還尚未啟用ASF雙重驗證,ASF會辨識此檔案。 這個檔案會在ASF雙重驗證成功匯入後被自動刪除。


JSON 映射

每個設定屬性都具有相應的型別。 屬性的型別定義了該屬性的有效值。 您只能使用由指定型別規定的有效值⸺如果您使用了無效值,ASF則會無法剖析您的設定檔。

我們強烈建議使用設定檔生成器來生成設定檔​⸺它能夠幫您處理大部分的底層事務(例如型別驗證),因此您只需要輸入正確的值,而不需要了解下文所述的變數型別。 本章節主要適用於手動生成/編輯設定檔的人,使他們能夠知道哪些值能夠使用。

ASF使用了原生的C#型別,具體如下:


bool​⸺布林型別,只接受​true​及​false​值。

範例:​"Enabled": true


byte​⸺無號位元組型別,只接受從​0​至​255​(包含)的整數。

範例:​"ConnectionTimeout": 90


ushort​⸺無號短整數型別,只接受從​0​至​65535​(包含)的整數。

範例:​"WebLimiterDelay": 300


uint​⸺無號整數型別,只接受從​0​至​4294967295​(包含)的整數。


ulong​⸺無號長整數型別,只接受從​0​至​18446744073709551615​(包含)的整數。

範例:​"SteamMasterClanID": 103582791440160998


string​⸺字串型別,接受任何字元序列,包含空序列​""​及​null​。 ASF會將空序列與​null​值視為相同,因此您可以依據您的偏好選擇使用哪個(我們永遠建議使用​null​)。

範例:​"SteamLogin": null​、​"SteamLogin": ""​、​"SteamLogin": "MyAccountName"


Guid?​⸺可為空值的UUID型別,在JSON中被編碼成字串。 UUID由32位元十六進位字元所組成,範圍為​0​至​9​及​a​至​f​。 ASF接受各種有效格式⸺小寫字母、大寫字母、是否有連字號皆可。 除了有效的UUID外,本屬性可為空值。也接受特殊值​null​,用於代表未提供UUID。

範例:​"LicenseID": null​、​"LicenseID": "f6a0529813f74d119982eb4fe43a9a24"


ImmutableList<valueType>​⸺給定​valueType​值的不可變集合(串列)。 在JSON中,它被定義為給定​valueType​的元素陣列。 ASF使用​List​來代表指定的屬性支援多個數值,且可能為有序的。

ImmutableList<byte>​的範例:​"FarmingOrders": [15, 11, 7]


ImmutableHashSet<valueType>​⸺給定​valueType​唯一值的不可變集合(集合)。 在JSON中,它被定義為給定​valueType​的元素陣列。 ASF使用​HashSet​來代表指定的屬性需為唯一值,且為無序的,因此它會在剖析的時候忽略所有重複值(若您因故提供了重複值)。

ImmutableHashSet<byte>​的範例:​"Blacklist": [267420, 303700, 335590]


ImmutableDictionary<keyType, valueType>​⸺將​keyType​中指定的唯一鍵映射至​valueType​值的不可變字典(映射表)。 在JSON中,它被定義為具有鍵-值對的物件。 請注意,在這種情形下​keyType​需要被括住,即使它是例如​ulong​的實值型別。 還有一個嚴格要求為映射中的鍵須為唯一,這也是由JSON所強制的。

ImmutableDictionary<ulong, byte>​的範例:​"SteamUserPermissions": { "76561198174813138": 3, "76561198174813137": 1 }


flags​⸺旗標屬性透過位元運算,將數個不同的屬性組合成一個最終值。 這使您能夠同時選擇各種不同的允許值,來使用任意一種組合。 最終值由所有啟用選項的值加總而得。

舉例來說,給定下列值:

名稱
0 None
1 A
2 B
4 C

使用​B + C​會產生​6​的值,​A + C​會產生​5​,而使用​C​會產生​4​,依此類推。 這使您能夠使用不同的值,來建立任意組合的啟用選項⸺若您決定啟用所有選項,只需計算​None + A + B + C​,得到​7​的值。 還須注意,依據定義值為​0​的旗標會在所有可用組合中啟用,因此這個旗標通常代表不啟用任何功能(例如​None​)。

如您所見,上述範例中我們有3個可用旗標(​A​、​B​、​C​)來啟用/停用,共有​8​種可能的組合值:

  • None -> 0
  • A -> 1
  • B -> 2
  • A + B -> 3
  • C -> 4
  • A + C -> 5
  • A + C -> 5
  • A + B + C -> 7

範例:​"SteamProtocols": 7


相容性映射

由於JavaScript的限制,網頁設定檔生成器無法將簡單的​ulong​欄位正確地串聯化成JSON,因此​ulong​欄位會在設定檔中以​s_​為前綴的字串呈現。 舉例來說,設定檔生成器會將​"SteamOwnerID": 76561198006963719​寫入成​"s_SteamOwnerID": "76561198006963719"​。 ASF擁有正確的邏輯來自動處理這類字串的映射,所以您設定檔中的​s_​項目是正確生成且有效的。 若您自行生成設定檔,我們建議盡可能保持使用原始的​ulong​欄位,但如果您無法這樣做,您也可以遵循本方案,將它編碼成名稱帶有​s_​前綴的字串。 我們希望未來能夠解決這個JavaScript限制。


設定檔相容性

維持與舊版的設定檔相容,是ASF的首要任務。 正如您應該已經知道,遺失設定屬性的處理方式,相當於以它們的​預設值​來定義它們。 因此,若在新版的ASF中有加入新的設定屬性,您的所有設定檔仍會與新版本維持​相容​,ASF會將這些新的設定屬性視為使用​預設值​。 您隨時能依您的需要,增加、移除或編輯任何設定屬性。

我們建議您只定義您想修改的設定屬性,因為這樣您可以使其他屬性自動繼承預設值,這不只能使您的設定檔保持簡潔,也能在我們決定修改屬性預設值時維持相容性,使您不用手動修改(例如我們修改過​WebLimiterDelay​的預設值)。

由於上述情形,ASF會自動重新格式化並刪除具有預設值的欄位,來遷移/最佳化您的設定檔。 若您有特殊原因,例如您想提供唯讀的設定檔,不讓ASF來修改它們,可以使用​--no-config-migrate命令列引數​來停用這個行為。


自動重新載入

ASF可以「動態」修改設定⸺因此ASF能自動:

  • 在您建立設定檔時,建立新的Bot實例(並在需要時啟動)
  • 在您刪除設定檔時,(並在需要時)停止並移除舊的Bot實例
  • 在您編輯設定檔時,停止任何Bot實例(並在需要時重啟)
  • 在您重新命名設定檔時,(並在需要時)以新的名稱重新啟動Bot

上述所有行為都是透明的,不需要重新啟動程式或其他(未受影響的)Bot實例,即可自動完成。

此外,若您修改了ASF的核心​ASF.json​設定檔,ASF也會重新啟動自身(如果​AutoRestart​屬性允許)。 同理,程式會在您刪除或重新命名時自動退出。

若您有特殊原因,例如您不想讓ASF對​config​資料夾的改動做出反應,可以使用​--no-config-watch命令列引數​來停用這個行為。

Clone this wiki locally