首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AttributeError:“coroutine”对象没有属性“用户名”

AttributeError:“coroutine”对象没有属性“用户名”
EN

Stack Overflow用户
提问于 2021-09-28 04:16:40
回答 1查看 3K关注 0票数 3

嗨!我是新来的,我请求帮助。

所以我从github下载了这段代码,叫做电报自动回复,然后运行它,但是我得到了这个错误:

代码语言:javascript
复制
"C:\Users\user\Downloads\Compressed\telegram-auto-reply-master\main.py", line 36, in handle_new_message
    me = await client.get_me().username
AttributeError: 'coroutine' object has no attribute 'username'

这是截图

,这是main.py代码:

代码语言:javascript
复制
#!/usr/bin/env python3
# A simple script to print some messages.
import time
import re
import json
import random
import os
from asyncio import sleep
from pprint import pprint

from telethon import TelegramClient, events, utils
from dotenv import load_dotenv

load_dotenv() # get .env variable

session = os.environ.get('TG_SESSION', 'printer')
api_id = os.getenv("API_ID")
api_hash = os.getenv("API_HASH")
debug_mode = os.getenv("DEBUG_MODE").upper() == "TRUE"

proxy = None  # https://github.com/Anorov/PySocks

# Create and start the client so we can make requests (we don't here)
client = TelegramClient(session, api_id, api_hash, proxy=proxy).start()

# create a sender list to check if user already send private message or mention
senderList = [] 

#read json file and prepare quiz to send later
with open('quizzes.json') as json_file:
    quizzes = json.load(json_file)

@client.on(events.NewMessage)
async def handle_new_message(event):
    
    me = await client.get_me().username
    from_ = await event.client.get_entity(event.from_id)  # this lookup will be cached by telethon
    to_ = await event.client.get_entity(event.message.to_id)

    needToProceed = from_.is_self if debug_mode else not from_.is_self and (event.is_private or re.search("@"+me.username,event.raw_text))
    if needToProceed:  # only auto-reply to private chats:  # only auto-reply to private chats   
        if not from_.bot and event:  # don't auto-reply to bots
            print(time.asctime(), '-', event.message)  # optionally log time and message
            await sleep(1)  # pause for 1 second to rate-limit automatic replies   
            message = ""
            senderList.append(to_.id)
            if senderList.count(to_.id) < 2:
                message =   f"""**AUTO REPLY**
                \nHi @{from_.username},
                \n\nMohon maaf boss saya sedang offline, mohon tunggu sebentar.
                \nSilahkan lihat-lihat [imacakes](https://www.instagram.com/ima_cake_cirebon) dulu untuk cuci mata.
                \n\n**AUTO REPLY**"""
            elif senderList.count(to_.id) < 3:
                message =   f"""**AUTO REPLY**
                \nMohon bersabar @{from_.username}, boss saya masih offline """
            elif senderList.count(to_.id) < 4:
                message = f"""**AUTO REPLY** 
                \n@{from_.username} Tolong bersabar yaa """
            else:
                random_number = random.randint(0,len(quizzes) - 1)
                question = quizzes[random_number]['question']
                answer = quizzes[random_number]['answer']
                message = f"""**AUTO REPLY**
                \n @{from_.username}, Main tebak-tebakan aja yuk 
                \n {question}
                \n {answer}
                \n """
            
            if message != "":
                await event.reply(message)

client.start()
client.run_until_disconnected()

我真的不知道出了什么问题,因为我是新来的,也不太懂编码,所以如果有人愿意帮我,我真的很感激:)

谢谢你帮助我:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-28 04:34:43

我认为问题在于me = await client.get_me().username

根据电视快速启动的说法,client.get_me()好战。这意味着要获得返回值,您必须await它,就像在await client.get_met()中一样。在此之前,client.get_me()的结果是一个协同线。因此,await client.get_me().username无法工作,因为当您尝试访问username属性时,client.get_me()仍然是一个协同线。

快速启动实际上是这样做的

代码语言:javascript
复制
me = await client.get_me()
username = me.username
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69355743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档