0

我正在用 pyrogram 编写用户机器人,但我想用不同的电报帐户运行多个客户端,但我被困在这里。如果我将单独运行它,我想使用一个脚本在多个帐户上运行 userbot 然后我必须托管它很多次我想托管它一次并为我拥有的每个帐户运行。
我认为这将有助于理解我在说什么。


from pyrogram import Client, filters, handlers, idle
import threading
from pyrogram.handlers import MessageHandler

app1 = Client(
    session, api_hash, api_id)


app2 = Client(session,
              api_hash, api_id)


accounts = [app1, app2]


async def handlngmessage(client, message):
    print(message)
    print("\nstarted ")
    await client.send_message("me", "recived")


def runner(c):
    c.run()


for ac in accounts:
    ac.add_handler(handlers.MessageHandler(unmutedtest))
    t = threading.Thread(target=runner, args=(ac,))
    t.start()
    t.join()

当我运行它时,我只是收到错误

输出

Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python3.9/threading.py", line 954, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.9/threading.py", line 892, in run
    self._target(*self._args, **self._kwargs)
  File "/home/ak/Desktop/development/bots/pyrogramplugins/userbot/main.py", line 30, in runner
    c.run()
  File "/home/ak/.local/lib/python3.9/site-packages/pyrogram/methods/utilities/run.py", line 50, in run
    loop = asyncio.get_event_loop()
  File "/usr/lib/python3.9/asyncio/events.py", line 642, in get_event_loop
    raise RuntimeError('There is no current event loop in thread %r.'
RuntimeError: There is no current event loop in thread 'Thread-1'.
Exception in thread Thread-2:
Traceback (most recent call last):
  File "/usr/lib/python3.9/threading.py", line 954, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.9/threading.py", line 892, in run
    self._target(*self._args, **self._kwargs)
  File "/home/ak/Desktop/development/bots/pyrogramplugins/userbot/main.py", line 30, in runner
    c.run()
  File "/home/ak/.local/lib/python3.9/site-packages/pyrogram/methods/utilities/run.py", line 50, in run
    loop = asyncio.get_event_loop()
  File "/usr/lib/python3.9/asyncio/events.py", line 642, in get_event_loop
    raise RuntimeError('There is no current event loop in thread %r.'
RuntimeError: There is no current event loop in thread 'Thread-2'.
4

1 回答 1

0

使用 Pyrogram,您无需使用线程。内部代码已经完全异步,您可以一个接一个地启动客户端,然后调用Client.idle()以保持它们全部“活着”。

from pyrogram import Client

app1 = Client("first account")
app2 = Client("second account")

# You can either stack decorators ...
@app1.on_message()
@app2.on_message()
async def m_func(_, message):
    pass

# ... or use multiple add_handler calls
app1.add_handler(MessageHandler(m_func))
app2.add_handler(MessageHandler(m_func))

# Then start all Clients and call idle() to keep them running
app1.start()
app2.start()
Client.idle()
app1.stop()
app2.stop()

或者,这是一个带有更多解释的要点。
https://gist.github.com/pokurt/96afa69e86725850b2101099461609ed

于 2021-12-23T15:27:50.503 回答