discord.py криптовалюта бот


Это питон discord.py бот я работаю на. Он показывает цены, 24-часовой объем, 1ч процентное изменение, 24ч процентное изменение, 7Д процентов изменить и многое другое для криптографирования. Я все еще работаю над добавлением такой же вещи как у меня для Эфириума, как я делаю для других криптографирования, но это работа в прогрессе.

Если у вас возникли вопросы, проблемы, или обратную связь с ботом, дайте мне знать!

import random
import asyncio
import requests
from discord import Game
from discord.ext.commands import Bot
import aiohttp
BOT_PREFIX = ("?", "!")
TOKEN = "insert your token here"

client = Bot(command_prefix=BOT_PREFIX)



@client.command(pass_context=True)
async def bitcoin(ctx):
    url = 'https://api.coindesk.com/v1/bpi/currentprice/BTC.json'
    response = requests.get(url)
    value = response.json()['bpi']['USD']['rate']
    await client.send_message(ctx.message.channel, "Bitcoin price is: $" + value)
@client.command()
async def eth():
    url = 'https://api.coinmarketcap.com/v1/ticker/ethereum/'
    response = requests.get(url)
    value = response.json()[0]["price_usd"]
    rank = response.json()[0]["rank"]
    supply = response.json()[0]["total_supply"]
    change1 = response.json()[0]["percent_change_1h"]
    change24 = response.json()[0]["percent_change_24h"]
    change72 = response.json()[0]["percent_change_7d"]
    vol24 = response.json()[0]["24h_volume_usd"]
    sym = response.json()[0]["symbol"]
    await client.say("Ethereum price is: $" + value)
    await client.say("Ethereums rank is: " + rank)
    await client.say("Ethereums total supply is: " + supply)
    await client.say("Ethereums percent change in the past hour is: " +change1)
    await client.say("Ethereums percent change in the past 24 hours is:" + change24)
    await client.say("Ethereums percent change in the past 7 days is: " + change72)
    await client.say("Ethereums 24 hour volume is: " + vol24)
    await client.say("Ethereums symbol is: " + sym)
@client.command()
async def ripple():
    url = 'https://api.coinmarketcap.com/v1/ticker/ripple/'
    response = requests.get(url)
    value = response.json()[0]["price_usd"]
    rank = response.json()[0]["rank"]
    supply = response.json()[0]["total_supply"]
    change1 = response.json()[0]["percent_change_1h"]
    change24 = response.json()[0]["percent_change_24h"]
    change72 = response.json()[0]["percent_change_7d"]
    vol24 = response.json()[0]["24h_volume_usd"]
    sym = response.json()[0]["symbol"]
    await client.say("Ripples price is: $" + value)
    await client.say("Ripples rank is: " + rank)
    await client.say("Ripples total supply is: " + supply)
    await client.say("Ripples percent change in the past hour is: " +change1)
    await client.say("Ripples percent change in the past 24 hours is:" + change24)
    await client.say("Ripples percent change in the past 7 days is:" + change72)
    await client.say("Ripples 24 hour volume is:" + vol24)
    await client.say("Ripples symbol is: " + sym)
@client.command()
async def litecoin():
    url = 'https://api.coinmarketcap.com/v1/ticker/litecoin/'
    response = requests.get(url)
    value = response.json()[0]["price_usd"]
    await client.say("Litecoin price is: $" + value)
@client.command()
async def neo():
    url = 'https://api.coinmarketcap.com/v1/ticker/neo/'
    response = requests.get(url)
    value = response.json()[0]["price_usd"]
    await client.say("NEO price is: $" + value)
@client.command()
async def eos():
    url = 'https://api.coinmarketcap.com/v1/ticker/eos/'
    response = requests.get(url)
    value = response.json()[0]["price_usd"]
    await client.say("EOS price is: $" + value)
@client.command()
async def dash():
    url = 'https://api.coinmarketcap.com/v1/ticker/dash/'
    response = requests.get(url)
    value = response.json()[0]["price_usd"]
    await client.say("DASH price is: $" + value)
@client.command()
async def zcash():
    url = 'https://api.coinmarketcap.com/v1/ticker/zcash/'
    response = requests.get(url)
    value = response.json()[0]["price_usd"]
    await client.say("Zcash price is: $" + value)
@client.command()
async def metal():
    url = 'https://api.coinmarketcap.com/v1/ticker/metal/'
    response = requests.get(url)
    value = response.json()[0]["price_usd"]
    await client.say("METAL coin price is: $" + value)
@client.command()
async def trump():
    url = 'https://api.coinmarketcap.com/v1/ticker/trumpcoin/'
    response = requests.get(url)
    value = response.json()[0]["price_usd"]
    await client.say("Trump Coin price is: $" + value)
@client.command()
async def gas():
    url = 'https://api.coinmarketcap.com/v1/ticker/gas/'
    response = requests.get(url)
    value = response.json()[0]["price_usd"]
    await client.say("GAS coin price is: $" + value)
