/
Discord.com协议进群DEMO:此方法有封号风险,仅供参考
Discord.com协议进群DEMO:此方法有封号风险,仅供参考
最近很多人咨询discord.com如何用协议进群,因为dc使用了比较多的手段来检测,简直防不胜防,
所以以下代码仅供参考思路,如果直接使用,有封号风险,请谨慎选择。
代码有几个注意点:
发起请求前需要使用
CipherAdapter
方法来处理ssl问题发请请求前需要指定userAgent值,创建验证码需要使用这个值
如果验证码接口返回的userAgent与值自己提交的不同,使用接口返回的
返回{"message":"Unknown Message""code": 10008}错误的原因未知,可能与账号有关
import sys
sys.path.append(".")
import os
import requests
import time
from loguru import logger
from faker import Faker
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.ssl_ import create_urllib3_context
# disable ssl warning
requests.packages.urllib3.disable_warnings()
class CipherAdapter(HTTPAdapter):
# 用于处理部分网站需要验证ssl
# 在test中的load方法中使用
# 使用self.mount_adapter()加载
def init_poolmanager(self, *args, **kwargs):
context = create_urllib3_context(ciphers='DEFAULT:@SECLEVEL=2')
kwargs['ssl_context'] = context
return super(CipherAdapter, self).init_poolmanager(*args, **kwargs)
def proxy_manager_for(self, *args, **kwargs):
context = create_urllib3_context(ciphers='DEFAULT:@SECLEVEL=2')
kwargs['ssl_context'] = context
return super(CipherAdapter, self).proxy_manager_for(*args, **kwargs)
class YesCaptchaSolver:
# Yescaptcha 接口测试工具
# YesCaptchaSolver:创建任务请求,生成验证码结果
def __init__(self, key="", url="", type="", proxy={}, args={}):
self.server = "https://api.yescaptcha.com"
self.clientkey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx" # 填你的密钥
self.key = key
self.url = url
self.type = type
self.proxy = proxy
self.args = args
def create(self, url):
data = {
"clientKey": self.clientkey,
"task": {
"websiteURL": self.url,
"websiteKey": self.key,
"type": self.type
}
}
if self.args:
data["task"].update(self.args)
print("create: ", data)
response = requests.post(f"{self.server}/createTask", json=data, timeout=30, proxies=self.proxy, verify=False)
return response.json()
def get(self, task_id):
data = {
"clientKey": self.clientkey,
"taskId": task_id
}
response = requests.post(f"{self.server}/getTaskResult", json=data, timeout=30, proxies=self.proxy, verify=False)
return response.json()
def solve(self):
task = self.create(self.url)
logger.info(f"Task created: {task}")
task_id = task.get("taskId")
if not task_id:
return
for i in range(60):
result = self.get(task_id)
# logger.info(f"Task result: {result}")
if result.get("errorId") == 1:
logger.info(f"Task fail: {result}")
return
if result.get("status") == "ready":
logger.info(f"Task result: {result}")
return result.get("solution")
time.sleep(2)
class YescaptchaTester:
# Yescaptcha 接口测试实例
# YescaptchaTester: 提交验证码结果,获取结果
def __init__(self, proxy={}):
self.solver = YesCaptchaSolver(proxy=proxy)
self.token = ""
self.proxy = proxy
self.session = requests.Session()
# 生成随机user-agent
# fake = Faker(locale='zh_CN')
# self.session.headers = {'User-Agent': fake.user_agent()}
# discord注册需要计算fingerprint,因此需要配套的user-agent
self.userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
self.session.headers.update({'User-Agent': self.userAgent})
# 以下参数可以阅读开发文档获取
self.type = ""
# key和url可以在创建任务时获取
self.key = ""
self.url = ""
self.args = {
"userAgent": self.userAgent,
# rqdata值是通过请求获取的,这里先留空
"rqdata": "",
}
def get_token(self):
# 获取验证码token
self.solver.key = self.key
self.solver.url = self.url
self.solver.type = self.type
self.solver.proxy = self.proxy
self.solver.args = self.args
result = self.solver.solve()
if result and 'userAgent' in result:
return result
elif result and result.get("gRecaptchaResponse"):
return result.get("gRecaptchaResponse")
def load(self):
# 在提交验证之前可能需要处理其他内容,可以在这里处理
# mount adapter for ssl warning
self.session.mount('https://', CipherAdapter())
self.session.mount('http://', CipherAdapter())
# 添加登陆成功后的帐号token
self.session.headers.update({"authorization": "这里填自己的帐号Token"})
# 访问邀请页
url = self.url = "https://discord.com/invite/fusionist"
r = self.session.get(url, proxies=self.proxy)
logger.info(f"load invite page: {r.status_code}")
self.session.headers.update({"Referer": url})
# 点击进群按钮,获取验证码参数
url = "https://discord.com/api/v9/invites/fusionist"
r = self.session.post(url, json={}, proxies=self.proxy)
logger.info(f"post invite page: {r.status_code}")
if "401: Unauthorized" in r.text:
logger.info(f"请先登陆,获取登陆token -> {r.text}")
return False
# 判断是不是已经在群里了
if 'code' in r.text:
logger.info(f"已经在群里了 -> {r.text}")
return False
self.sitekey = self.key = r.json().get("captcha_sitekey")
self.rqdata = r.json().get("captcha_rqdata")
self.rqtoken = r.json().get("captcha_rqtoken")
assert self.rqdata and self.rqtoken and self.sitekey, f"Args is None: {r.text}"
self.args['rqdata'] = self.rqdata
return True
def submit(self):
# discord提交进群
captcha_key = self.token.get('gRecaptchaResponse')
userAgent = self.token.get('userAgent')
if self.userAgent != userAgent:
logger.info(f"User-Agent不一致,使用接口返回的User-Agent: {userAgent}")
self.session.headers.update({
'User-Agent': userAgent,
})
url = "https://discord.com/api/v9/invites/fusionist"
data = {"captcha_key": captcha_key, "captcha_rqtoken":self.rqtoken}
response = self.session.post(url, json=data, proxies=self.proxy)
if 'show_verification_form' in response.text:
logger.info(f"验证成功! -> {response.text}")
return True
else:
logger.info(f"验证失败! -> {response.text}")
def test(self):
# 完整测试流程
# 加载网页
if self.load():
# 创建验证码任务和获取结果
self.token = self.get_token()
assert self.token, "获取token失败"
# 提交验证
self.submit()
if __name__ == "__main__":
tester = YescaptchaTester()
# tester.type = "HCaptchaTaskProxylessM1"
tester.type = "HCaptchaTaskProxyless"
tester.solver.server = "https://dev.yescaptcha.com"
# 填你的密钥,或者从环境变量中获取
tester.solver.clientkey = "" or os.environ.get("YESCAPTCHA_CLIENTKEY")
tester.test()
执行正确的结果:
再次提醒:协议进群有封号风险,请谨慎使用。
, multiple selections available,
Related content
HCaptchaTaskProxyless : HCaptcha 协议接口
HCaptchaTaskProxyless : HCaptcha 协议接口
More like this
如何判断 reCaptcha 是什么版本
如何判断 reCaptcha 是什么版本
Read with this
Basic analysis of the reCaptcha protocol submission (for those who do not know how to submit)
Basic analysis of the reCaptcha protocol submission (for those who do not know how to submit)
More like this
如何查找 reCaptcha 系列的回调函数
如何查找 reCaptcha 系列的回调函数
Read with this
English 报错 (SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1129)'))
English 报错 (SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1129)'))
More like this
独享服务器自助租赁服务
独享服务器自助租赁服务
Read with this