Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
266 views
in Technique[技术] by (71.8m points)

python - 如何在python discord bot中标记成员(How can I tag a member in my python discord bot)

So I have this leveling system in python but I wanna add an @tag so the bot mentions the member that leveled up... But I got no idea how.

(因此,我在python中拥有此练级系统,但我想添加一个@tag,以便该机器人提及进行练级的成员...但是我不知道该怎么做。)

I already tried multiple things but they all don't work.

(我已经尝试了多种方法,但是它们都不起作用。)

    from discord.ext import commands
import discord
import logging
import yaml
import sqlite3
import time
import random
import re

logging.basicConfig(level=logging.INFO)


bot = commands.Bot(command_prefix='l>', description='Hype Levels')

def threshold(n):
    level_threshold = 5*(n**2)+50*n+100
    return level_threshold

@bot.command(pass_context=True)
async def rank(ctx):

    try:
        _, member = (ctx.message.content).split(' ', 1)
        member = re.sub("[^0-9]", "", member)
    except:
        member = ctx.message.author.id

    db = sqlite3.connect('users.db')
    c = db.cursor()

    c.execute('SELECT user.*, (SELECT count(*) FROM users AS members WHERE members.rawexp > user.rawexp) as Rank FROM users AS user WHERE id = ?',
              (ctx.message.author.id, ))

    user = c.fetchone()
    db.close()

    rank = str(user[6] + 1)

    embed = discord.Embed(title='{}'s Information'.format(ctx.message.author.name)) 
            .set_thumbnail(url=ctx.message.author.avatar_url) 
            .add_field(name='Rank', value='#' + rank) 
            .add_field(name='Level', value=user[2]) 
            .add_field(name='EXP', value='{}/{}'.format(user[3], threshold(user[2]))) 
            .add_field(name='Raw EXP', value=user[4]) 

    await ctx.send(embed=embed)

@bot.event
async def on_message(message):

    if message.author == bot.user:
        return
    if message.author.bot:
        return

    if message.content.startswith('l>'):
        await bot.process_commands(message)
        return

    db = sqlite3.connect('users.db')
    c = db.cursor()

    c.execute('SELECT * FROM users WHERE id= ?', (message.author.id,))
    user = c.fetchone()

    if user is None:
        await message.channel.send('Looks like you're new! Welcome to level 1. Initializing player...')
        c.execute('INSERT INTO users(id, name, level, exp, rawexp, time) VALUES(?,?,?,?,?,?)', (message.author.id, message.author.name, 1, 0, 0, time.time()))
        db.commit()
        db.close()
        return

    if message.author.name != user[1]:
        c.execute('UPDATE users SET name = ? WHERE id= ?', (message.author.name, message.author.id))

    if (time.time() - user[5]) > 60:
        addedexp = random.randint(10, 25)
        exp = user[3] + addedexp
        rawexp = user[4] + addedexp
        c.execute('UPDATE users SET exp = ?, rawexp = ?, name = ?, time = ? WHERE id= ?', (exp, rawexp, message.author.name, time.time(), message.author.id))

        if (exp > threshold(user[2])):
            level = user[2] + 1
            c.execute('UPDATE users SET exp = ?, level = ? WHERE id= ?', (0, level, message.author.id))
            await message.channel.send('Wowza! You leveled up! Your level is now **{}**.'.format(level))


    db.commit()
    db.close()

    await bot.process_commands(message)

@bot.event
async def on_ready():
    print("HypeLevels V1.1")
    print("Made by: Garbodonk#6347")
    print("Bot Name: " + str(bot.user.name))
    print("Bot ID: " + str(bot.user.id))
    await bot.change_presence(activity=discord.Streaming(name='some HYPE', url="https://www.twitch.tv/hypepixelbot", type=1))

    #Initialize database.
    db = sqlite3.connect('users.db')
    c = db.cursor()
    c.execute('CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY, name TEXT, level INT, exp INTEGER, rawexp INTEGER, time REAL)')
    db.commit()

bot.run('Token')

But I want to add an @tag when people level up so they get tagged

(但是我想在人们升级时添加一个@tag,以便他们获得标签)

if (exp > threshold(user[2])):
            level = user[2] + 1
            c.execute('UPDATE users SET exp = ?, level = ? WHERE id= ?', (0, level, message.author.id))
            await message.channel.send('Wowza! You leveled up! Your level is now **{}**.'.format(level))

anyone who knows how to do this?

(有谁知道该怎么做?)

To ask me questions or something just add me on discord: Garbodonk#6347

(要问我问题或其他问题,只需加我不和谐即可:Garbodonk#6347)

  ask by Garbodonk YT translate from so

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
等待大神答复

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...