@client.command()
async def gts():
    url = 'https://api.coinmarketcap.com/v1/ticker/game/'
    response = requests.get(url)
    value = response.json()[0]["price_usd"]
    await client.say("GTS coin price is: $" + value)
@client.command()
async def salus():
    url = 'https://api.coinmarketcap.com/v1/ticker/salus/'
    response = requests.get(url)
    value = response.json()[0]["price_usd"]
    await client.say("Salus coin price is: $" + value)

##########################
















client.run(TOKEN)


624
3
задан 31 марта 2018 в 08:03 Источник Поделиться
Комментарии
2 ответа

Вы, конечно, могли бы сделать его более объектно-ориентированный. Кроме того, все ваши функции в начале рассчитывать на определенный URL-адрес, вы можете либо а) создать класс, который имеет методы, но и переменные экземпляра являются различные URL-адреса, или Б) создать еще один .файл py, которая исключительно состоит из вашем пути URL, и импортировать этот файл. Если идти по этому пути, я бы рекомендовал все прописные буквы для имен переменных, чтобы показать, что они константы. Вы могли бы назвать другие URL-адрес файла, а затем внутри URL.py создаем переменную как eth_url, а затем внутри этой основной файл py можно будет импортировать URL-адрес и тогда доступ к нему такой:

URL.eth_url

Вы начали создавать функции для конкретных валютах (Эфириума, пульсация и т. д.) Вы должны обобщить ваши функции. Обратите внимание, что URL-адрес для веб-сайта вы тянете с образом узором, 'https://api.coinmarketcap.com/v1/ticker/ripple/'

Где последняя часть URL-адреса-это название монеты. Вы могли бы создать словарь названий монет и их эквивалент имени на сайте (по большей части они были бы 1:1, но там могут быть некоторые распространенные имена, которые имеют несколько разных URL-адрес). Затем как только вы получили этот словарь, изменить функции от пульсации или ETH для:

@client.command()
async def get_coin_info(coin):

4
ответ дан 31 марта 2018 в 11:03 Источник Поделиться

Попробовать сухой:

Один из основных принципов хорошего программного обеспечения практика не повторяться (ака: сухой). У вас очень большой пробег функций, которые все почти одинаковые. Они выглядят как:

@client.command()
async def dash():
url = 'https://api.coinmarketcap.com/v1/ticker/dash/'
response = requests.get(url)
value = response.json()[0]["price_usd"]
await client.say("DASH price is: $" + value)
@client.command()
async def zcash():
url = 'https://api.coinmarketcap.com/v1/ticker/zcash/'
response = requests.get(url)
value = response.json()[0]["price_usd"]
await client.say("Zcash price is: $" + value)
@client.command()
async def metal():
url = 'https://api.coinmarketcap.com/v1/ticker/metal/'
response = requests.get(url)
value = response.json()[0]["price_usd"]
await client.say("METAL coin price is: $" + value)

Они могли быть преобразована в следующий вид:

@client.command()
def dash():
run_command('DASH', 'https://api.coinmarketcap.com/v1/ticker/dash/')

@client.command()
def zcash():
run_command('Zcash', 'https://api.coinmarketcap.com/v1/ticker/zcash/')

@client.command()
async def metal():
run_command('METAL', 'https://api.coinmarketcap.com/v1/ticker/salus/')

async def run_command(name, url):
response = requests.get(url)
value = response.json()[0]["price_usd"]
await client.say("{} coin price is: ${}".format(name, value))

Это имеет то преимущество, что различия между почти теми же функциями, гораздо более явной.

Строка форматирования:

Кроме того, я думаю eth() и ripple() также могут быть консолидированы с помощью форматирования строк , чтобы выглядеть так:

@client.command()
def ripple():
url = 'https://api.coinmarketcap.com/v1/ticker/ripple/'
messages = (
"Ripples price is: ${price_usd}",
"Ripples rank is: {rank}",
"Ripples total supply is: {total_supply}",
"Ripples percent change in the past hour is: {percent_change_1h}",
"Ripples percent change in the past 24 hours is:{percent_change_24h}",
"Ripples percent change in the past 7 days is:{percent_change_7d}",
"Ripples 24 hour volume is:{24h_volume_usd}",
"Ripples symbol is: {symbol}",
)
say_details(url, messages)

async def say_details(url, messages):
response = requests.get(url).json()[0]
for msg in messages:
await client.say(msg.format(**response))

Pep8

Вы должны рассмотреть возможность форматирования кода в соответствии с pep8. Это важно при обмене код, как единый стиль делает его гораздо легче для других программистов, которые будут читать ваш код. Существуют различные инструменты, доступные, чтобы помочь сделать код совместимым pep8. Я использую PyCharm IDE, которая покажет pep8 нарушения прямо в Редакторе.

3
ответ дан 31 марта 2018 в 11:03 Источник Поделиться