✨ Withdraw money
This commit is contained in:
@@ -2,9 +2,11 @@ package dev.solsynth.snConnect.commands
|
||||
|
||||
import dev.solsynth.snConnect.services.SnOrderService
|
||||
import dev.solsynth.snConnect.services.SnService
|
||||
import dev.solsynth.snConnect.services.SnTransactionService
|
||||
import net.md_5.bungee.api.chat.ClickEvent
|
||||
import net.md_5.bungee.api.chat.TextComponent
|
||||
import net.milkbowl.vault.economy.Economy
|
||||
import net.milkbowl.vault.economy.EconomyResponse
|
||||
import org.bukkit.ChatColor
|
||||
import org.bukkit.Sound
|
||||
import org.bukkit.command.Command
|
||||
@@ -45,7 +47,8 @@ class SnCommand(private val sn: SnService, private val eco: Economy?) : CommandE
|
||||
|
||||
val doneComponent = TextComponent(ChatColor.GREEN.toString() + "Done!")
|
||||
val moneyComponent = TextComponent(ChatColor.GOLD.toString() + ChatColor.BOLD + " $bal$")
|
||||
val suffixComponent = TextComponent(ChatColor.GREEN.toString() +" has been added to your balance.")
|
||||
val suffixComponent =
|
||||
TextComponent(ChatColor.GREEN.toString() + " has been added to your balance.")
|
||||
|
||||
p0.playSound(p0.player!!, Sound.BLOCK_ANVIL_PLACE, 1.0F, 1.0F)
|
||||
p0.spigot().sendMessage(doneComponent, moneyComponent, suffixComponent)
|
||||
@@ -81,6 +84,48 @@ class SnCommand(private val sn: SnService, private val eco: Economy?) : CommandE
|
||||
p0.spigot().sendMessage(afterPaidComponent);
|
||||
}
|
||||
|
||||
"withdraw" -> {
|
||||
if (p3.size < 2) {
|
||||
p0.sendMessage(ChatColor.RED.toString() + "You need to specific an amount to deposit.")
|
||||
return true;
|
||||
}
|
||||
|
||||
val amount = p3[1].toDoubleOrNull();
|
||||
if (amount == null) {
|
||||
p0.sendMessage(ChatColor.RED.toString() + "You need to specific an amount of number to deposit.")
|
||||
return true;
|
||||
}
|
||||
|
||||
if (p3.size < 3) {
|
||||
p0.sendMessage(ChatColor.RED.toString() + "You need to specific a wallet account to deposit.")
|
||||
return true;
|
||||
}
|
||||
|
||||
val walletId = p3[2].toLongOrNull();
|
||||
if (walletId == null) {
|
||||
p0.sendMessage(ChatColor.RED.toString() + "You need to specific a wallet account to deposit.")
|
||||
return true;
|
||||
}
|
||||
|
||||
p0.sendMessage(ChatColor.GRAY.toString() + "Making transaction, please stand by...");
|
||||
|
||||
val bal = amount / 100;
|
||||
val resp = eco?.withdrawPlayer(p0.player, "Withdraw to Source Point - $bal SRC", amount);
|
||||
if (resp?.type != EconomyResponse.ResponseType.SUCCESS) {
|
||||
p0.sendMessage(ChatColor.RED.toString() + "Your in game account has no enough money for that.")
|
||||
return true;
|
||||
}
|
||||
|
||||
val transactionSrv = SnTransactionService(sn);
|
||||
val transaction = transactionSrv.makeTransaction(bal, "Withdraw from Highland MC", walletId);
|
||||
|
||||
val transactionHintComponent =
|
||||
TextComponent(ChatColor.GREEN.toString() + "Done! transaction number " + ChatColor.WHITE + ChatColor.BOLD + "#${transaction.id}")
|
||||
|
||||
p0.playSound(p0.player!!, Sound.BLOCK_ANVIL_PLACE, 1.0F, 1.0F)
|
||||
p0.spigot().sendMessage(transactionHintComponent)
|
||||
}
|
||||
|
||||
else -> {
|
||||
return false
|
||||
}
|
||||
|
@@ -10,7 +10,7 @@ import okhttp3.RequestBody.Companion.toRequestBody
|
||||
import java.io.IOException
|
||||
|
||||
@Serializable
|
||||
class SnOrderRequest(
|
||||
data class SnOrderRequest(
|
||||
@SerialName("client_id")
|
||||
val clientId: String,
|
||||
@SerialName("client_secret")
|
||||
|
@@ -0,0 +1,83 @@
|
||||
package dev.solsynth.snConnect.services
|
||||
|
||||
import kotlinx.datetime.Instant
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.json.Json
|
||||
import okhttp3.MediaType.Companion.toMediaTypeOrNull
|
||||
import okhttp3.Request
|
||||
import okhttp3.RequestBody.Companion.toRequestBody
|
||||
import java.io.IOException
|
||||
|
||||
@Serializable
|
||||
data class SnTransaction (
|
||||
val id: Long,
|
||||
@SerialName("created_at")
|
||||
val createdAt: Instant,
|
||||
@SerialName("updated_at")
|
||||
val updatedAt: Instant,
|
||||
@SerialName("deleted_at")
|
||||
val deletedAt: Instant? = null,
|
||||
val remark: String,
|
||||
val amount: String,
|
||||
@SerialName("payer_id")
|
||||
val payerID: Long? = null,
|
||||
@SerialName("payee_id")
|
||||
val payeeID: Long? = null
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class SnTransactionRequest(
|
||||
@SerialName("client_id")
|
||||
val clientId: String,
|
||||
@SerialName("client_secret")
|
||||
val clientSecret: String,
|
||||
@SerialName("payee_id")
|
||||
val payeeID: Long? = null,
|
||||
@SerialName("payer_id")
|
||||
val payerID: Long? = null,
|
||||
val remark: String,
|
||||
val amount: Double
|
||||
)
|
||||
|
||||
class SnTransactionService(private val sn: SnService) {
|
||||
private val json = Json {
|
||||
ignoreUnknownKeys = true
|
||||
}
|
||||
|
||||
fun makeTransaction(amount: Double, remark: String, payeeID: Long): SnTransaction {
|
||||
val body = SnTransactionRequest(
|
||||
sn.clientId,
|
||||
sn.clientSecret,
|
||||
amount = amount,
|
||||
remark = remark,
|
||||
payeeID = payeeID,
|
||||
);
|
||||
val request = Request.Builder()
|
||||
.url(sn.getUrl("wa", "/transactions"))
|
||||
.post(Json.encodeToString(body).toRequestBody("application/json".toMediaTypeOrNull()))
|
||||
.build()
|
||||
|
||||
sn.client.newCall(request).execute().use { response ->
|
||||
val responseBody = response.body!!.string()
|
||||
if (!response.isSuccessful) throw IOException("Unexpected code $response - $responseBody")
|
||||
val out = json.decodeFromString<SnTransaction>(responseBody)
|
||||
|
||||
return out
|
||||
}
|
||||
}
|
||||
|
||||
fun getTransaction(id: Long): SnTransaction {
|
||||
val request = Request.Builder()
|
||||
.url(sn.getUrl("wa", "/transactions/$id"))
|
||||
.get()
|
||||
.build()
|
||||
sn.client.newCall(request).execute().use { response ->
|
||||
if (!response.isSuccessful) throw IOException("Unexpected code $response")
|
||||
val responseBody = response.body!!.string()
|
||||
val out = json.decodeFromString<SnTransaction>(responseBody)
|
||||
|
||||
return out
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user