You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Telegram机器人运行报错AttributeError,请求修复方案

错误修复方案

核心错误原因及修复

1. AttributeError: 'builtin_function_or_method' object has no attribute 'random'

你代码里的导入语句是from random import random,这意味着你只导入了random模块中的random()函数,而非整个模块。此时变量名random指向的是这个函数,再调用random.random()自然会报错——函数没有random属性。

修复方式二选一:

  • 方式1:导入整个random模块
import random

之后保持代码里的random.random()和random.randint()调用不变。

  • 方式2:明确导入需要的函数
from random import random, randint

然后把代码中所有random.random()改成random(),random.randint()改成randint()。

2. 迭代器无法直接通过索引访问

app.iter_history()返回的是迭代器对象,不能直接用m[0]获取第一条消息,必须先转换成列表,同时建议增加非空判断避免索引越界:

m = list(app.iter_history("@WorldDogs_bot", 1))
if not m:
    print("未获取到消息,跳过本次操作")
    continue

3. 客户端连接时机错误

你在app.connect()之前就调用了startfunc(),此时客户端未建立连接,调用send_message、iter_history等方法都会失败;同时app.send_message("me", ...)放在app.disconnect()之后,客户端已断开,同样会出错。

推荐使用Pyrogram上下文管理器自动处理连接/断开:
把业务逻辑放在with app:代码块中,无需手动调用connect()和disconnect()。

可选:解决TgCrypto缺失警告

这个警告不影响功能,但会降低运行速度,安装依赖即可解决:

pip install pycryptodome tgcrypto

修复后的完整代码

import random
from time import sleep
from pyrogram import Client, filters

api_id = 211623999
api_hash = '64df55d4b35v660cb64034ea5d79d559'

app = Client("tymofii", api_id, api_hash)

def startfunc():
    target_id = "@WorldDogs_bot"
    planesamount = 5
    i = 0

    while i < planesamount:
        # 生成随机延迟
        st = random.random() + random.randint(2, 4)
        app.send_message(target_id, "/start")
        sleep(st)
        app.send_message(target_id, "🌽 Ферма")

        st = random.random() + random.randint(2, 4)
        if st < 2.8:
            st = 3.14
        sleep(st)
        # 转换迭代器为列表并判断非空
        messages = list(app.iter_history(target_id, 1))
        if not messages:
            print("未获取到消息,跳过本次循环")
            i += 1
            continue
        print("Чекаем грибъ")
        messages[0].click(i)

        st = random.random() + random.randint(2, 4)
        if st < 2.8:
            st = 3.14
        sleep(st)
        messages = list(app.iter_history(target_id, 1))
        if not messages:
            print("未获取到消息,跳过本次循环")
            i += 1
            continue

        grno = "🍄 Смертоносный Мухомор 🍄\n\nПлохой уход за этим грибочком приведёт к быстрой смерти смельчака, попытавшегося съесть даже маленький кусочек.\n\n"
        grno += "⏳ Поливать каждые 30 мин\n🍃 Каждая стадия роста длится 36 мин\n🍂    Умирает через 1 ч  в сухом состоянии"

        if messages[0].text != grno:
            if len(messages[0].text) > 110:
                messages[0].click(1)
                st = random.random() + random.randint(2, 3)
                sleep(st)
                messages = list(app.iter_history(target_id, 1))
                if messages:
                    messages[0].click(0)

        st = random.random() + random.randint(2, 4)
        if st < 2.8:
            st = 3.14
        sleep(st)
        i = i + 1

# 使用上下文管理器启动客户端
with app:
    startfunc()
    app.send_message("me", "userbot started!!")

内容的提问来源于stack exchange,提问作者Тимофій Таранович

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 14:50:13