ਡਿਸਪੋਰਟ ਵੌਇਸ ਚੈਨਲਾਂ ਵਿੱਚ ਐਸਐਸਆਰਸੀ ਮੈਪਿੰਗ ਨੂੰ ਸਮਝਣਾ
ਇੱਕ ਡਿਸਕੋਰਡ ਬੋਟ ਦਾ ਵਿਕਾਸ ਕਰਨਾ ਜੋ ਵੌਇਸ ਚੈਨਲਾਂ ਨਾਲ ਗੱਲਬਾਤ ਕਰਦਾ ਹੈ ਦੋਵੇਂ ਦਿਲਚਸਪ ਅਤੇ ਚੁਣੌਤੀ ਭਰਪੂਰ ਹੋ ਸਕਦੇ ਹਨ. ਇਕ ਆਮ ਰੁਕਾਵਟ ਇਹ ਪਛਾਣਨ ਵਾਲੀ ਹੈ ਕਿ ਕਿਹੜਾ ਉਪਭੋਗਤਾ ਇੱਕ ਚੈਨਲ ਦੇ ਅੰਦਰ ਇੱਕ ਖਾਸ SSRC (ਸਿੰਕ੍ਰੋਨਾਈਜ਼ੇਸ਼ਨ ਸਰੋਤ ਪਛਾਣਕਰਤਾ) ਨਾਲ ਮੇਲ ਖਾਂਦਾ ਹੈ. ਇਹ ਮੁਸ਼ਕਲ ਬਣ ਜਾਂਦੀ ਹੈ ਜਦੋਂ ਉਪਭੋਗਤਾ ਬੋਟ ਤੋਂ ਪਹਿਲਾਂ ਚੈਨਲ ਵਿੱਚ ਸ਼ਾਮਲ ਹੁੰਦੇ ਹਨ, ਕਿਉਂਕਿ ਕੁਝ ਮਹੱਤਵਪੂਰਨ ਸਮਾਗਮ ਹੋ ਚੁੱਕੇ ਹੋ ਸਕਦੇ ਹਨ. 🛠️
ਜੰਗਾਲ ਵਿੱਚ, ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਸ਼ਾਂਤੀ ਅਤੇ ਗਾਣਾ ਬਰਡ ਲਾਇਬ੍ਰੇਰੀਆਂ ਵੌਇਸ ਪੈਕੇਟਾਂ ਨੂੰ ਸੁਣਨਾ ਅਤੇ ਇਹਨਾਂ ਕੁਨੈਕਸ਼ਨਾਂ ਨੂੰ ਕੁਸ਼ਲਤਾ ਨਾਲ ਪ੍ਰਬੰਧਿਤ ਕਰਨਾ ਸੰਭਵ ਬਣਾਉਂਦੀਆਂ ਹਨ। ਹਾਲਾਂਕਿ, 'ਤੇ ਭਰੋਸਾ SpeakingStateUpdate SSRCs ਨੂੰ ਉਪਭੋਗਤਾ IDs ਨਾਲ ਲਿੰਕ ਕਰਨ ਲਈ ਸੁਨੇਹਿਆਂ ਵਿੱਚ ਸੀਮਾਵਾਂ ਹਨ। ਇਹ ਸੁਨੇਹੇ ਉਦੋਂ ਸ਼ੁਰੂ ਹੁੰਦੇ ਹਨ ਜਦੋਂ ਕੋਈ ਵਰਤੋਂਕਾਰ ਬੋਲਣਾ ਸ਼ੁਰੂ ਕਰਦਾ ਹੈ, ਬੋਟ ਨੂੰ ਖਾਲੀ ਛੱਡ ਕੇ ਜੇਕਰ ਇਹ ਦੂਜਿਆਂ ਤੋਂ ਬਾਅਦ ਜੁੜਦਾ ਹੈ।
ਇਹ ਮੁੱਦਾ ਖਾਸ ਤੌਰ 'ਤੇ ਨਿਰਾਸ਼ਾਜਨਕ ਹੋ ਸਕਦਾ ਹੈ ਜਦੋਂ ਤੁਸੀਂ ਚਾਹੁੰਦੇ ਹੋ ਕਿ ਤੁਹਾਡਾ ਬੋਟ ਸਾਰੇ ਸਰਗਰਮ ਭਾਗੀਦਾਰਾਂ ਦੀ ਪਛਾਣ ਕਰੇ, ਖਾਸ ਤੌਰ 'ਤੇ ਨਿਗਰਾਨੀ, ਲੌਗਿੰਗ, ਜਾਂ ਕਸਟਮ ਉਪਭੋਗਤਾ ਇੰਟਰੈਕਸ਼ਨਾਂ ਵਰਗੀਆਂ ਉੱਨਤ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਲਈ। ਪਹਿਲਾਂ ਤੋਂ ਮੌਜੂਦ ਉਪਭੋਗਤਾਵਾਂ ਲਈ ਇੱਕ ਭਰੋਸੇਯੋਗ SSRC-ਤੋਂ-UserId ਮੈਪਿੰਗ ਤੋਂ ਬਿਨਾਂ, ਤੁਹਾਡੇ ਬੋਟ ਦੀ ਕਾਰਜਕੁਸ਼ਲਤਾ ਅਧੂਰੀ ਮਹਿਸੂਸ ਕਰ ਸਕਦੀ ਹੈ। 😓
ਇਸ ਲੇਖ ਵਿੱਚ, ਅਸੀਂ ਖੋਜ ਕਰਾਂਗੇ ਕਿ ਕੀ ਇਸ ਪਾੜੇ ਨੂੰ ਪੂਰਾ ਕਰਨਾ ਅਤੇ ਉਪਭੋਗਤਾਵਾਂ ਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਮੈਪ ਕਰਨਾ ਸੰਭਵ ਹੈ ਭਾਵੇਂ ਉਹ ਤੁਹਾਡੇ ਬੋਟ ਤੋਂ ਪਹਿਲਾਂ ਚੈਨਲ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਏ ਹੋਣ। ਅਸੀਂ ਡਿਸਕੋਰਡ ਦੇ ਵੌਇਸ ਇਵੈਂਟਸ ਦੀਆਂ ਬਾਰੀਕੀਆਂ ਨੂੰ ਸਮਝਾਂਗੇ, ਵਿਹਾਰਕ ਹੱਲ ਦਾ ਪ੍ਰਸਤਾਵ ਦੇਵਾਂਗੇ, ਅਤੇ ਹੈਂਡ-ਆਨ ਡਿਵੈਲਪਮੈਂਟ ਅਨੁਭਵ ਤੋਂ ਸੂਝ ਦੀ ਪੇਸ਼ਕਸ਼ ਕਰਾਂਗੇ। 🚀
ਕਮਾਂਡ | ਵਰਤੋਂ ਦੀ ਉਦਾਹਰਣ |
---|---|
add_global_event | ਇੱਕ ਗਲੋਬਲ ਸਮਾਗਮ ਲਈ ਇੱਕ ਇਵੈਂਟ ਸੂਚੀਕਰਨ ਨੂੰ ਜੋੜਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ ਬੋਲਣ ਵਾਲੀ ਸਮੂਹ, ਬੋਟ ਜਿਵੇਂ ਕਿ ਖੋਜਾਂ ਜਿਵੇਂ ਕਿ ਖੋਜ ਕਰਨ ਦੀ ਆਗਿਆ ਦੇਣ ਲਈ ਇਜਾਜ਼ਤ ਦਿੰਦੀਆਂ ਹਨ ਜਾਂ ਇੱਕ ਵੌਇਸ ਚੈਨਲ ਵਿੱਚ ਬੋਲਣਾ ਬੰਦ ਕਰ ਦਿਓ. |
SpeakingStateUpdate | ਜਦੋਂ ਕੋਈ ਉਪਯੋਗਕਰਤਾ ਬੋਲਣ ਵਾਲੇ ਰਾਜ ਵਿੱਚ ਤਬਦੀਲੀ ਆਉਂਦੀ ਹੈ ਤਾਂ ਇੱਕ ਖਾਸ ਘਟਨਾ ਦੀ ਕਿਸਮ ਸ਼ੁਰੂ ਹੁੰਦੀ ਹੈ. ਇਹ ਉਹਨਾਂ ਵੇਰਵਿਆਂ ਨੂੰ ਜਿਵੇਂ ਕਿ ਮੈਪਿੰਗ ਸਪੀਕਰਾਂ ਲਈ ਅਹਿਮ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ. |
EventContext | ਕਾਰਵਾਈ ਕੀਤੀ ਜਾ ਰਹੀ ਘਟਨਾ ਦੇ ਸੰਦਰਭ ਨੂੰ ਦਰਸਾਉਂਦਾ ਹੈ। ਇਸਦੀ ਵਰਤੋਂ SpeakingStateUpdate ਵਰਗੇ ਇਵੈਂਟਾਂ ਤੋਂ ਡਾਟਾ ਜਿਵੇਂ ਕਿ SSRCs ਅਤੇ ਉਪਭੋਗਤਾ IDs ਨੂੰ ਐਕਸਟਰੈਕਟ ਕਰਨ ਲਈ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। |
Mutex | ਸਾਂਝੇ ਕੀਤੇ ਡੇਟਾ ਲਈ ਥ੍ਰੈਡ-ਸੁਰੱਖਿਅਤ, ਅਸਿੰਕਰੋਨਸ ਪਹੁੰਚ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ ਹੈਸ਼ਮੈਪ SSRC-ਤੋਂ-UserId ਮੈਪਿੰਗਾਂ ਨੂੰ ਸਟੋਰ ਕਰਦਾ ਹੈ, ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਅੱਪਡੇਟ ਕਾਰਜਾਂ ਵਿੱਚ ਸਮਕਾਲੀ ਹਨ। |
HashMap | SSRC-ਤੋਂ-UserId ਮੈਪਿੰਗਾਂ ਨੂੰ ਸਟੋਰ ਕਰਨ ਲਈ ਵਰਤੀ ਜਾਂਦੀ ਇੱਕ ਸੰਗ੍ਰਹਿ ਦੀ ਕਿਸਮ। ਇਹ ਸੰਬੰਧਿਤ ਡਿਸਕਾਰਡ ਉਪਭੋਗਤਾ ਨੂੰ ਦਿੱਤੇ ਗਏ SSRC ਨੂੰ ਮੈਪ ਕਰਨ ਲਈ ਤੁਰੰਤ ਖੋਜ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ। |
tokio::spawn | ਗੈਰ-ਬਲੌਕਿੰਗ ਓਪਰੇਸ਼ਨਾਂ ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਇੱਕ ਅਸਿੰਕਰੋਨਸ ਕਾਰਜ ਪੈਦਾ ਕਰਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ ਇੱਕ SpeakingStateUpdate ਇਵੈਂਟ ਪ੍ਰਾਪਤ ਹੋਣ 'ਤੇ SSRC ਮੈਪਿੰਗ ਨੂੰ ਅੱਪਡੇਟ ਕਰਨਾ। |
TrackEvent | ਆਡੀਓ ਟ੍ਰੈਕਾਂ ਨਾਲ ਸੰਬੰਧਿਤ ਖਾਸ ਇਵੈਂਟਾਂ ਨੂੰ ਦਰਸਾਉਂਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ ਪਲੇਬੈਕ ਸਟੇਟ ਤਬਦੀਲੀਆਂ, ਜੋ ਕਿ SSRCs ਨਾਲ ਡੇਟਾ ਦੀ ਨਿਗਰਾਨੀ ਅਤੇ ਸਮਕਾਲੀਕਰਨ ਲਈ ਵਧੀਆਂ ਜਾ ਸਕਦੀਆਂ ਹਨ। |
CoreEvent | ਗਾਣੇ ਦੀ ਬਰਡ ਵਿੱਚ ਘਟਨਾ ਦੀ ਇੱਕ ਅਧਾਰ ਕਿਸਮ ਜਿਸ ਵਿੱਚ ਬੋਲਣ ਵਾਲੀ ਖੇਡ ਵਰਗੇ ਆਵਾਜ਼ ਨਾਲ ਸਬੰਧਤ ਘਟਨਾਵਾਂ ਸ਼ਾਮਲ ਹਨ. ਇਹ SSRC ਮੈਪਿੰਗ ਕਾਰਜਾਂ ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਜ਼ਰੂਰੀ ਹੈ. |
EventHandler | SpeakingStateUpdate ਵਰਗੀਆਂ ਘਟਨਾਵਾਂ ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਇੱਕ ਵਿਸ਼ੇਸ਼ਤਾ ਪਰਿਭਾਸ਼ਿਤ ਕਰਦਾ ਹੈ। ਕਸਟਮ ਲਾਗੂਕਰਨ ਉਪਭੋਗਤਾਵਾਂ ਲਈ SSRCs ਨੂੰ ਮੈਪ ਕਰਨ ਲਈ ਖਾਸ ਤਰਕ ਦੀ ਆਗਿਆ ਦਿੰਦੇ ਹਨ। |
get_user_id | ਇੱਕ ਕਸਟਮ ਫੰਕਸ਼ਨ ਸਟੋਰ ਕੀਤੇ ਮੈਪਿੰਗਜ਼ ਤੋਂ ਦਿੱਤੇ ਗਏ ਐਸਐਸਆਰਸੀ ਨਾਲ ਜੁੜੀ ਇੱਕ ਕਸਟਮ ਫੰਕਸ਼ਨ, ਕੁਸ਼ਲ ਪੁੱਛਗਿੱਛ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਣ ਲਈ. |
ਐਸਐਸਆਰਸੀ ਮੈਪਿੰਗ ਸਕ੍ਰਿਪਟਾਂ ਸਮੱਸਿਆ ਦਾ ਹੱਲ ਕਿਵੇਂ ਕਰਦੇ ਹਨ
ਉੱਪਰ ਦਿੱਤੀਆਂ ਸਕ੍ਰਿਪਟਾਂ ਦਾ ਉਦੇਸ਼ ਮੈਪਿੰਗ ਦੀ ਚੁਣੌਤੀ ਨੂੰ ਹੱਲ ਕਰਨਾ ਹੈ Ssrc (ਸਿੰਕ੍ਰੋਨਾਈਜ਼ੇਸ਼ਨ ਸੋਰਸ ਆਈਡੈਂਟੀਫਾਇਰ) ਇੱਕ ਵੌਇਸ ਚੈਨਲ ਵਿੱਚ ਉਪਭੋਗਤਾ ID ਨੂੰ ਡਿਸਕਾਰਡ ਕਰਨ ਲਈ ਮੁੱਲ, ਖਾਸ ਕਰਕੇ ਉਹਨਾਂ ਉਪਭੋਗਤਾਵਾਂ ਲਈ ਜੋ ਬੋਟ ਤੋਂ ਪਹਿਲਾਂ ਸ਼ਾਮਲ ਹੋਏ ਸਨ। ਮੁੱਖ ਕਾਰਜਸ਼ੀਲਤਾ ਸੁਣਨ 'ਤੇ ਨਿਰਭਰ ਕਰਦੀ ਹੈ ਬੋਲਣ ਵਾਲਾ ਸਟੈਟਸ ਇਵੈਂਟ, ਜੋ ਕਿ ਸ਼ੁਰੂ ਹੁੰਦਾ ਹੈ ਜਦੋਂ ਵੀ ਉਪਭੋਗਤਾ ਦੀ ਬੋਲਣ ਵਾਲੀ ਸਥਿਤੀ ਬਦਲ ਜਾਂਦੀ ਹੈ. ਇਹ ਸਮਾਗਮ ਨਾਜ਼ੁਕ ਜਾਣਕਾਰੀ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ ਐਸਐਸਆਰਸੀ ਅਤੇ ਉਪਭੋਗਤਾ ਆਈਡੀ, ਬੋਟ ਨੂੰ ਦੋਵਾਂ ਵਿਚਕਾਰ ਮੈਪਿੰਗ ਬਣਾਉਣ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ. ਇੱਕ ਸਾਂਝੇ ਵਿੱਚ ਇਨ੍ਹਾਂ ਮੈਪਿੰਗਜ਼ ਨੂੰ ਸਟੋਰ ਕਰਕੇ ਹੈਸ਼ਮੈਪ, ਬੋਟ ਕੁਸ਼ਲਤਾ ਨਾਲ ਬਾਅਦ ਵਿੱਚ ਕਿਸੇ ਖਾਸ SSRC ਨਾਲ ਸੰਬੰਧਿਤ ਉਪਭੋਗਤਾ ID ਨੂੰ ਮੁੜ ਪ੍ਰਾਪਤ ਕਰ ਸਕਦਾ ਹੈ।
ਹੱਲ ਦਾ ਇੱਕ ਮੁੱਖ ਤੱਤ ਦੀ ਵਰਤੋਂ ਹੈ Mutex Hard ਾਂਚਾ ਹੈਸ਼ਮੈਪ ਤੱਕ ਧਾਗੇ-ਸੁਰੱਖਿਅਤ ਪਹੁੰਚ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਣ ਲਈ .ਾਂਚਾ. ਕਿਉਂਕਿ ਮਲਟੀਪਲ ਅਸੰਕਰੋਨੀਅਸ ਕਾਰਜ ਇੱਕੋ ਸਮੇਂ ਮੈਪਿੰਗ ਨੂੰ ਪੜ੍ਹਨ ਜਾਂ ਲਿਖਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਸਕਦੇ ਹਨ, ਇਹ ਸੁਨਿਸ਼ਚਿਤ ਕਰਦਾ ਹੈ ਕਿ ਇਹ ਕਾਰਜ ਭ੍ਰਿਸ਼ਟਾਚਾਰ ਨੂੰ ਰੋਕਥਾਮ ਦੇਵੇ, ਸਿੰਕ੍ਰੋਨਾਈਜ਼ਡ ਕੀਤੇ ਜਾ ਰਹੇ ਹਨ. ਉਦਾਹਰਣ ਦੇ ਲਈ, ਜਦੋਂ ਕੋਈ ਉਪਭੋਗਤਾ ਬੋਲਣਾ ਸ਼ੁਰੂ ਹੁੰਦਾ ਹੈ, ਤਾਂ ਬੋਟ ਨਕਸ਼ੇ ਨੂੰ ਨੰਕਸ ਦਿੰਦਾ ਹੈ, ਇਸ ਨੂੰ ਨਿ SS ਐਸ ਆਰ ਸੀ ਤੋਂ-ਯੂਜ਼ਰਿਡ ਮੈਪਿੰਗ ਨਾਲ ਅਪਡੇਟ ਕਰਦਾ ਹੈ, ਅਤੇ ਫਿਰ ਤਾਲਾ ਜਾਰੀ ਕਰਦਾ ਹੈ. ਇਹ ਡਿਜ਼ਾਇਨ ਇਹ ਸੁਨਿਸ਼ਚਿਤ ਕਰਦਾ ਹੈ ਕਿ ਉੱਚ ਟਰੌਸ ਵੌਇਸ ਚੈਨਲਾਂ ਵਿੱਚ ਮੈਪਿੰਗ ਇਥੋਂ ਤਕ ਕਿ ਮੈਪਿੰਗ ਵੀ ਸਹੀ ਰਹਿੰਦੀ ਹੈ. 🛠️
ਹੱਲ ਦਾ ਇੱਕ ਹੋਰ ਮਹੱਤਵਪੂਰਨ ਪਹਿਲੂ ਦੀ ਵਰਤੋਂ ਹੈ ਟੋਕੀਓ::ਸਪੌਨ ਓਪਰੇਸ਼ਨਾਂ ਨੂੰ ਅਸੰਕਰੋੜ ਨਾਲ ਸੰਭਾਲਣ ਲਈ. ਜਦੋਂ ਬੋਟ ਇੱਕ ਬੋਲਣ ਵਾਲੀ ਇੱਕ ਘਟਨਾ ਪ੍ਰਾਪਤ ਕਰਦਾ ਹੈ, ਤਾਂ ਇਹ ਮੁੱਖ ਇਵੈਂਟ ਲੂਪ ਨੂੰ ਰੋਕ ਕੇ ਮੈਪਿੰਗ ਨੂੰ ਅਪਡੇਟ ਕਰਨ ਲਈ ਇੱਕ ਨਵਾਂ ਕੰਮ ਵਧਾਉਂਦਾ ਹੈ. ਇਹ ਇਕ ਡਿਸਕੋਰਡ ਬੋਟ ਵਰਗੀ ਅਸਲ-ਟਾਈਮ ਐਪਲੀਕੇਸ਼ਨ ਵਿਚ ਮਹੱਤਵਪੂਰਨ ਹੈ, ਜਿੱਥੇ ਦੇਰੀ ਖੁੰਝੀ ਹੋਈਆਂ ਘਟਨਾਵਾਂ ਜਾਂ ਘਟੀਆ ਪ੍ਰਦਰਸ਼ਨ ਦੀ ਅਗਵਾਈ ਕਰ ਸਕਦੀਆਂ ਹਨ. ਇਸ ਤੋਂ ਇਲਾਵਾ, ਬੋਟ ਉਪਭੋਗਤਾਵਾਂ ਨੂੰ ਛੱਡਣ ਜਾਂ ਆਪਣੇ ਐਸਐਸਆਰਸੀ ਨੂੰ ਬਦਲਣ ਦੀ ਆਗਿਆ ਨੂੰ ਬਦਲਦਾ ਹੈ ਕਿ ਮੈਪਿੰਗਸ ਨੂੰ ਅਪਡੇਟ ਕਰਨ ਜਾਂ ਗਤੀਸ਼ੀਲ ਤੌਰ 'ਤੇ ਨਵੀਂਆਂ ਘਟਨਾਵਾਂ ਨੂੰ ਅਪਡੇਟ ਕਰਨ ਦੀ ਸੰਭਾਵਨਾ ਨੂੰ ਸੰਭਾਲਦਾ ਹੈ.
ਇਹ ਸੁਨਿਸ਼ਚਿਤ ਕਰਨ ਲਈ ਕਿ ਬੋਟ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਢੰਗ ਨਾਲ ਕੰਮ ਕਰ ਸਕਦਾ ਹੈ, ਭਾਵੇਂ ਉਪਭੋਗਤਾ ਵੌਇਸ ਚੈਨਲ ਨਾਲ ਜੁੜੇ ਹੋਣ ਤੋਂ ਪਹਿਲਾਂ ਜੁੜ ਗਏ ਹੋਣ, ਇੱਕ ਫਾਲਬੈਕ ਪਹੁੰਚ ਲਾਗੂ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ। ਉਦਾਹਰਨ ਲਈ, ਬੋਟ ਅਸਿੱਧੇ ਤੌਰ 'ਤੇ ਮੈਪਿੰਗ ਦਾ ਅਨੁਮਾਨ ਲਗਾਉਣ ਲਈ ਹੋਰ ਇਵੈਂਟਾਂ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ ਉਪਭੋਗਤਾ ਸ਼ਾਮਲ ਹੋਣਾ ਜਾਂ ਆਡੀਓ ਪਲੇਬੈਕ ਸਥਿਤੀਆਂ। ਹਾਲਾਂਕਿ ਇਹ 100% ਸ਼ੁੱਧਤਾ ਦੀ ਗਰੰਟੀ ਨਹੀਂ ਦੇ ਸਕਦਾ ਹੈ, ਇਹ ਬੋਟ ਦੀਆਂ ਸਮਰੱਥਾਵਾਂ ਨੂੰ ਵਧਾਉਣ ਦਾ ਇੱਕ ਵਿਹਾਰਕ ਤਰੀਕਾ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ। ਅਸਲ-ਸੰਸਾਰ ਦੇ ਦ੍ਰਿਸ਼, ਜਿਵੇਂ ਕਿ ਇੱਕ ਬੋਟ ਇੱਕ ਵੱਡੇ ਡਿਸਕਾਰਡ ਸਰਵਰ ਨੂੰ ਸੰਚਾਲਿਤ ਕਰਦਾ ਹੈ, ਇਹਨਾਂ ਅਨੁਕੂਲਤਾਵਾਂ ਤੋਂ ਮਹੱਤਵਪੂਰਨ ਤੌਰ 'ਤੇ ਲਾਭ ਪ੍ਰਾਪਤ ਕਰਦਾ ਹੈ, ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਸਾਰੇ ਉਪਭੋਗਤਾਵਾਂ ਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਪਛਾਣਿਆ ਅਤੇ ਟਰੈਕ ਕੀਤਾ ਗਿਆ ਹੈ। 🚀
ਪਹਿਲਾਂ ਸ਼ਾਮਲ ਹੋਏ ਉਪਭੋਗਤਾਵਾਂ ਲਈ ਉਪਭੋਗਤਾ ID ਨੂੰ ਡਿਸਕਾਰਡ ਕਰਨ ਲਈ SSRC ਦੀ ਮੈਪਿੰਗ
ਰਸਟ ਵਿਦ ਸੇਰੇਨਿਟੀ ਅਤੇ ਸੌਂਗਬਰਡ ਲਾਇਬ੍ਰੇਰੀਆਂ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਬੈਕਐਂਡ ਹੱਲ
use songbird::events::CoreEvent;
use songbird::input::Input;
use songbird::{Call, Event, EventContext, EventHandler};
use serenity::client::Context;
use serenity::model::id::{ChannelId, UserId};
use std::collections::HashMap;
use tokio::sync::Mutex;
struct SSRCMappingHandler {
mappings: Mutex<HashMap<u32, UserId>>, // SSRC to UserId mapping
}
impl SSRCMappingHandler {
fn new() -> Self {
Self {
mappings: Mutex::new(HashMap::new()),
}
}
async fn add_mapping(&self, ssrc: u32, user_id: UserId) {
let mut mappings = self.mappings.lock().await;
mappings.insert(ssrc, user_id);
}
async fn get_user_id(&self, ssrc: u32) -> Option<UserId> {
let mappings = self.mappings.lock().await;
mappings.get(&ssrc).copied()
}
}
#[tokio::main]
async fn main() {
let handler = SSRCMappingHandler::new();
let mut call = Call::new();
call.add_global_event(
Event::Core(CoreEvent::SpeakingStateUpdate),
|context: &EventContext<'_>| {
if let EventContext::SpeakingStateUpdate(data) = context {
let ssrc = data.ssrc;
let user_id = data.user_id; // UserId from the event
tokio::spawn(handler.add_mapping(ssrc, user_id));
}
None
},
);
}
ਐਸ ਐਸ ਆਰ ਸੀ ਸਟੇਟ ਅਤੇ ਫਾਲਬੈਕ ਤਰੀਕਿਆਂ ਨਾਲ ਇੱਕ ਹਾਈਬ੍ਰਿਡ ਪਹੁੰਚ ਦੀ ਵਰਤੋਂ ਕਰਨਾ
ਗਾਇਬ SSRC ਲਈ ਜੰਗਾਲ ਅਤੇ ਇਵੈਂਟ ਸਿੰਕ੍ਰੋਨਾਈਜ਼ੇਸ਼ਨ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ
use serenity::model::id::{GuildId, UserId};
use serenity::prelude::*;
use songbird::{Call, Event, TrackEvent, VoiceEvent};
use tokio::sync::Mutex;
struct StateManager {
guild_id: GuildId,
active_users: Mutex<HashMap<UserId, u32>>,
}
impl StateManager {
pub fn new(guild_id: GuildId) -> Self {
Self {
guild_id,
active_users: Mutex::new(HashMap::new()),
}
}
pub async fn update(&self, user_id: UserId, ssrc: u32) {
let mut active_users = self.active_users.lock().await;
active_users.insert(user_id, ssrc);
}
pub async fn get_ssrc(&self, user_id: &UserId) -> Option<u32> {
let active_users = self.active_users.lock().await;
active_users.get(user_id).copied()
}
}
#[tokio::main]
async fn main() {
let manager = StateManager::new(GuildId(1234567890));
let call = Call::new();
call.add_global_event(
Event::Core(VoiceEvent::SpeakingStateUpdate),
|ctx| {
if let EventContext::SpeakingStateUpdate(data) = ctx {
let user_id = data.user_id.unwrap_or_default();
let ssrc = data.ssrc;
tokio::spawn(manager.update(user_id, ssrc));
}
None
},
);
}
ਡਿਸਕਾਰਡ ਬੋਟਸ ਲਈ SSRC ਮੈਪਿੰਗ ਵਿੱਚ ਚੁਣੌਤੀਆਂ ਨੂੰ ਸੰਬੋਧਿਤ ਕਰਨਾ
ਮੈਪਿੰਗ ਬਾਰੇ ਚਰਚਾ ਵਿੱਚ ਇੱਕ ਪਹਿਲੂ ਨੂੰ ਅਕਸਰ ਨਜ਼ਰਅੰਦਾਜ਼ ਕੀਤਾ ਜਾਂਦਾ ਹੈ SSRC ਡਿਸਕਾਰਡ ਵਿੱਚ ਉਪਭੋਗਤਾ ID ਦੇ ਮੁੱਲ ਉਹਨਾਂ ਉਪਭੋਗਤਾਵਾਂ ਨੂੰ ਸੰਭਾਲ ਰਹੇ ਹਨ ਜੋ ਵਿਸਤ੍ਰਿਤ ਸਮੇਂ ਲਈ ਚੁੱਪ ਰਹਿੰਦੇ ਹਨ। ਜੇਕਰ ਬੋਟ ਕਨੈਕਟ ਹੋਣ ਦੌਰਾਨ ਕੋਈ ਉਪਭੋਗਤਾ ਕਦੇ ਨਹੀਂ ਬੋਲਦਾ, ਨਹੀਂ ਬੋਲਣ ਵਾਲਾ ਸਟੈਟਸ ਨੂੰ ਚਾਲੂ ਕੀਤਾ ਗਿਆ ਹੈ, ਅਤੇ ਬੋਟ ਵਿੱਚ ਮੈਪਿੰਗ ਬਣਾਉਣ ਲਈ ਸਿੱਧੀ ਜਾਣਕਾਰੀ ਦੀ ਘਾਟ ਹੈ। ਇੱਕ ਸੰਭਾਵੀ ਹੱਲ ਆਵਰਤੀ ਵੌਇਸ ਚੈਨਲ ਸਟੇਟ ਪੋਲਿੰਗ ਨੂੰ ਇਵੈਂਟਸ ਨਾਲ ਜੋੜ ਰਿਹਾ ਹੈ ਵੌਇਸਸਟੇਟ ਅੱਪਡੇਟ, ਜੋ ਬਿਨਾਂ ਬੋਲਣ ਦੇ ਉਪਭੋਗਤਾ ਦੀ ਮੌਜੂਦਗੀ ਵਿੱਚ ਤਬਦੀਲੀ ਕਰਦਾ ਹੈ ਨੂੰ ਟਰੈਕ ਕਰਦਾ ਹੈ. ਇਸ ਡੇਟਾ ਨੂੰ ਟਾਈਮਸਟੈਂਪਾਂ ਨਾਲ ਜੋੜ ਕੇ, ਬੋਟ ਇੰਸਰ ਜੋ ਉਪਭੋਗਤਾ ਸਰਗਰਮ ਹਨ, ਕਰ ਸਕਦਾ ਹੈ, ਪਰ ਉਹ ਉਪਭੋਗਤਾ ਸਰਗਰਮ ਹਨ.
ਇੱਕ ਹੋਰ ਚੁਣੌਤੀ ਵਿੱਚ ਕਈ ਸਮਕਾਲੀ ਵੌਇਸ ਚੈਨਲਾਂ ਵਾਲੇ ਵੱਡੇ ਡਿਸਕਾਰਡ ਸਰਵਰਾਂ ਵਿੱਚ ਪ੍ਰਦਰਸ਼ਨ ਨੂੰ ਅਨੁਕੂਲ ਬਣਾਉਣਾ ਸ਼ਾਮਲ ਹੈ। ਬਹੁਤ ਸਾਰੀਆਂ ਘਟਨਾਵਾਂ ਦੀ ਨਿਗਰਾਨੀ ਕਰਨ ਨਾਲ ਸਰੋਤਾਂ 'ਤੇ ਦਬਾਅ ਪੈ ਸਕਦਾ ਹੈ, ਖਾਸ ਤੌਰ 'ਤੇ ਜਦੋਂ ਬਹੁਤ ਸਾਰੇ ਉਪਭੋਗਤਾਵਾਂ ਲਈ ਮੈਪਿੰਗ ਸਟੋਰ ਕਰਨ ਲਈ ਵੱਡੇ ਹੈਸ਼ਮੈਪ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਨਾ। ਇੱਕ ਵਿਹਾਰਕ ਓਪਟੀਮਾਈਜੇਸ਼ਨ ਸ਼ਾਰਡਿੰਗ ਰਣਨੀਤੀਆਂ ਨੂੰ ਲਾਗੂ ਕਰ ਰਿਹਾ ਹੈ, ਜਿੱਥੇ ਡੇਟਾ ਨੂੰ ਵੌਇਸ ਚੈਨਲ ਆਈਡੀ ਦੇ ਅਧਾਰ ਤੇ ਵੰਡਿਆ ਜਾਂਦਾ ਹੈ। ਇਹ ਲੁੱਕਅੱਪ ਦੇ ਸਮੇਂ ਨੂੰ ਘਟਾਉਂਦਾ ਹੈ ਅਤੇ ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਇੱਕ ਚੈਨਲ ਲਈ ਮੈਪਿੰਗ ਦੂਜਿਆਂ ਵਿੱਚ ਦਖਲ ਨਹੀਂ ਦਿੰਦੀ। ਵਰਗੇ ਹਲਕੇ ਜੰਗਾਲ ਬਣਤਰ ਦਾ ਇਸਤੇਮਾਲ ਡੈਸ਼ਮੈਪ ਅਜਿਹੇ ਉੱਚ-ਟ੍ਰੈਫਿਕ ਦ੍ਰਿਸ਼ਾਂ ਵਿੱਚ ਪ੍ਰਦਰਸ਼ਨ ਨੂੰ ਹੋਰ ਵਧਾਉਣ ਲਈ. 🛠️
ਅੰਤ ਵਿੱਚ, ਸੁਰੱਖਿਆ ਇੱਕ ਅਹਿਮ ਵਿਚਾਰ ਹੈ. ਇੱਕ ਬੋਟਿੰਗ ਨੂੰ ਸੰਭਾਲਣਾ ਸੰਵੇਦਨਸ਼ੀਲ ਡੇਟਾ ਜਿਵੇਂ ਕਿ ਉਪਭੋਗਤਾ IDs ਜਿਵੇਂ ਕਿ ਅਣਅਧਿਕਾਰਤ ਪਹੁੰਚ ਨੂੰ ਰੋਕਣ ਲਈ ਤਿਆਰ ਕੀਤਾ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ. ਤਕਨੀਕਾਂ ਜਿਵੇਂ ਕਿ ਏਕ੍ਰਿਪਟਿੰਗ ਉਪਭੋਗਤਾ ਆਈਡੀ ਮੈਪਿੰਗਜ਼ ਅਤੇ ਏਪੀਆਈ ਕਾਲਾਂ ਤੇ ਮਜਬੂਤ ਪ੍ਰਮਾਣਿਕਤਾ ਵਿਧੀ ਲਾਗੂ ਹਨ. ਇੱਕ ਸਰਵਜਨਕ ਸਰਵਰ ਨੂੰ ਮੱਧਮ ਕਰ ਰਿਹਾ ਇੱਕ ਬੋਟ, ਉਦਾਹਰਣ ਦੇ ਤੌਰ ਤੇ, ਭਰੋਸੇਮੰਦ ਐਡਮਿਨਿਟ ਉਪਭੋਗਤਾਵਾਂ ਨੂੰ ਸਿਰਫ ਭਰੋਸੇਮੰਦ ਐਡਮਿਨਿਟੀ ਨੂੰ ਸੀਮਿਤ ਕਰਨ ਵੇਲੇ, ਕਾਰਜਕੁਸ਼ਲਤਾ ਨੂੰ ਬਣਾਈ ਰੱਖਣ ਵਿੱਚ ਸੁਨਿਸ਼ਚਿਤ ਕਰਦੇ ਹੋਏ. ਇਹ ਸੰਪੂਰਨ ਪਹੁੰਚ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਬੋਟ ਕੁਸ਼ਲ ਕੁਸ਼ਲ, ਸੁਰੱਖਿਅਤ ਅਤੇ ਸਕੇਲੇਬਲ ਹੈ. 🔒
ਜੰਗਾਲ ਵਿੱਚ ਉਪਭੋਗਤਾਵਾਂ ਨੂੰ ਡਿਸਕਾਰਡ ਕਰਨ ਲਈ SSRC ਦੀ ਮੈਪਿੰਗ ਬਾਰੇ ਅਕਸਰ ਪੁੱਛੇ ਜਾਂਦੇ ਸਵਾਲ
- ਇੱਕ SSRC ਕੀ ਹੈ?
- ਇੱਕ SSRC (ਸਿੰਕ੍ਰੋਨਾਈਜ਼ੇਸ਼ਨ ਸੋਰਸ ਆਈਡੈਂਟੀਫਾਇਰ) ਇੱਕ ਵੌਇਸ ਚੈਨਲ ਵਿੱਚ ਇੱਕ ਆਡੀਓ ਸਟ੍ਰੀਮ ਨੂੰ ਨਿਰਧਾਰਤ ਕੀਤਾ ਗਿਆ ਇੱਕ ਵਿਲੱਖਣ ਨੰਬਰ ਹੈ। ਇਹ ਸਟ੍ਰੀਮਾਂ ਨੂੰ ਵੱਖ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ ਪਰ ਉਪਭੋਗਤਾਵਾਂ ਦੀ ਪਛਾਣ ਨਹੀਂ ਕਰਦਾ।
- ਕਿਉਂ ਨਹੀਂ SpeakingStateUpdate ਚੁੱਪ ਉਪਭੋਗਤਾਵਾਂ ਲਈ ਕੰਮ?
- SpeakingStateUpdate ਇਵੈਂਟ ਉਦੋਂ ਹੀ ਚਾਲੂ ਹੁੰਦਾ ਹੈ ਜਦੋਂ ਉਪਭੋਗਤਾ ਬੋਲਣਾ ਸ਼ੁਰੂ ਕਰਦੇ ਹਨ ਜਾਂ ਬੰਦ ਕਰਦੇ ਹਨ, ਇਸਲਈ ਇਹ ਉਹਨਾਂ ਉਪਭੋਗਤਾਵਾਂ ਲਈ ਫਾਇਰ ਨਹੀਂ ਕਰੇਗਾ ਜੋ ਕੋਈ ਰੌਲਾ ਨਹੀਂ ਪਾਉਂਦੇ ਹਨ।
- ਮੈਂ ਉਹਨਾਂ ਉਪਭੋਗਤਾਵਾਂ ਨੂੰ ਕਿਵੇਂ ਸੰਭਾਲ ਸਕਦਾ ਹਾਂ ਜੋ ਬੋਟ ਤੋਂ ਪਹਿਲਾਂ ਸ਼ਾਮਲ ਹੋਏ ਸਨ?
- ਤੁਸੀਂ ਇਮੇਜਾਂ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦੇ ਹੋ VoiceStateUpdateਪਰ, ਕਿਹੜੇ ਲੌਗਸ ਜਦੋਂ ਇਸ ਵਿੱਚ ਸ਼ਾਮਲ ਹੁੰਦੇ ਹਨ ਜਾਂ ਨਹੀਂ ਛੱਡਦੇ, ਅਤੇ ਇਸ ਡੇਟਾ ਨੂੰ ਮੌਜੂਦਾ ਸਟ੍ਰੀਮ ਵਿੱਚ ਮੈਪ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦੇ ਹਨ.
- ਕੀ ਮੈਂ ਵੱਡੇ ਸਰਵਰਾਂ ਲਈ ਪ੍ਰਦਰਸ਼ਨ ਨੂੰ ਅਨੁਕੂਲ ਬਣਾ ਸਕਦਾ ਹਾਂ?
- ਹਾਂ, ਵਰਗੇ ਢਾਂਚੇ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ DashMap ਚੈਨਲ ਆਈਡੀ ਦੁਆਰਾ ਸਮੁੱਚੇ ਪਹੁੰਚ ਅਤੇ ਸ਼ਾਰਡਿੰਗ ਡੇਟਾ ਲਈ ਓਵਰਹੈੱਡ ਓਵਰਹੈਡ ਘਟਾ ਸਕਦਾ ਹੈ.
- ਕੀ ਇੱਥੇ ਹੋਰ ਪ੍ਰੋਗਰਾਮਾਂ ਤੋਂ SSRC ਨੂੰ ਪ੍ਰਾਪਤ ਕਰਨ ਦਾ ਕੋਈ ਤਰੀਕਾ ਹੈ?
- ਬਦਕਿਸਮਤੀ ਨਾਲ, ਕੋਈ ਵੀ ਸਿੱਧੀ ਇਵੈਂਟ SSRC-ਉਪਭੋਗਤਾ ਮੈਪਿੰਗ ਨੂੰ ਛੱਡ ਕੇ ਪ੍ਰਦਾਨ ਨਹੀਂ ਕਰਦੀ SpeakingStateUpdate, ਪਰ ਰਚਨਾਤਮਕ ਤੌਰ 'ਤੇ ਘਟਨਾਵਾਂ ਨੂੰ ਜੋੜਨਾ ਅਸਿੱਧੇ ਹੱਲ ਪੇਸ਼ ਕਰ ਸਕਦਾ ਹੈ।
SSRC ਮੈਪਿੰਗ 'ਤੇ ਅੰਤਿਮ ਵਿਚਾਰ
ਮੈਪਿੰਗ Ssrc ਡਿਸਪੋਰਟ ਦੇ ਉਪਭੋਗਤਾ IDs ਲਈ ਮੁੱਲ ਵੌਇਸ ਚੈਨਲ ਨਾਲ ਕੰਮ ਕਰਨ ਲਈ ਬੋਟਾਂ ਲਈ ਇੱਕ ਮਹੱਤਵਪੂਰਣ ਕਾਰਜ ਹੈ. ਅਨੁਕੂਲਿਤ ਡਾਟਾ ਹੈਂਡਲਿੰਗ ਦੇ ਨਾਲ ਈਵੈਂਟ ਨਿਗਰਾਨੀ ਨੂੰ ਜੋੜ ਕੇ, ਡਿਵੈਲਪਰ ਖੁੰਝੇ ਹੋਏ ਪ੍ਰੋਗਰਾਮਾਂ ਅਤੇ ਚੁੱਪ ਉਪਭੋਗਤਾਵਾਂ ਦੇ ਕਾਰਨ ਪਾੜੇ ਨੂੰ ਬਰਿੱਤ ਕਰ ਸਕਦੇ ਹਨ. ਅਸਲ-ਸੰਸਾਰ ਦੀਆਂ ਉਦਾਹਰਣਾਂ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਇਨ੍ਹਾਂ ਤਕਨੀਕਾਂ ਨੂੰ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਸਿੱਧੀਆਂ ਕਰਦੀਆਂ ਹਨ. 🔧
ਰਚਨਾਤਮਕ ਸਮੱਸਿਆ-ਹੱਲ ਕਰਨਾ, ਜਿਵੇਂ ਕਿ ਵਿਕਲਪਕ ਇਵੈਂਟਸ ਅਤੇ ਸ਼ਾਰਡਿੰਗ ਦੀ ਵਰਤੋਂ ਕਰਨਾ, ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਬੋਟ ਵੱਡੇ ਸਰਵਰਾਂ ਵਿੱਚ ਸਕੇਲੇਬਲ ਅਤੇ ਕੁਸ਼ਲ ਬਣੇ ਰਹਿਣ। ਇਹਨਾਂ ਤਕਨੀਕਾਂ ਦੇ ਨਾਲ, ਤੁਸੀਂ ਸਹੀ ਮੈਪਿੰਗ ਬਣਾ ਸਕਦੇ ਹੋ, ਉਪਭੋਗਤਾ ਟਰੈਕਿੰਗ ਨੂੰ ਵਧਾ ਸਕਦੇ ਹੋ, ਅਤੇ ਵਿਭਿੰਨ ਵਰਤੋਂ ਦੇ ਮਾਮਲਿਆਂ ਲਈ ਮਜ਼ਬੂਤ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਬਣਾ ਸਕਦੇ ਹੋ, ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦੇ ਹੋਏ ਕਿ ਤੁਹਾਡਾ ਬੋਟ ਕਾਰਜਕੁਸ਼ਲਤਾ ਅਤੇ ਭਰੋਸੇਯੋਗਤਾ ਵਿੱਚ ਵੱਖਰਾ ਹੈ। 🚀
ਸਰੋਤ ਅਤੇ ਹਵਾਲੇ
- ਵਰਤਣ ਬਾਰੇ ਵੇਰਵਾ ਸਹਿਜਤਾ ਅਤੇ ਗੀਤ ਪੰਛੀ ਡਿਸਕਾਰਡ ਬੋਟ ਬਣਾਉਣ ਲਈ ਲਾਇਬ੍ਰੇਰੀਆਂ ਨੂੰ ਅਧਿਕਾਰਤ ਦਸਤਾਵੇਜ਼ਾਂ ਤੋਂ ਅਨੁਕੂਲਿਤ ਕੀਤਾ ਗਿਆ ਸੀ। ਹੋਰ ਲਈ, 'ਤੇ ਜਾਓ ਸਹਿਜ ਦਸਤਾਵੇਜ਼ .
- ਹੈਂਡਲਿੰਗ 'ਤੇ ਸੂਝ ਬੋਲਣ ਵਾਲਾ ਸਟੈਟਸ ਇਵੈਂਟਸ ਅਤੇ SSRC ਮੈਪਿੰਗ ਡਿਵੈਲਪਰ ਫੋਰਮਾਂ 'ਤੇ ਚਰਚਾ ਤੋਂ ਪ੍ਰੇਰਿਤ ਸਨ। 'ਤੇ ਕਮਿਊਨਿਟੀ ਇਨਪੁਟ ਦੀ ਜਾਂਚ ਕਰੋ GitHub - ਸਹਿਜਤਾ .
- ਉੱਨਤ ਵਿੱਚ ਐਡਵਾਂਸਡ ਸਹਿਮਤੀ ਨੂੰ ਹੈਂਡਲ ਕਰਨਾ, ਜਿਵੇਂ ਕਿ ਦੀ ਵਰਤੋਂ ਮਿ ute ਟੈਕਸ ਅਤੇ ਡੈਸ਼ਮੈਪ, 'ਤੇ ਚੰਗੀ ਤਰ੍ਹਾਂ ਦਰਜ ਕੀਤਾ ਗਿਆ ਹੈ Tokio.rs , ਇੱਕ ਭਰੋਸੇਮੰਦ ਜੰਗਾਲ ਸਰੋਤ.
- ਡਿਸਕੋਟ ਬੋਟ ਡਿਵੈਲਪਮੈਂਟ ਵਿਚ ਅਸਲ-ਸੰਸਾਰ ਉਦਾਹਰਣਾਂ ਅਤੇ ਨਿਪਟਾਰੇ ਲਈ, ਇਨਫਾਈਟਸ ਤਜਰਬੇਕਾਰ ਡਿਵੈਲਪਰਾਂ ਤੋਂ ਇਕੱਠੇ ਹੋਏ ਜੰਗਾਲ ਦਾ ਵਿਵਾਦ ਕਮਿ community ਨਿਟੀ .