python - 无法从 slack 打印用户名 "@John"以及如何在不手动输入 cntrl+c 的情况下关闭 Linux 中的 python 文件

标签 python mysql slack slack-api

Q1) Unable to print username from slack as "@John" instead its printing "WLCLZ2LDP"

So for variable "username" it should print slack username ( for example : JohnDoe) but instead printing randomized letter as WLCLZ2LDP

代码

@slack.RTMClient.run_on(event='message')
def say_hello(**payload):
    try:
        ##0 get clients and payload
        logging.info('msg received')

        data = payload['data']
        web_client = payload['web_client']
        rtm_client = payload['rtm_client']

        ##0 - 1 Check if it is the first msg, not replied msg by me
        # print(data)
        if data.get('text') == None:
            logging.info('This msg is my replied msg.')
            return False
        ##0-2 Get channel info
        channel_id = data['channel']
        thread_ts = data['ts']
        global user
        user = data['user']

        ##1 get scenario submsg
        msg = data['text']
        retVal = analysis_msg(msg)
.
.
.
.code continuation 
.
.
.
.mycursor = mydb.cursor()
for value in submsg:
  print(value)
fulfilment=submsg[0]
sku=submsg[1]
environment=submsg[2]
payment=submsg[3]
ts = time.time()
date = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
orderNumber=res
username=user

print(fulfilment)
print(sku)
print(environment)
print(payment)
print(username)
print(orderNumber)

sqlformula = "INSERT INTO orderDetails (fulfilment,sku,environment,payment,orderNumber,date,user) VALUES (%s,%s,%s,%s,%s,%s,%s)"

#order=("sth",3643387,"sftqa2","AMEX")
#mycursor.execute(sqlformula,order)

mycursor.execute(sqlformula,(fulfilment,sku,environment,payment,orderNumber,date,username))

mydb.commit()
mydb.close()


输出

下面的输出我需要获得松弛的用户名,但我得到了随机字母

spu
3646989
mq1
AMEX
WLCLZ2LDP
"200002086748"

编辑后的代码


@slack.RTMClient.run_on(event='message')
def say_hello(**payload):
    try:
        ##0 get clients and payload
        logging.info('msg received')
        data = payload['data']
        web_client = payload['web_client']
        rtm_client = payload['rtm_client']
        ##0 - 1 Check if it is the first msg, not replied msg by me
        # print(data)
        if data.get('text') == None:
            logging.info('This msg is my replied msg.')
            return False
        ##0-2 Get channel info
        channel_id = data['channel']
        thread_ts = data['ts']

        global user
        user = data['user']
        msg = data['text']
        retVal = analysis_msg(msg)

        response = web_client.users_list()
        assert(response['ok'])
        user_map = {x['id']: x['name'] for x in response['members']}
        global user_name
        user_name = user_map[user] if user in user_map else None
        print(user_name)

情况 1: 编辑代码的输出 - 当其他用户尝试从他们的计算机获取“None”(非预期)时

spu
2469048
sftqa3
AMEX
None
BBY01-200002096736

案例 2:编辑代码的输出:当我从我的机器上运行时,我能够看到我的辅助,即 A6002043(预期)

spu
2469048
sftqa3
VISA
a6002043
BBY01-200002096040

最佳答案

请允许我澄清两个误解:

  • 这些不是“随机字母”,而是用户 ID。
  • 事件不包含用户名,仅包含用户 ID。

要获取用户名,您需要调用API方法users.list获取用户列表。这样您就可以将 ID 映射到用户名。

以下是如何获取用户 ID 的用户名的示例代码:

slack_token = os.environ['SLACK_TOKEN']
response = client.users_list()
assert(response['ok'])
user_map = {x['id']: x['name'] for x in response['members']}
user_name = user_map[user_id] if user_id in user_map else None
print(user_name)

关于python - 无法从 slack 打印用户名 "@John"以及如何在不手动输入 cntrl+c 的情况下关闭 Linux 中的 python 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59082141/

相关文章:

python - python pandas DataFrames中,设置值时自动类型转换的规则是什么?

python - 如何将此代码从 Python 2.7 转换为 Python 3.5 以修复 ---> AttributeError : '_io.TextIOWrapper' object has no attribute 'next'

php - 用户名册,加入表但丢失数据

mysql - 计算 MySQL 中某行中某个单词的出现次数

python - 在数据框列中应用模糊匹配并将结果保存在新列中

python - GAE python : How to post/retrieve json data between two applications?

mysql - Oracle ADF 表单数据未添加到数据库

curl - Mattermost(团队聊天)- 如何通过 curl 发布到 channel ?

slack-api - 如何向 Slack 监听 channel 发送消息?

slack-api - 松弛斜杠命令仅显示对 channel 的响应