Skip to main content
Glama
ISC License
188
172
bazi.ts5.31 kB
import { calculateRelation, getShen } from 'cantian-tymext'; import { ChildLimit, DefaultEightCharProvider, EightChar, Gender, HeavenStem, LunarHour, LunarSect2EightCharProvider, SixtyCycle, SolarTime, } from 'tyme4ts'; const eightCharProvider1 = new DefaultEightCharProvider(); const eightCharProvider2 = new LunarSect2EightCharProvider(); export const buildHideHeavenObject = (heavenStem: HeavenStem | null | undefined, me: HeavenStem) => { if (!heavenStem) { return undefined; } return { 天干: heavenStem.toString(), 十神: me.getTenStar(heavenStem).toString(), }; }; /** * @param sixtyCycle 干支。 * @param me 日主,如果sixtyCycle是日柱的话不传值。 */ export const buildSixtyCycleObject = (sixtyCycle: SixtyCycle, me?: HeavenStem) => { const heavenStem = sixtyCycle.getHeavenStem(); const earthBranch = sixtyCycle.getEarthBranch(); if (!me) { me = heavenStem; } return { 天干: { 天干: heavenStem.toString(), 五行: heavenStem.getElement().toString(), 阴阳: heavenStem.getYinYang() === 1 ? '阳' : '阴', 十神: me === heavenStem ? undefined : me.getTenStar(heavenStem).toString(), }, 地支: { 地支: earthBranch.toString(), 五行: earthBranch.getElement().toString(), 阴阳: earthBranch.getYinYang() === 1 ? '阳' : '阴', 藏干: { 主气: buildHideHeavenObject(earthBranch.getHideHeavenStemMain(), me), 中气: buildHideHeavenObject(earthBranch.getHideHeavenStemMiddle(), me), 余气: buildHideHeavenObject(earthBranch.getHideHeavenStemResidual(), me), }, }, 纳音: sixtyCycle.getSound().toString(), 旬: sixtyCycle.getTen().toString(), 空亡: sixtyCycle.getExtraEarthBranches().join(''), 星运: me.getTerrain(earthBranch).toString(), 自坐: heavenStem.getTerrain(earthBranch).toString(), }; }; const buildGodsObject = (eightChar: EightChar, gender: 0 | 1) => { const gods = getShen(eightChar.toString(), gender); return { 年柱: gods[0], 月柱: gods[1], 日柱: gods[2], 时柱: gods[3], }; }; const buildDecadeFortuneObject = (solarTime: SolarTime, gender: Gender, me: HeavenStem) => { const childLimit = ChildLimit.fromSolarTime(solarTime, gender); let decadeFortune = childLimit.getStartDecadeFortune(); const firstStartAge = decadeFortune.getStartAge(); const startDate = childLimit.getEndTime(); const decadeFortuneObjects: any[] = []; for (let i = 0; i < 10; i++) { const sixtyCycle = decadeFortune.getSixtyCycle(); const heavenStem = sixtyCycle.getHeavenStem(); const earthBranch = sixtyCycle.getEarthBranch(); decadeFortuneObjects.push({ 干支: sixtyCycle.toString(), 开始年份: decadeFortune.getStartSixtyCycleYear().getYear(), 结束: decadeFortune.getEndSixtyCycleYear().getYear(), 天干十神: me.getTenStar(heavenStem).getName(), 地支十神: earthBranch.getHideHeavenStems().map((heavenStem) => me.getTenStar(heavenStem.getHeavenStem()).getName()), 地支藏干: earthBranch.getHideHeavenStems().map((heavenStem) => heavenStem.toString()), 开始年龄: decadeFortune.getStartAge(), 结束年龄: decadeFortune.getEndAge(), }); decadeFortune = decadeFortune.next(1); } return { 起运日期: `${startDate.getYear()}-${startDate.getMonth()}-${startDate.getDay()}`, 起运年龄: firstStartAge, 大运: decadeFortuneObjects, }; }; export const buildBazi = (options: { lunarHour: LunarHour; eightCharProviderSect?: 1 | 2; gender?: Gender }) => { const { lunarHour, eightCharProviderSect = 2, gender = 1 } = options; if (eightCharProviderSect === 2) { LunarHour.provider = eightCharProvider2; } else { LunarHour.provider = eightCharProvider1; } const eightChar = lunarHour.getEightChar(); const me = eightChar.getDay().getHeavenStem(); return { 性别: ['女', '男'][gender], 阳历: lunarHour.getSolarTime().toString(), 农历: lunarHour.toString(), 八字: eightChar.toString(), 生肖: eightChar.getYear().getEarthBranch().getZodiac().toString(), 日主: me.toString(), 年柱: buildSixtyCycleObject(eightChar.getYear(), me), 月柱: buildSixtyCycleObject(eightChar.getMonth(), me), 日柱: buildSixtyCycleObject(eightChar.getDay()), 时柱: buildSixtyCycleObject(eightChar.getHour(), me), 胎元: eightChar.getFetalOrigin().toString(), 胎息: eightChar.getFetalBreath().toString(), 命宫: eightChar.getOwnSign().toString(), 身宫: eightChar.getBodySign().toString(), 神煞: buildGodsObject(eightChar, gender), 大运: buildDecadeFortuneObject(lunarHour.getSolarTime(), gender, me), 刑冲合会: calculateRelation({ 年: { 天干: eightChar.getYear().getHeavenStem().toString(), 地支: eightChar.getYear().getEarthBranch().toString() }, 月: { 天干: eightChar.getMonth().getHeavenStem().toString(), 地支: eightChar.getMonth().getEarthBranch().toString() }, 日: { 天干: eightChar.getDay().getHeavenStem().toString(), 地支: eightChar.getDay().getEarthBranch().toString() }, 时: { 天干: eightChar.getHour().getHeavenStem().toString(), 地支: eightChar.getHour().getEarthBranch().toString() }, }), }; };

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/cantian-ai/bazi-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server